티스토리 뷰
구현소스
LinkedListQueue.h
#ifndef LINKEDLISTQUEUE_H #define LINKEDLISTQUEUE #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct tagNode{ char* Data; struct tagNode* NextNode; }Node; typedef struct tagLinkedQueue{ Node* Front; // 전단을 가리키는 포인터 Node* Rear; // 후단을 가리키는 포인터 int Count; // Node의 개수를 가짐 } LinkedQueue; void LQ_CreateQueue(LinkedQueue** Queue); // Queue 생성 void LQ_DestroyQueue(LinkedQueue* Queue); // Queue 파괴 - Queue에 존재하는 모든 Node를 해제 후 Queue 파괴 Node* LQ_CreateNode(char* Data); void LQ_DestroyNode(Node* _Node); void LQ_Enqueue(LinkedQueue* Queue, Node* NewNode); // Queue에 노드 삽입 // Node 생성과 동시 Queue에 Enqueue 를 하는 경우 LQ_Enqueue(Queue,LQ_CreateNode("XXX")) Node* LQ_Dequeue(LinkedQueue* Queue); // Queue에 Dequeue 수행 // Dequeue와 동시 Dequeue된 Node를 파괴하려면 // LQ_DestroyNode(LQ_Dequeue(Queue)) int LQ_IsEmpty(LinkedQueue* Queue); // Queue가 비어있는 여부 확인. void LQ_PrintQueue(LinkedQueue* Queue); // Queue의 모든 노드들의 데이터를 출력 - 자체제작 #endif ------------------------------------------------------------------------------------------
LinkedListQueue.cpp
#include "LinkedListQueue.h" // Queue 생성 void LQ_CreateQueue(LinkedQueue** Queue){ (*Queue) = (LinkedQueue*)malloc(sizeof(LinkedQueue)); (*Queue)->Front = NULL; (*Queue)->Rear = NULL; (*Queue)->Count = 0; } // Queue 파괴 - Queue에 존재하는 모든 Node를 해제 후 Queue 파괴 void LQ_DestroyQueue(LinkedQueue* Queue){ while(! (LQ_IsEmpty(Queue)) ){ Node* Dequeued = LQ_Dequeue(Queue); LQ_DestroyNode(Dequeued); } free(Queue); } Node* LQ_CreateNode(char* Data){ Node* NewNode = (Node*) malloc( sizeof(Node) ); NewNode->Data = (char*) malloc(strlen(Data) + 1); strcpy(NewNode->Data, Data); NewNode->NextNode = NULL; return NewNode; } void LQ_DestroyNode(Node* _Node){ free(_Node->Data); free(_Node); } // Queue에 노드 삽입 // Node 생성과 동시 Queue에 Enqueue 를 하는 경우 LQ_Enqueue(Queue,LQ_CreateNode("XXX")) void LQ_Enqueue(LinkedQueue* Queue, Node* NewNode){ // 큐에 노드가 없을 경우 if( LQ_IsEmpty(Queue) ) { // 전단과 후단 모두 NewNode를 가리키게 한다. Queue->Front = NewNode; Queue->Rear = NewNode; } else { // Rear의 링크를 조정한다. // 기존 Rear의 NextNode를 NewNode로 바꾸고 // Rear는 새로운 NewNode를 가리키게 함. Queue->Rear->NextNode = NewNode; Queue->Rear = NewNode; } // 수행후 노드의 개수를 증가 (Queue->Count)++; printf(" - Data : %s - Node Enqueued....\n",NewNode->Data); printf(" - Current Queue->Count = %d\n", Queue->Count); } // Queue에 Dequeue 수행 // Dequeue와 동시 Dequeue된 Node를 파괴하려면 // LQ_DestroyNode(LQ_Dequeue(Queue)) Node* LQ_Dequeue(LinkedQueue* Queue){ Node* Front = Queue->Front; // Front가 가리키는 Node를 저장 // Queue노드가 한개 남았을시 if(Queue->Front->NextNode == NULL) { // Queue의 Front와 Rear를 NULL로 .. Front == NULL -> Empty 상태 Queue->Front = NULL; Queue->Rear = NULL; } else { Queue->Front = Queue->Front->NextNode; } (Queue->Count)--; printf(" - Data : %s - Node Dequeue....\n",Front->Data); printf(" - Current Queue->Count = %d\n", Queue->Count); return Front; } // Queue가 비어있는 여부 확인. int LQ_IsEmpty(LinkedQueue* Queue){ return (Queue->Front == NULL); } // Queue의 모든 노드들의 데이터를 출력 - 자체제작 void LQ_PrintQueue(LinkedQueue* Queue){ Node* Printed = Queue->Front; printf(" *** Current Queue's Nodes *** \n"); while(Printed != NULL) { printf(" %s ->" , Printed->Data); Printed = Printed->NextNode; } printf("\n"); printf("\n"); }
--------------------------------------------------------------------------------
main.cpp
#include "LinkedListQueue.h" int main(){ LinkedQueue* Queue; LQ_CreateQueue(&Queue); // 큐 생성 // Enqueue 확인 LQ_Enqueue(Queue,LQ_CreateNode("AA")); LQ_Enqueue(Queue,LQ_CreateNode("BB")); LQ_Enqueue(Queue,LQ_CreateNode("CC")); LQ_PrintQueue(Queue); // Dequeue 확인 LQ_DestroyNode(LQ_Dequeue(Queue)); LQ_PrintQueue(Queue); LQ_DestroyQueue(Queue); puts(""); puts(""); // 재생성 확인 LQ_CreateQueue(&Queue); LQ_Enqueue(Queue,LQ_CreateNode("DD")); LQ_Enqueue(Queue,LQ_CreateNode("EE")); LQ_PrintQueue(Queue); LQ_DestroyQueue(Queue); return 0; } --------------------------------------------------------------------------------
실행결과
'Programming > 뇌를 자극하는 알고리즘' 카테고리의 다른 글
뇌를 자극하는 알고리즘 - 4. 트리 : Simple Binary Tree (0) | 2010.10.07 |
---|---|
뇌를 자극하는 알고리즘 - 4. 트리 : Left Child Right Sibling (0) | 2010.10.07 |
뇌를 자극하는 알고리즘 - 3. 큐 : 순환 큐 (0) | 2010.10.05 |
뇌를 자극하는 알고리즘 2. 스택 - Linked List Stack (0) | 2010.10.02 |
뇌를 자극하는 알고리즘 2. 스택 - ArrayStack (1) | 2010.10.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Farseer Physics
- 뇌를 자극하는 알고리즘
- Kinect Programming
- Hash table
- 윈도우즈 API 정복
- Stack
- MFC 예제
- Queue
- PackMan
- quick sort
- Linked list
- Tree
- 열혈강의C
- Pixel 색상값으로 구현한 간단한 충돌
- WinAPI
- IntersectRect
- Digits Folding
- Kinect Game Project
- Ice Climber
- WM_CONTEXTMENU
- SetTimer
- Tales of the Float Land
- Game project
- Data Structures in C
- 그림 맞추기 게임
- WM_TIMER
- Win32 API
- graph
- PtInRect
- 2D Game Project
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함