summaryrefslogtreecommitdiff
path: root/c/dataStructure/408/graph/queue
diff options
context:
space:
mode:
authorgarhve <git@garhve.com>2022-12-05 19:43:39 +0800
committergarhve <git@garhve.com>2022-12-05 19:43:39 +0800
commitc6bc541ab58363d783e60a007e80e9bf9e231fda (patch)
treea59c7ed0d05225c5876f3e5e919d4f6ed0c447ff /c/dataStructure/408/graph/queue
initialize
Diffstat (limited to 'c/dataStructure/408/graph/queue')
-rwxr-xr-xc/dataStructure/408/graph/queue/qtest.c21
-rwxr-xr-xc/dataStructure/408/graph/queue/queue.c78
-rwxr-xr-xc/dataStructure/408/graph/queue/queue.h26
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