diff options
author | garhve <git@garhve.com> | 2022-12-05 19:43:39 +0800 |
---|---|---|
committer | garhve <git@garhve.com> | 2022-12-05 19:43:39 +0800 |
commit | c6bc541ab58363d783e60a007e80e9bf9e231fda (patch) | |
tree | a59c7ed0d05225c5876f3e5e919d4f6ed0c447ff /c/dataStructure/408/graph/queue |
initialize
Diffstat (limited to 'c/dataStructure/408/graph/queue')
-rwxr-xr-x | c/dataStructure/408/graph/queue/qtest.c | 21 | ||||
-rwxr-xr-x | c/dataStructure/408/graph/queue/queue.c | 78 | ||||
-rwxr-xr-x | c/dataStructure/408/graph/queue/queue.h | 26 |
3 files changed, 125 insertions, 0 deletions
diff --git a/c/dataStructure/408/graph/queue/qtest.c b/c/dataStructure/408/graph/queue/qtest.c new file mode 100755 index 0000000..61e01f2 --- /dev/null +++ b/c/dataStructure/408/graph/queue/qtest.c @@ -0,0 +1,21 @@ +#include "queue.h" + +int main(void) +{ + queue q; + + initQueue(&q); + enQueue(&q,10); + enQueue(&q,12); + printQueue(&q); + printf("deQueue1: %d\n",deQueue(&q)); + printf("deQueue2: %d\n",deQueue(&q)); + enQueue(&q,14); + printHead(&q); + printQueue(&q); + purgeQueue(&q); + if(emptyQueue(&q)) + puts("Empty Queue"); + + return 0; +} diff --git a/c/dataStructure/408/graph/queue/queue.c b/c/dataStructure/408/graph/queue/queue.c new file mode 100755 index 0000000..673c595 --- /dev/null +++ b/c/dataStructure/408/graph/queue/queue.c @@ -0,0 +1,78 @@ +#include "queue.h" + +void initQueue(Queue q) +{ + q->qhead = NULL; + q->qtail = NULL; +} + +void enQueue(Queue q, int y) +{ + elem * tmp = (elem*)malloc(sizeof(elem)); + + if (!tmp) + retreat("fail to enQueue"); + tmp->y = y; + tmp->next = NULL; + + if (!q->qtail) + { + q->qtail = tmp; + q->qhead = tmp; + } + else + { + q->qtail->next = tmp; + q->qtail = tmp; + } +} + +int deQueue(Queue q) +{ + bool flag = false; + if (!q->qhead) + retreat("Empty queue"); + if (q->qhead == q->qtail) + flag = true; + elem * tmp = q->qhead; + int p = tmp->y; + q->qhead = tmp->next; + free(tmp); + if (flag) + q->qtail = q->qhead; + return p; +} + +bool emptyQueue(Queue q) +{ + if (q->qhead) + return false; + return true; +} + +void purgeQueue(Queue q) +{ + elem * tmp; + while (q->qhead) + { + tmp = q->qhead; + q->qhead = tmp->next; + free(tmp); + } +} + +void printHead(Queue q) +{ + printf("Queue head is %d\n", q->qhead->y); +} + +void printQueue(Queue q) +{ + elem * tmp = q->qhead; + while (tmp) + { + printf("%d ",tmp->y); + tmp = tmp->next; + } + printf("\n"); +} diff --git a/c/dataStructure/408/graph/queue/queue.h b/c/dataStructure/408/graph/queue/queue.h new file mode 100755 index 0000000..145e598 --- /dev/null +++ b/c/dataStructure/408/graph/queue/queue.h @@ -0,0 +1,26 @@ +#ifndef _QUEUE_H +#define _QUEUE_H + +#include "../graph.h" + +typedef struct elem { + int y; + struct elem * next; +} elem; + +typedef struct queue { + elem * qhead; + elem * qtail; +} queue; + +typedef queue * Queue; + +void initQueue(Queue q); +void enQueue(Queue q, int y); +int deQueue(Queue q); +void purgeQueue(Queue q); +bool emptyQueue(Queue q); +void printHead(Queue q); +void printQueue(Queue q); + +#endif |