본문 바로가기

C/자료구조

(17)
문과생이 이해한 트리(삭제) 출처 : + 학교 수업 void delete_node(TreeNode **root, int key) { TreeNode* p = NULL; TreeNode* t = *root; //키 탐색 while (t != NULL && t->key != key) { p = t; t = (key key) ? t->left : t->right; } if (t == NULL) { printf("Key is not in the tree"); return; } //단말 노드인 경우 if ((t->left == NULL) && (t->right == NULL)) { if (p != NULL) { if (p->left == t) p->left = NULL; else p->right = NULL; } else { *ro..
문과생이 이해한 트리(삽입, 삭제) 출처 : + 학교 수업 #include #include typedef struct TreeNode { int key; struct TreeNode *left, *right; }TreeNode; TreeNode* search(TreeNode* node, int key) { if (node == NULL) return NULL; if (key == node->key) return node; else if (key key) return search(node->left, key); else return search(node->right, key); } TreeNode* new_node(int item) { TreeNode* temp = (TreeNode*)malloc(sizeof(TreeNode)..
문과생이 이해한 트리(순회-스레드 이진트리) 출처 : + 학교 수업 #include #define TRUE 1 #define False 0 typedef struct TreeNode { int data; struct TreeNode* left, * right; int is_thread; }TreeNode; TreeNode n1 = { 'A', NULL, NULL, 1 }; TreeNode n2 = { 'B', NULL, NULL, 1 }; TreeNode n3 = { 'C', &n1, &n2, 0 }; TreeNode n4 = { 'D', NULL, NULL, 1 }; TreeNode n5 = { 'E', NULL, NULL, 0 }; TreeNode n6 = { 'F', &n4, &n5, 0 }; TreeNode n7 = { 'G', &n3, &..
문과생이 이해한 트리(순회-레벨 순회) 출처 : + 학교 수업 #include #include #define MAX 100 typedef struct TreeNode { int data; struct TreeNode* left, * right; }TreeNode; typedef struct { TreeNode* data[MAX]; int front, rear; }QueueType; void init(QueueType* q) { q->front = q->rear = 0; } int is_empty(QueueType* q) { return (q->front == q->rear); } int is_full(QueueType* q) { return ((q->rear) + 1) % MAX == q->front; } void enqueue(QueueTy..
문과생이 이해한 트리(순회-전위, 중위, 후위) 출처 : + 학교 수업 #include #include #include typedef struct TreeNode { int data; struct TreeNode* left, * right; }TreeNode; TreeNode n1 = { 1, NULL, NULL }; TreeNode n2 = { 4, &n1, NULL }; TreeNode n3 = { 16, NULL, NULL }; TreeNode n4 = { 25, NULL, NULL }; TreeNode n5 = { 20, &n3, &n4 }; TreeNode n6 = { 15, &n2, &n5 }; TreeNode* root = &n6; //전위 순회 void preorder(TreeNode* root) { if (root != NULL) { ..
문과생이 이해한 덱(deque- double-ended queue) 출처 : + 학교 수업 #include #include #define MAX 5 typedef struct { int data[MAX]; int front, rear; }DequeType; void init_deque(DequeType* q) { q->front = q->rear = 0; } int is_empty(DequeType* q) { return (q->front == q->rear); } int is_full(DequeType* q) { return ((q->rear+1)%MAX==q->front); } void deque_print(DequeType* q) { printf("Deque (front = %d, rear = %d) = ", q->front, q->rear); if (is_empt..
문과생이 이해한 연결된 큐 출처 : + 학교 수업 #include #include typedef struct { int data; struct QueueNode* link; }QueueNode; typedef struct { QueueNode* front; //삭제 QueueNode* rear; //삽입 }QueueType; void init(QueueType* q) { q->front = NULL; q->rear = NULL; } /*void enqueue_first(QueueType* q, int item) { QueueNode* new_node = (QueueNode*)malloc(sizeof(QueueNode)); new_node->data = item; new_node->link = NULL; q->rear = new_n..
문과생이 이해한 원형큐 ▲출처 : + 학교 수업 #include #include #define MAX 5 typedef struct { int front; int rear; int data[MAX]; }QueueType; void init(QueueType* q) { q->front = 0; q->rear = 0; } int is_full(QueueType *q) { if ((q->rear+1)%MAX==q->front) return 1; return 0; } int is_empty(QueueType* q) { if (q->front == q->rear) return 1; return 0; } void enqueue(QueueType* q, int item) { if (is_full(q)) { fprintf(stderr, "큐..