학교/자료구조 7

6. 트리

트리 노드로 이루어진 자료구조 트리는 하나의 루트 노드를 갖는다. 루트 노드는 0개 이상의 자식 노드를 갖는다. 그 자식노드 또한 0개 이상의 자식노드를 갖는다. 트리에는 싸이클이 존재할 수 없다. 각 노드느 부모 노드로의 연결이 있을수도 없을수도 있다. 비선형 자료구조로 계층적 관계를 표현 기본 용어 노드 : 한 정보 아이템 + 다른 노드로 뻗어진 가지 차수 : 한 노드의 서브트리 수 단말 노드 : 차수 = 0 비단말노드 : 차수 != 0 형제 : 부모가 같은 노드 리프 노드 : 자식이 없는 노드 부모 자식 트리의 차수 : 그 트리의 노드의 최대 차수 조상 : 루트에서부터 그 노드에 이르는 경로상의 모든 노드 레벨 루트 : 레벨 1 자식 : 부모 + 1 트리의 높이, 깊이 : 최대 레벨 산술식 A + ..

학교/자료구조 2022.03.14

5. 이중 연결리스트

이중 연결리스트 각 노드가 선행노드와 후속 노드에 대한 링크를 가지는 리스트 노드의 왼쪽링크와 오른쪽 링크를 가지고 헤드노드를 가진다. 노드 구조 typedef struct node *nodepoint; typedef struct node { nodepoint llink; int data; nodepoint rlink; } 노드 삽입 void dinsert(nodepoint node, nodepoint newnode) { newnode -> llink = node; newnode -> rlintk = node -> link; node -> rlink -> llink = newnode; node -> rlink = newnode; } 노드 삭제 void ddelete(nodepoint node, nodep..

학교/자료구조 2022.03.14

4. 연결 리스트

연결리스트 (Linked list) 노드를 연결시킨 자료구조 노드는 데이터와 포인터를 가지고 있다. 장점 길이가 가변적 단점 데이터를 바로 찾아낼 수 없고, 전부 탐색해야 한다. 노드 구조 typedef struct listNode listNode *listpoint; typedef struct listNode{ int data; listpoint link; }; 저렇게 정의를 어떻게 하는지 이해가 안 됐는데 암묵적 허용(?)이라고 한다. 두 개의 노드 가진 연결리스트 생성 listpointer create2() { listpoint first, second; Malloc(first, sizeof(listNode); Malloc(second, sizeof(listNode); second -> link =..

학교/자료구조 2022.03.14

3. 스택과 큐

스택 (Stack) LIFO (Last-in, First-out) 리스트 한 쪽에서만 삽입과 삭제를 수행하는 자료구조 처음 삽입된 데이터가 가장 나중에 제거된다. int stack[MAX_SIZE]; int top = -1; void push(int item){ if(top >= MAX_SIZE-1) stackFull(); stack[++top = item; } int pop(){ if(top == -1) return stackEmpty(); return stack[top--]; } top stack push(A) 0 A C push(B) 1 B pop() 0 pop() -1 pop() stackEmpty() push(C) 0 큐 (queue) FIFO (First-in, First-out) 리스트에서 ..

학교/자료구조 2021.09.28

2-2. 다항식

기호 다항식의 조작 a : cofficient (계수) e : exponenet (지수) x : variable (변수) degree(차수) : 다항식에서 가장 큰 지수 다항식 표현(1) degree (MAX 지수) coefficient 3 1 10 3 7 #define MAX_D 100 typedef struct{ int degree; float coef[MAX_D]; }polynomial; polynomial a; a.degree = 3; // a.coef[i] = a_n-i a.coef[0] = a_n-0; // 1 a.coef[1] = a_n-1; // 10 a.coef[2] = a_n-2; // 3 a.coef[3] = a_n-3; // 7 다항식 표현(2) * 0인 항이 많을 경우 유용 0 1..

학교/자료구조 2021.09.27

2-1. 배열과 구조

포인터 해석 int *list1; int list2[5]; list2 &list2[0] list2 + i &list2[i] (list2 + i) &list2[i] *(list2 + i) list2[i] if(i == 2) list2[i] a+2*sizeof(int) list2[2] → a+2*4 // a : 임의의 주소 값 역참조 list[i] "=" 기호 우측 : (list + i)가 가리키는 값 "=" 기호 좌측 : 값을 (list+i)에 저장 일차원 배열의 주소 계산 prt+i → 주소 *(prt + i) → 가리키는 값 void print1(int *prt, int rows){ int i; for(i=0; i

학교/자료구조 2021.09.27

1. 기본개념

포인터 & : 주소 연산자 * : 간접지시 연산자 int i, j, *pi, *pj; i = 20; pi = &i; j = *pi; *pi = 10; pj = &j; *pi = *pj; value address i 20 10 20 3000 j 20 3004 pi 3000 3008 pj 3004 30012 동적 메모리 할당 (heap 기법) malloc 필요한 양의 공간을 요구하는 함수 사용할 경우 : 메모리 영역의 시작 주소 반환 사용하지 않을 경우 : Null 포인터 반환 + free() 함수 : 영역을 시스템에 반환 int i, *pi; float f, *pf; i = 1024; pi = (int *)malloc(sizeof(int)); *pi = i; f = 3.14; pf = (float *)ma..

학교/자료구조 2021.09.27