数据结构5-队列

5.1简介
队列(Queue)和堆栈一样是一种有序链表,属于抽象数据类型。不同在于是先进先出(First in,First out,FIFO)。
堆栈只需要一个top指针指向堆栈顶端即可,但是队列必须使用front和rear两个指针分别指向队列的前端和尾端。

基本操作:
1)create:建立空队列;
2)add:将新数据加入到队列的尾端,返回新队列;
3)delete:删除队列前端数据,并返回新队列;
4)front:返回队列前端值;
5)empty:若队列为空集,返回为真,否则false。

队列的数组实现:

#include<iostream>
using namespace std;
const int MAX=20;
int main()
{
int front ,rear,val,queue[MAX]={0};
char ch;
front=rear=-1;//初始化,因为c++编码从0开始,所以表示空队列
while(real<MAX-1&&ch!='E')
{
cout<<"[I]存入一个数值[G]取出一个数值[E]结束:";
cin>>ch;
switch(ch)
{
case 'I':
cout<<"please input value:";
cin>>val;
rear++;
queue[rear]=val;
break;
case 'G':
if (rear>front)
{
front ++;
cout<<"取出的数为:["<<queue[front]<<"]";
cout<<endl;
queue[front]=0;
}
else
{
cout<<"队列已经空了”<<endl; exit(0); } break; default: cout<<endl; break; } } if(rear==MAX-1) cout<<"队列已满"<<endl; cout<<"目前队列数据为:"; if (front>=rear) { cout<<“没有"<<endl;
cout<<"队列已经空了"<<endl;
}
else
{
while (rear>front)
{
front ++;
cout<<"["<<queue[front]<<"]"\t"; } cout<<endl; } system("pause"); return 0; }

队列的链表实现:

5.2队列的应用
主要应用有:
1)广度优先搜索发(BFS);
2)计算机的模拟;
3)CPU的工作进程;

循环队列:
目的:为了节约直线队列在数据移动过程中所浪费的时间;
front指针永远以逆时针方向指向队列中第一个元素前一个位置,rear则指向当前队列的最后一个位置,一开始front和rear均初始化为-1,表示空队列。
其实就是一个环形队列!

优先队列(Priority Queue):
是一种不必遵守队列特性,即先进先出的有序链表,其中每一个元素都赋予一个优先级,加入元素时可以任意加入,但是有最高优先级者则最先输出。

双向队列(Double-ends Queues):
是一种前后两端都可以输入或取出数据的有序链表。两边的指针都往队列的中央移动。

你可能感兴趣的:(数据结构,队列)