链队列的建立、判空、入队、出队、求长、访头、清空和销毁

来源:互联网 发布:vb 显示在picturebox 编辑:程序博客网 时间:2024/04/29 03:20
#include<iostream>using namespace std;typedef struct node{int data;struct node *next;}Node;//头指针和尾指针typedef struct{Node *front;Node *rear;}Queue;void initQueue(Queue &Q){Q.front = Q.rear = new Node;Q.front->next = NULL;}bool isEmptyQueue(Queue &Q){if (NULL == Q.front) //此时链队列被销毁{cout << "链队列不存在." << endl;exit(1);}if (Q.rear == Q.front)//此时链队列为空return true;return false;}void enterQueue(Queue &Q, int element){Node *p = new Node;p->next = NULL;p->data = element;Q.rear->next = p;Q.rear = p;}int deQueue(Queue &Q){int outElement;if (isEmptyQueue(Q))exit(1);Node *p = Q.front->next;outElement = p->data;Q.front->next = p->next;if (Q.rear == p)  //需要特殊处理Q.rear = Q.front;delete p;return outElement;}int getLength(Queue &Q){Node *p1 = Q.front;Node *p2 = Q.rear;int length = 0;while (p1 != p2){p1 = p1->next;length++;}return length;}int getHead(Queue &Q){if (isEmptyQueue(Q))exit(1);return Q.front->next->data;}void clearQueue(Queue &Q){while (!isEmptyQueue(Q))deQueue(Q);}void destroyQueue(Queue &Q){clearQueue(Q);delete Q.front;Q.front = Q.rear = NULL;}int main(){Queue Q;initQueue(Q);cout << getLength(Q) << endl;int i;for (i = 1; i <= 10; i++)enterQueue(Q, i);cout << getHead(Q) << endl;cout << getLength(Q) << endl;while (!isEmptyQueue(Q))cout << deQueue(Q) << " ";cout << endl;if (isEmptyQueue(Q))cout << "yes" << endl;elsecout << "no" << endl;destroyQueue(Q);if (isEmptyQueue(Q))cout << "yes" << endl;elsecout << "no" << endl;system("pause");return 0;}

0 0
原创粉丝点击