-
Queue(2) - Linked Queue자료구조 2022. 7. 8. 16:19
Linked Queue는 Singly Linked List와 구조가 똑같다.

주요 연산:
Enqueue(삽입)
Dequeue(삭제)
enqueue는 rear 뒤에, dequeue는 front를 반환해주면 된다.
// gcc -o Test_LinkedQueue.exe Test_LinkedQueue.c LinkedQueue.c; ./Test_LinkedQueue.exe typedef struct tagNode { char* Data; struct tagNode* NextNode; } Node; typedef struct tagLinkedQueue { Node* Front; Node* Rear; int Count; } LinkedQueue; void LQ_CreateQueue( LinkedQueue** Queue ) { /* 큐를 자유저장소에 생성 */ (*Queue ) = ( LinkedQueue*)malloc(sizeof( LinkedQueue ) ); (*Queue )->Front = NULL; (*Queue )->Rear = NULL; (*Queue )->Count = 0; } void LQ_DestroyQueue( LinkedQueue* Queue ) { while ( !LQ_IsEmpty( Queue ) ) { Node* Popped = LQ_Dequeue( Queue ); LQ_DestroyNode(Popped); } /* 큐를 자유 저장소에서 해제 */ free( Queue ); } Node* LQ_CreateNode( char* NewData ) { Node* NewNode = (Node*)malloc( sizeof( Node ) ); NewNode->Data = (char*)malloc( strlen( NewData) + 1); strcpy(NewNode->Data, NewData); /* 데이터를 저장한다. */ NewNode->NextNode = NULL; /* 다음 노드에 대한 포인터는 NULL로 초기화 한다. */ return NewNode;/* 노드의 주소를 반환한다. */ } void LQ_DestroyNode(Node* _Node ) { free(_Node->Data); free(_Node ); } void LQ_Enqueue( LinkedQueue* Queue, Node* NewNode ) { if ( Queue->Front == NULL ) { Queue->Front = NewNode; Queue->Rear = NewNode; Queue->Count++; } else { Queue->Rear->NextNode = NewNode; Queue->Rear = NewNode; Queue->Count++; } } Node* LQ_Dequeue( LinkedQueue* Queue ) { /* LQ_Dequeue() 함수가 반환할 최상위 노드 */ Node* Front = Queue->Front; if ( Queue->Front->NextNode == NULL ) { Queue->Front = NULL; Queue->Rear = NULL; } else { Queue->Front = Queue->Front->NextNode; } Queue->Count--; return Front; } int LQ_IsEmpty( LinkedQueue* Queue ) { return ( Queue->Front == NULL); } int main( void ) { Node* Popped; LinkedQueue* Queue; LQ_CreateQueue(&Queue ); LQ_Enqueue( Queue, LQ_CreateNode("abc") ); LQ_Enqueue( Queue, LQ_CreateNode("def") ); LQ_Enqueue( Queue, LQ_CreateNode("efg") ); LQ_Enqueue( Queue, LQ_CreateNode("hij") ); printf("Queue Size : %d\n", Queue->Count); while ( LQ_IsEmpty( Queue ) == 0 ) { Popped = LQ_Dequeue( Queue ); printf( "Dequeue: %s \n", Popped->Data ); LQ_DestroyNode( Popped ); } LQ_DestroyQueue( Queue ); return 0; }'자료구조' 카테고리의 다른 글
Tree(2) - Binary Tree (0) 2022.07.10 Tree(1) - Tree 구현 (0) 2022.07.10 Queue(1) - Circular Queue (0) 2022.07.08 Stack(3) - 사칙 연산 계산기 (0) 2022.07.08 Stack(2) - Linked List Stack (0) 2022.07.08
