您的位置:首页 > 理论基础 > 数据结构算法

数据结构5-队列

2016-03-21 14:40 363 查看
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):

是一种前后两端都可以输入或取出数据的有序链表。两边的指针都往队列的中央移动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: