-
Notifications
You must be signed in to change notification settings - Fork 12
/
queue1.h
48 lines (42 loc) · 916 Bytes
/
queue1.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdlib.h>
typedef struct node {
QueueData data;
struct node *next;
} Node, *NodePtr;
typedef struct queueType {
NodePtr head, tail;
} QueueType, *Queue;
Queue initQueue() {
Queue qp = (Queue) malloc(sizeof(QueueType));
qp -> head = NULL;
qp -> tail = NULL;
return qp;
} //end initQueue
int empty(Queue Q) {
return (Q -> head == NULL);
} //end empty
void enqueue(Queue Q, QueueData d) {
NodePtr np = (NodePtr) malloc(sizeof(Node));
np -> data = d;
np -> next = NULL;
if (empty(Q)) {
Q -> head = np;
Q -> tail = np;
}
else {
Q -> tail -> next = np;
Q -> tail = np;
}
} //end enqueue
QueueData dequeue(Queue Q) {
if (empty(Q)) {
printf("\nAttempt to remove from an empty queue\n");
exit(1);
}
QueueData hold = Q -> head -> data;
NodePtr temp = Q -> head;
Q -> head = Q -> head -> next;
if (Q -> head == NULL) Q -> tail = NULL;
free(temp);
return hold;
} //end dequeue