1.初始化
2.入队
3.出队
4.获取队首元素
5.判断队列是否为空
6.获取队列长度
7.遍历队列
8.销毁队列
9.清空队列(相对于销毁队列清空就是保留头结点,而销毁是彻底摧毁了,再也不能用了,清空,还可以使用)
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 typedef struct QNode{ 5 int data; 6 struct QNode *next; 7 }QNode,*QueuePtr; 8 9 typedef struct 10 { 11 QueuePtr front; 12 QueuePtr tear; 13 }LinkQueue; 14 15 bool InitQueue(LinkQueue &Q) 16 { 17 Q.front = Q.tear = (QueuePtr)malloc(sizeof(QNode)); 18 if(!Q.front) exit(-1); 19 Q.front->next = NULL; 20 return 1; 21 } 22 23 bool Enqueue(LinkQueue &Q,int e) 24 { 25 QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); 26 if(!p) exit(-1); 27 p->data = e; 28 p->next = NULL; 29 30 (Q.tear)->next = p; 31 Q.tear = p; 32 return 1; 33 } 34 35 bool Dequeue(LinkQueue &Q,int &e) 36 { 37 if(Q.front == Q.tear) return 0; 38 QNode *p = (QueuePtr)malloc(sizeof(QNode)); 39 p = Q.front->next; 40 e = p->data; 41 Q.front->next = p->next; 42 if(Q.tear == p) Q.tear = Q.front; 43 free(p); 44 return 1; 45 } 46 47 bool GetHead(LinkQueue &Q,int &e) 48 { 49 if(Q.front == Q.tear) return 0; 50 else{ 51 e = (Q.front->next)->data; 52 return 1; 53 } 54 } 55 56 bool Qempty(LinkQueue &Q) 57 { 58 if(Q.front == Q.tear) return 1; 59 return 0; 60 } 61 62 int Length(LinkQueue &Q) 63 { 64 int cnt = 0; 65 QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); 66 p = Q.front; 67 while(Q.tear != p) 68 { 69 cnt++; 70 p = p->next; 71 } 72 return cnt; 73 } 74 75 void TraverQueue(LinkQueue &Q) 76 { 77 QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); 78 p = Q.front; 79 while(Q.tear != p) 80 { 81 p = p->next; 82 cout << p->data << " "; 83 } 84 puts(""); 85 } 86 87 bool DestroyQueue(LinkQueue &Q) 88 { 89 while(Q.front) 90 { 91 Q.tear = Q.front->next; 92 free(Q.front); 93 Q.front = Q.tear; 94 } 95 return 1; 96 } 97 98 bool ClearQueue(LinkQueue &Q)//这个和销毁的区别就是保留头结点 99 { 100 QueuePtr p,q; 101 Q.tear = Q.front; 102 p = Q.front->next;//这里保留了头结点 103 Q.front->next = NULL; 104 105 while(p) 106 { 107 q = p; 108 p = p->next; 109 free(q); 110 } 111 return 1; 112 } 113 114 int main() 115 { 116 LinkQueue Q; 117 InitQueue(Q); 118 for(int i = 1;i <= 5;i++) 119 { 120 Enqueue(Q,i); 121 } 122 cout << Length(Q) << endl; 123 TraverQueue(Q); 124 bool ok = Enqueue(Q,6); 125 if(ok) 126 TraverQueue(Q); 127 int x; 128 ok = GetHead(Q,x); 129 if(ok) 130 { 131 cout << "x = " << x << endl; 132 } 133 DestroyQueue(Q); 134 TraverQueue(Q); 135 return 0; 136 }