链队列的建立、判空、入队、出队、求长、访头、清空和销毁
生活随笔
收集整理的這篇文章主要介紹了
链队列的建立、判空、入队、出队、求长、访头、清空和销毁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#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;
}
總結
以上是生活随笔為你收集整理的链队列的建立、判空、入队、出队、求长、访头、清空和销毁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 链栈的建立、判空、入栈、出栈、求长、访顶
- 下一篇: 二叉树的建立