summaryrefslogtreecommitdiff
path: root/c/dataStructure/408/graph/queue/queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/dataStructure/408/graph/queue/queue.c')
-rwxr-xr-xc/dataStructure/408/graph/queue/queue.c78
1 files changed, 78 insertions, 0 deletions
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");
+}