권오흠 자료구조 5

전화번호부 v5.0 - 구조체에 대한 포인터, 동적 메모리 할당

typedef struct person { char *name; char *number; char *email; char *group; } Person; Person directory[CAPACITY]; /* 구조체 배열 */ int n = 0; /* number of people in phone directory */ void status() { int i; for (i = 0; i < n; i++) print_person(directory[i]); printf("Total %d persons.\n", n); } void print_person(Person p) /* 매개변수 주목 */ { printf("%s:\n", p.name); printf(" Phone: %s\n", p.number); prin..

💡 자료구조 2021.07.11

전화번호부 v4.0 - 더 많은 항목 추가하기, 구조체

이름과 전화번호뿐만이 아니라 더 많은 항목을 추가하는 것이 목표이다. 이를 위해 구조체를 이용하는 방법을 생각해본다. ① 각 사람에 대해서 이름, 전화번호, 이메일 주소, 그리고 그룹(친구, 가족 등)을 지정할 수 있다. (단 이름을 제외한 다른 항목들은 비워 둘 수도 있다.) ② 이름이 하나 이상의 단어로 구성될 수 있으며, 단어 사이에 여러 개의 공백이 있을 경우 한 칸의 공백으로 저장된다. directory.txt 의 파일내용은 다음과 같다. # 가 구분자가 되고 # 사이의 공백은 해당 항목이 없음을 의미한다. David K.#0517778888# #Friend# Hong Gil-Dong# #henry@gmail.com# # John Doe# # # # Sean#01067356574#sean@nav..

💡 자료구조 2021.07.11

전화번호부 v3.0 - 배열 재할당, 라인단위 입력과 문자열 tokenizing

포인터는 변수의 주소를 가리키는 또 다른 변수라 생각하면된다. 그래서 포인터라고도 하지만 포인터 '변수'라고도 불리운다. 주소를 가리킨다는 말은 실제로는 포인터는 대상체의 주소값을 지닌다는 말이다. 이중 포인터란 그럼 포인터도 일종의 변수기 때문에, 포인터를 가리키는 포인터도 존재한다. 이를 이중 포인터라고 한다. 그런데 이런 이중 포인터의 선언 타입은 첫번째 포인터의 선언 타입을 따라간다. 결국 이중포인터도 최초의 변수 즉 최종 대상체가 되는 값의 타입을 기준으로 선언 되는 것이다. int a = 7; int *p1; int **p2; p1 = &a; p2 = &p1; printf("%d ", *p1); printf("%d", **p2); 출력 결과는 7 7 이 나온다. 2021.06.19 - [자료구..

💡 자료구조 2021.06.22

전화번호부 v2.0 - 파일을 저장하고 로드하기, 알파벳 순으로 정렬

2021.06.19 - [자료구조] - 전화번호부 v1.0 전화번호부 v1.0 오늘은 권오흠 교수님께서 전화번호부를 만드는 예제를 가르쳐주셨다. 여태까지 배웠던 C언어의 기초를 응용해서 전화번호부 예제를 만들 수 있었다. void add() { char buf1[BUFFER_SIZE], buf2[BUFFER_SIZE]; ts2ree.tistory.com 이전과 다른 점은 파일을 저장하고 로드하며, 전화번호부는 알파벳 순으로 정렬되어야 한다. 전화번호부 v2.0는 파일을 저장하고 로드하기 위한 load 함수와, save 함수가 추가되었다. 나머지 함수의 변화는 밑에서 살펴볼 것이다. void load() { // command = read char fileName[BUFFER_SIZE]; char buf1..

💡 자료구조 2021.06.19

전화번호부 v1.0

오늘은 권오흠 교수님께서 전화번호부를 만드는 예제를 가르쳐주셨다. 여태까지 배웠던 C언어의 기초를 응용해서 전화번호부 예제를 만들 수 있었다. void add() { char buf1[BUFFER_SIZE], buf2[BUFFER_SIZE]; scanf("%s", buf1); scanf("%s", buf2); names[n] = strdup(buf1); // strdup 와 strcpy 차이는? numbers[n] = strdup(buf2); n++; printf("%s was added successfully.\n", buf1); } buf1 과 buf2 는 지역변수이기 때문에 lifetime 은 짧다. 그러므로 이 함수를 벗어나게 되면 두 변수 모두 소멸하게 된다. 그래서 strdup 를 써주어야 하..

💡 자료구조 2021.06.19