자료 ꡬ쑰 11

κ·Έλž˜ν”„

κ·Έλž˜ν”„μ˜ 좔상 μžλ£Œν˜• void GraphInit(UALGraph *pg, int nv) κ·Έλž˜ν”„μ˜ μ΄ˆκΈ°ν™”λ₯Ό μ§„ν–‰ν•œλ‹€. 두 번째 인자둜 μ •μ μ˜ 수λ₯Ό μ „λ‹¬ν•œλ‹€. void GraphDestroy(UALGraph *pg) κ·Έλž˜ν”„ μ΄ˆκΈ°ν™” κ³Όμ •μ—μ„œ ν• λ‹Ήν•œ λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•œλ‹€. void AddEdge(UALGraph *pg, int fromV, int Tov) λ§€κ°œλ³€μˆ˜ fromV와 toV둜 μ „λ‹¬λœ 정점을 μ—°κ²°ν•˜λŠ” 간선을 κ·Έλž˜ν”„μ— μΆ”κ°€ν•œλ‹€. void ShowGraphEdgeInfo(UALGraph *pg) κ·Έλž˜ν”„μ˜ 간선정보λ₯Ό 좜λ ₯ν•œλ‹€. κ·Έλž˜ν”„λ₯Ό κ΅¬ν˜„ν•˜λŠ” 두가지 방법 인접 ν–‰λ ¬ 기반 κ·Έλž˜ν”„ 인접 리슀트 기반 κ·Έλž˜ν”„ 인접 행렬을 기반으둜 κ΅¬ν˜„ ν•  경우 μ—°κ²° λ˜μ–΄ μžˆλŠ” 선이 μžˆλŠ” λ°©ν–₯에 1을 κ·Έλ ‡μ§€ μ•Šμ€ 경우 0을 ν‘œμ‹œν•œλ‹€. ..

이진 탐색 트리

