#ifndef LINKED_QUEUE_H
#define LINKED_QUEUE_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct tagNode {
char* Data;
struct tagNode * Next;
}Node;
typedef struct tagLinkedQueue{
Node* Front;
Node* Rear;
int Count;
}LinkedQueue;
void CreateQueue(LinkedQueue** Queue);
void DestroyQueue(LinkedQueue* Queue);
Node* CreateNode(char* Data);
void DestroyNode(Node* Node);
void Enqueue(LinkedQueue* Queue, Node* NewNode);
Node* Dequeue(LinkedQueue* Queue);
int IsEmpty(LinkedQueue* Queue);
#endif
==================================================================================
#include "LinkedQueue.h"
void CreateQueue(LinkedQueue** Queue) {
(*Queue) = (LinkedQueue*)malloc(sizeof(LinkedQueue));
(*Queue)->Front = NULL;
(*Queue)->Rear = NULL;
(*Queue)->Count = 0;
}
void DestroyQueue(LinkedQueue* Queue){
while (!IsEmpty(Queue)) {
Node *Popped = Dequeue(Queue);
DestroyNode(Popped);
}
free(Queue);
}
Node* CreateNode(char* Data) {
Node* NewNode = (Node*)malloc(sizeof(Node));
NewNode->Data = (char*)malloc(strlen(Data) + 1);
strcpy(NewNode->Data, Data);
NewNode->Next = NULL;
return NewNode;
}
void DestroyNode(Node* Node) {
free(Node->Data);
free(Node);
}
void Enqueue(LinkedQueue* Queue, Node* NewNode){
if (Queue->Front == NULL) {
Queue->Front = NewNode;
Queue->Rear = NewNode;
}
else {
Queue->Rear->Next = NewNode;
Queue->Rear = NewNode;
}
Queue->Count++;
}
Node* Dequeue(LinkedQueue* Queue) {
Node*Front = Queue->Front;
if (Queue->Front->Next == NULL) {
Queue->Front = NULL;
Queue->Rear = NULL;
}
else {
Queue->Front = Queue->Front->Next;
}
Queue->Count--;
return Front;
}
int IsEmpty(LinkedQueue* Queue) {
return(Queue->Front == NULL);
}
void main(){
Node* Popped;
LinkedQueue* Queue;
CreateQueue(&Queue);
Enqueue(Queue, CreateNode("abc"));
Enqueue(Queue, CreateNode("def"));
Enqueue(Queue, CreateNode("ghi"));
Enqueue(Queue, CreateNode("jkl"));
printf("Queue Size : %d\n", Queue->Count);
while (IsEmpty(Queue) == 0) {
Popped = Dequeue(Queue);
printf("Dequeue : %s \n", Popped->Data);
DestroyNode(Popped);
}
DestroyQueue(Queue);
}
while (!IsEmpty(Queue)) {
Node *Popped = Dequeue(Queue);
DestroyNode(Popped);
}
free(Queue);
}
Node* CreateNode(char* Data) {
Node* NewNode = (Node*)malloc(sizeof(Node));
NewNode->Data = (char*)malloc(strlen(Data) + 1);
strcpy(NewNode->Data, Data);
NewNode->Next = NULL;
return NewNode;
}
void DestroyNode(Node* Node) {
free(Node->Data);
free(Node);
}
void Enqueue(LinkedQueue* Queue, Node* NewNode){
if (Queue->Front == NULL) {
Queue->Front = NewNode;
Queue->Rear = NewNode;
}
else {
Queue->Rear->Next = NewNode;
Queue->Rear = NewNode;
}
Queue->Count++;
}
Node* Dequeue(LinkedQueue* Queue) {
Node*Front = Queue->Front;
if (Queue->Front->Next == NULL) {
Queue->Front = NULL;
Queue->Rear = NULL;
}
else {
Queue->Front = Queue->Front->Next;
}
Queue->Count--;
return Front;
}
int IsEmpty(LinkedQueue* Queue) {
return(Queue->Front == NULL);
}
void main(){
Node* Popped;
LinkedQueue* Queue;
CreateQueue(&Queue);
Enqueue(Queue, CreateNode("abc"));
Enqueue(Queue, CreateNode("def"));
Enqueue(Queue, CreateNode("ghi"));
Enqueue(Queue, CreateNode("jkl"));
printf("Queue Size : %d\n", Queue->Count);
while (IsEmpty(Queue) == 0) {
Popped = Dequeue(Queue);
printf("Dequeue : %s \n", Popped->Data);
DestroyNode(Popped);
}
DestroyQueue(Queue);
}
댓글 없음:
댓글 쓰기