1 typedef struct QNode
2 {
3 QElemType data;
4 struct QNode *next;
5
6 }QNode,*QueuePtr;
7
8
9 typedef struct
10 {
11 QueuePtr front, rear;
12 }LinkQueue;
13
14
15 void
16 InitQueue(LinkQueue *Q)
17 {
18 Q->front = Q->next = malloc(sizeof( struct QNode));
19 if(! Q->front)
20 printf("error");
21
22 Q->front->next = NULL;
23 }
24
25 void
26 DestoryQueue(LinkQueue *Q)
27 {
28 while( Q->front)
29 {
30 Q->rear = Q->front->next;
31 free(Q->front);
32 Q->front = Q->rear;
33 }
34 }
35
36
37
38 void
39 clearQueue(LinkQueue *Q)
40 {
41 QueuePtr p,q;
42 Q->rear = Q->front;
43 p = Q->front->next;
44 Q->front->next =NULL;
45 while( p)
46 {
47 q = p;
48 p = p->next;
49 free(q);
50 }
51 }
52
53 bool
54 QueueEmpty(LinkQueue Q)
55 {
56 if(Q.front->next == NULL)
57 return true;
58 else
59 return false;
60 }
61
62
63 int
64 QueueLength(LinkQueue Q)
65 {
66 int i =0;
67 QueuePtr p;
68 p = Q.front;
69 while(Q.rear != p)
70 {
71 i++;
72 p= p->next;
73 }
74 return i;
75 }
76
77
78 Status
79 GetHead_Q( LinkQueue Q, QElemType *e)
80 {
81 QueuePtr p;
82 if(Q.front == Q.rear)
83 return ERROR;
84 p = Q.front->next;
85 *e = p->data;
86 return Ok;
87 }
88
89
90
91 void
92 EnQueue(LinkQueue *Q, QElemType e)
93 {
94 QueuePtr p = malloc(sizeof(struct Qnode));
95 if( !p )
96 printf("Error");
97 p->data = e;
98 p->next = NULL;
99 Q->rear->next = p;
100 Q->rear = p;
101 }
102
103 Status
104 DeQueue(LinkQueue *Q, QElemType *e)
105 {
106 QueuePtr p;
107 if( Q->front == Q->rear)
108 printf("ERROR");
109 p =Q->front->next;
110 *e =p->data;
111 Q->front->next = p->next;
112 if(Q->rear == p)
113 Q->rear = Q->front;
114 free(p);
115 return Ok;
116 }