이진탐색 νŠΈλ¦¬λŠ” μ΄μ§„νŠΈλ¦¬μ˜ 일쒅이닀. 이진 νƒμƒ‰νŠΈλ¦¬λŠ” μ €μž₯ ν•  λ•Œ 큐칙이 μžˆλ‹€. μ•„μ§„ 탐색 트리의 λ…Έλ“œμ— μ €μž₯된 ν‚€λŠ” μœ μΌν•˜λ‹€. 루트 λ…Έλ“œμ˜ ν‚€κ°€ μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬λ₯Ό κ΅¬μ„±ν•˜λŠ” μ–΄λ– ν•œ λ…Έλ“œμ˜ 킀보닀 크닀. 루트 λ…Έλ“œμ˜ ν‚€κ°€ 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬λ₯Ό κ΅¬μ„±ν•˜λŠ” μ–΄λ– ν•œ λ…Έλ“œμ˜ 킀보닀 μž‘λ‹€. 이런 μ‹μœΌλ‘œ 자료 ꡬ쑰λ₯Ό μ„€μ •ν•œλ‹€κ³  μƒκ°ν•˜λ©΄ 값을 탐색 ν•  λ•Œ, 길을 μžƒμ„ 일이 없을 것이닀. μ™Όμͺ½ μžμ‹ λ…Έλ“œμ˜ ν‚€ < λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ < 였λ₯Έμͺ½ μžμ‹ λ…Έλ“œμ˜ ν‚€ 이진 νƒμƒ‰νŠΈλ¦¬μ˜ 좔상 μžλ£Œν˜• 이진 탐색 νŠΈλ¦¬μ™€ 크게 λ‹€λ₯΄μ§€ μ•Šλ‹€. void BSTMakeAndInit(BTreeNode **pRoot) BSTData BSTGetNodeData(BTreeNode *bst); void BSTInsert(BTreeNode **pRoot, BSTD..

BFS κ΅¬ν˜„

BFS κ°œλ…: https://yongdeok.tistory.com/entry/%EA%B7%B8%EB%9E%98%ED%94%84 DFSλ₯Ό μ™„μ „νžˆ μ΄ν•΄ν•˜λ©΄ 더 μ‰½κ²Œ 이해할 수 μžˆλ‹€. compile with CircularQueue → https://yongdeok.tistory.com/7 LinkedList → https://yongdeok.tistory.com/3 Bfs.c void BFShowGraphVertex(ALGraph *pg, int startV) { Queue queue; int visitV = startV; int nextV; QueueInit(&queue); VisitVertex(pg, visitV); while (LFirst(&(pg->adjList[visitV]), &nextV) == ..

DFS κ΅¬ν˜„

DFS κ°œλ…: https://yongdeok.tistory.com/entry/%EA%B7%B8%EB%9E%98%ED%94%84 그림을 그리지 μ•ŠμœΌλ©΄ μ΄ν•΄ν•˜κΈ° νž˜λ“€κ²ƒ κ°™κΈ° λ•Œλ¬Έμ— 그림을 κ·Έλ¦¬λ©΄μ„œ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜λ©΄ 쒋을것 κ°™λ‹€. compile with Stack.c→https://yongdeok.tistory.com/6 LinkedList.c → https://yongdeok.tistory.com/3 Graph.h #ifndef __AL_GRAPH_H__ #define __AL_GRAPH_H__ #include "DLinkedList.h" enum {A, B, C, D, E, F, G, H, I, J}; typedef struct _ual { int numV; // λ…Έλ“œ 갯수 int numE; // κ°„μ„  갯수..

ν…Œμ΄λΈ”κ³Ό 해쉬 κ°œλ…

ν…Œμ΄λΈ”μ€ 사전과 같이 단어λ₯Ό 톡해 의미λ₯Ό μ°ΎλŠ” ν–‰μœ„μ™€ λΉ„μŠ·ν•˜λ‹€. λ‚΄κ°€ κ°€μ§„ 단어λ₯Ό 검색해 의미λ₯Ό μ•Œμˆ˜ μžˆλ“―, ν…Œμ΄λΈ” μžλ£Œκ΅¬μ‘°λŠ” λ‚΄κ°€ κ°€μ§„ ν‚€λ₯Ό ν™œμš©ν•΄ 값을 λ„£κ³  찾을 수 μžˆλ‹€. “μ €μž₯ λ˜λŠ” λ°μ΄ν„°λŠ” 킀와 값이 ν•˜λ‚˜μ˜ μŒμ„ 이룬닀” 이렇듯 ν…Œμ΄λΈ”μ— μ €μž₯λ˜λŠ” λͺ¨λ“  데이터듀은 ν‚€κ°€ μžˆμ–΄μ•Ό ν•˜λ©° ν‚€λŠ” κ³ μœ ν•œ 값을 κ°€μ Έμ•Όν•œλ‹€. StuInfo stuInfoArr[1000]; StuInfo student; int stuNum; printf("ν•™λ²ˆκ³Ό λ‚˜μ΄ μž…λ ₯: "); scanf("%d %d", &(student.stuEmp), &(student.age)); stuInfoArr[student.stuEmp] = student; μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” κ³ μœ ν•œ ν•™μƒλ²ˆν˜Έλ₯Ό μ΄μš©ν•˜μ—¬ 배열에 값을 λ„£μ—ˆλ‹€. μ΄λ ‡κ²Œ μ½”λ“œλ₯Ό κ΅¬μ„±ν•˜λ©΄ ν•™μƒμ˜..

νž™ κ°œλ…

νž™μ˜ μΆ”μƒμžλ£Œν˜• void HeapInit(Heap *ph, PriorityComp pc) μ΄ˆκΈ°ν™”ν•  νž™ μ£Όμ†Œ 값을 인자둜 전달 ν•΄μ•Όν•œλ‹€. νž™ 생성 ν›„ 제일 λ¨Όμ € ν˜ΈμΆœλ˜μ–΄μ•Ό ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. νž™μ˜ μš°μ„ μˆœμœ„λ₯Ό μ •ν•  ν•¨μˆ˜λ₯Ό 인자둜 μ „λ‹¬ν•œλ‹€. void HInsert(Heap *ph, HData data); νž™μ— 데이터λ₯Ό μ €μž₯ν•œλ‹€. λ§€κ°œλ³€μˆ˜ data둜 μ „λ‹¬λœ 값을 μ €μž₯ν•œλ‹€. HData HDelete(Heap *ph); μ €μž₯μˆœμ„œκ°€ κ°€μž₯ μ•žμ„  데이터λ₯Ό μ‚­μ œν•œλ‹€. μ‚­μ œλœ λ°μ΄ν„°λŠ” λ°˜ν™˜λœλ‹€. λ³Έ ν•¨μˆ˜μ˜ ν˜ΈμΆœμ„ μœ„ν•΄μ„œλŠ” 데이터가 ν•˜λ‚˜ 이상 μ‘΄μž¬ν•¨μ΄ 보μž₯λ˜μ–΄μ•Ό ν•œλ‹€. νž™μ€ μ™„μ „ 이진 νŠΈλ¦¬μ΄λ©΄μ„œ μ–΄λŠ μœ„μΉ˜μ—μ„œλ„ λ‹€μŒ 식이 μ„±λ¦½ν•œλ‹€. μžμ‹ λ…Έλ“œ λ°μ΄ν„°μ˜ μš°μ„ μˆœμœ„ ≤ λΆ€λͺ¨λ…Έλ“œ λ°μ΄ν„°μ˜ μš°μ„ μˆœμœ„ νž™μ˜ μ €μž₯κ³Όμ • μƒˆλ‘œμš΄ λ°μ΄ν„°μ˜ μš°μ„ μˆœμœ„..

트리 κ°œλ… 및 κ΅¬ν˜„

νŠΈλ¦¬λŠ” λ‹€λ₯Έ μžλ£Œκ΅¬μ‘°μ™€ λ‹€λ₯΄κ²Œ λΉ„μ„ ν˜• μžλ£Œκ΅¬μ‘°μ΄λ‹€. νŠΈλ¦¬λŠ” κ°€μ§€λ₯Ό λ»—μ–΄ λ‚˜μ•„κ°„λ‹€. 트리의 좔상 μžλ£Œν˜• BTreeNode *MakeBtreeNode(void); 이진 트리 λ…Έλ“œλ₯Ό μƒμ„±ν•˜μ—¬ κ·Έ μ£Όμ†Œκ°’μ„ λ°˜ν™˜ν•œλ‹€. BTData GetData(BTreeNode *bt); λ…Έλ“œμ— μ €μž₯된 데이터λ₯Ό λ°˜ν™˜ν•œλ‹€. void SetData(BTreeNode *bt, BTData data); λ…Έλ“œμ— 데이터λ₯Ό μ €μž₯ν•œλ‹€. data둜 μ „λ‹¬λœ 값을 μ €μž₯ν•œλ‹€. BTreeNode *GetLeftSubTree(BTreeNode *bt); μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬μ˜ μ£Όμ†Œ 값을 λ°˜ν™˜ν•œλ‹€. BTreeNode *GetRIghtSubTree(BTreeNode *bt); 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬μ˜ μ£Όμ†Œ 값을 λ°˜ν™˜ν•œλ‹€. void MakeLeftSubTree(BTreeN..

큐 κ°œλ…

큐의 μΆ”μƒμžλ£Œν˜• void QueueInit(Queue *pq) 큐의 μ΄ˆκΈ°ν™”λ₯Ό μ§„ν–‰ν•œλ‹€. 큐 생성후 제일 λ¨Όμ € 호좜 λ˜μ–΄μ•Ό ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. int QIsEmpty(Queue *pq) 큐가 빈 경우 1, κ·Έλ ‡μ§€ μ•Šμ€ 경우 0을 λ°˜ν™˜ν•œλ‹€. void Enqueue(Queue *pq, Data data) 큐에 데이터λ₯Ό μ €μž₯ν•œλ‹€. λ§€κ°œλ³€μˆ˜ data둜 μ „λ‹¬λœ 값을 μ €μž₯ν•œλ‹€. Data Dequeue(Queue *pq) μ €μž₯μˆœμ„œκ°€ κ°€μž₯ μ•žμ„  데이터λ₯Ό μ‚­μ œν•œλ‹€. μ‚­μ œλœ λ°μ΄ν„°λŠ” λ°˜ν™˜λœλ‹€. λ³Έ ν•¨μˆ˜μ˜ ν˜ΈμΆœμ„ μœ„ν•΄μ„œλŠ” 데이터가 ν•˜λ‚˜ 이상 μ‘΄μž¬ν•¨μ΄ 보μž₯λ˜μ–΄μ•Ό ν•œλ‹€. Data QPeek(Queue *pq) μ €μž₯μˆœμ„œκ°€ κ°€μž₯ μ•žμ„  데이터λ₯Ό λ°˜ν™˜ν•˜λ˜ μ‚­μ œν•˜μ§€ μ•ŠλŠ”λ‹€. λ³Έ ν•¨μˆ˜μ˜ ν˜ΈμΆœμ„ μœ„ν•΄μ„œλŠ” 데이터가 ν•˜λ‚˜ 이상 μ‘΄μž¬ν•¨μ΄ 보μž₯λ˜μ–΄μ•Όν•œ..

μŠ€νƒ κ°œλ…

μŠ€νƒ 좔상 μžλ£Œν˜• void StackInit(Stack *pstack) μŠ€νƒμ˜ μ΄ˆκΈ°ν™”λ₯Ό μ§„ν–‰ν•œλ‹€. μŠ€νƒ 생성 ν›„ 제일 λ¨Όμ € ν˜ΈμΆœλ˜μ–΄μ•Ό ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. int SIsEmpty(Stack *pstack) μŠ€νƒμ΄ λΉ„μ–΄μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” ν•¨μˆ˜ μŠ€νƒμ΄ λΉ„μ–΄μžˆμ„μ‹œ 1, λΉ„μ–΄μžˆμ§€ μ•Šμ„μ‹œ 0을 λ°˜ν™˜ν•œλ‹€ void SPush(Stack *pstack, Data data) μŠ€νƒμ˜ 데이터λ₯Ό μ‚½μž…ν•œλ‹€ Data SPop(Stack *pstack) μŠ€νƒμ˜ 값을 μ‚­μ œν•œλ‹€(λ§ˆμ§€λ§‰ μš”μ†Œ). μ‚­μ œν•œ λ°μ΄ν„°μ˜ 값을 λ°˜ν™˜ν•œλ‹€. Data SPeek(Stack *pstack) λ§ˆμ§€λ§‰μ— μ €μž₯된 μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜λ˜ μ‚­μ œν•˜μ§€ μ•ŠλŠ”λ‹€. void SPush(Stack *pstack, Data data) μŠ€νƒμ˜ 데이터λ₯Ό μ‚½μž…ν•œλ‹€ Data SPop(Stack *p..

자료 ꡬ쑰 총 정리

μžλ£Œκ΅¬μ‘°μ—λŒ€ν•œ μ •λ³΄λŠ” μœ€μ„±μš°μ˜ 자료ꡬ쑰λ₯Ό κ³΅λΆ€ν•˜μ—¬ κ΅¬ν˜„ ν•˜μ˜€λ‹€!. λ§Žμ€ λ„μ„œλ₯Ό μ ‘ν•΄ 본것은 μ•„λ‹ˆλ‚˜ 정말 쉽고 이해 ν•˜κΈ° μ’‹κ²Œ μžλ£Œκ΅¬μ‘°μ— λŒ€ν•΄ μ„€λͺ…ν•΄ 놓은 μ±…!. μžμ‹ μ΄ μžλ£Œκ΅¬μ‘°μ— λŒ€ν•œ 지식이 λΆ€μ‘±ν•˜λ‹€λ©΄ 이 μ±…μœΌλ‘œ μ‹œμž‘ν•΄ λ³΄λŠ” 것을 μΆ”μ²œν•œλ‹€. 전체 정리: https://boiling-fowl-6d6.notion.site/c-397b56a504c444838b93d2967831506f