프로그래밍

구조체 동적 배열

지니아부지 2011. 7. 16. 01:54
 http://winapi.co.kr/clec/cpp2/19-1-3.htm

동적 배열 활용

동적 배열은 주소록, 비디오 대여점 관리, 워드 프로세서 등 관리 대상이 동일 타입의 집합이면서 크기가 가변적인 모든 프로그램에 응용 가능하다. 자료의 집합을 다룰 수 있으므로 원시적인 데이터 베이스라고 할 수 있다. 다음 예제는 앞에서 만들었던 동적 배열을 사용한 간단한 주소록 프로그램이다. 한 사람의 신상을 담는 구조체를 정의하고 이 구조체를 요소로 가지는 동적 배열을 만들었다. 배열의 요소 타입만 변경되었으므로 ELETYPE 매크로만 수정하고 나머지 전역변수와 관련 함수는 그대로 사용하면 된다.

 

: JusoArray

#include <Turboc.h>

 struct tag_NameCard

{

     char name[10];

     char tel[15];

     char addr[32];

};

 

#define ELETYPE tag_NameCard

 

==================== 소스 생략 =====================

ELETYPE *ar; ~ UnInitArray까지 DynArray 예제와 동일함

 

void main()

{

     char ch;

     unsigned i;

     tag_NameCard Temp;

 

     InitArray(10,5);

     for (;;) {

          printf("명령을 입력하세요(1:보기, 2:추가, 3:삭제, Q:종료) > ");

          ch=getch();

          printf("\n");

          if (ch == 'Q' || ch == 'q') {

              break;

          }

 

          switch(ch) {

          case '1':

              if (num == 0) {

                   printf("등록된 내용이 없습니다.\n");

              } else {

                   for (i=0;i<num;i++) {

                        printf("%d, 이름:%s, 전화:%s, 주소:%s\n",i,ar[i].name,

                             ar[i].tel,ar[i].addr);

                   }

              }

              break;

          case '2':

              printf("이름을 입력하세요(9자) : ");gets(Temp.name);

              printf("전화번호를 입력하세요(14자) : ");gets(Temp.tel);

              printf("주소를 입력하세요(31자) : ");gets(Temp.addr);

              Append(Temp);

              break;

          case '3':

              printf("삭제할 번호를 입력하세요 : ");scanf("%d",&i);

              if (i < num) {

                   Delete(i);

              } else {

                   printf("등록되지 않은 번호입니다.\n");

              }

              break;

          }

     }

 

     UnInitArray();

}

 

tag_NameCard가 사람 한명의 신상을 저장하는 인명 구조체이다. 예제에서는 간단하게 이름, 주소, 전화 번호 등의 기본 정보만 포함했지만 원한다면 얼마든지 더 상세한 정보들을 멤버로 포함할 수 있다. 이런 구조체 타입을 가리키는 ar은 동적 구조체 배열이며 ar이 곧 주소록 정보라고 할 수 있다.

구조체를 담는 배열 자체가 동적으로 관리되므로 얼마든지 많은 정보를 개수에 상관없이 저장할 수 있다. main 함수는 이 배열을 활용하여 입력, 삭제, 출력 등을 하는데 출력 루프, 사용자로부터의 입력 처리, 그리고 약간의 에러 처리 코드만 있을 뿐 배열 자체를 관리하는 일에 대해서는 신경쓰지 않는다. 특별히 어려운 코드는 없으므로 직접 분석해 보기 바란다.


'프로그래밍' 카테고리의 다른 글

[C특강] 배열을 사용한 효과적인 이중 링크드 리스트 구현  (0) 2011.07.23
C로 구현한 Queue  (0) 2011.07.18
동적배열  (0) 2011.07.16
How to cross-compile BASH for Android  (0) 2011.06.08
ioremap  (0) 2011.05.09