您的位置:首页 > 其它

队列的顺序存储结构——基本操作的实现

2017-10-15 22:56 288 查看
队列简介:只允许在一端进行插入操作,而另一端进行删除操作的线性表。同时,队列的元素除了具有线性关系之外,还具有先进先出的特点。

 

文章内容:入队、出队、读取队头元素等操作的代码以及实现结果截图

队列类的定义

#include<iostream>
#include<string>
using namespace std;
const int QueueSize=100;

class Cirqueue
{
public:
Cirqueue(){front=rear=QueueSize-1;} /*初始化一个空队列*/
~Cirqueue(){};
void Enqueue(string x); /*将x入队*/
string Getqueue(); /*弹出队头元素*/
string Dequeue(); /*出队*/
int Empty(){ /*判断队是否为空*/
if(front==rear)
{
return 1;
}
else{
return 0;
}
}
private:
string data[QueueSize]; /*存放栈元素的数组*/
int front;
int rear;
};

成员函数的定义
void Cirqueue::Enqueue(string x)
{
if((rear+1)%QueueSize==front) throw "上溢";
else{
rear=(rear+1)%QueueSize;
data[rear]=x;
}
}

string Cirqueue::Getqueue()
{
if(rear==front) throw"下溢";
else{
int i=(front+1)%QueueSize; //不要给队头指针赋值,只要取出一个
return data[i];
}

}

string Cirqueue::Dequeue()
{
if(rear==front) throw"下溢";
else{
front=(front+1)%QueueSize; // 在循环意义上加1
return data[front];
}

}

主函数
int main()
{
string a[100];
string i;
Cirqueue one;
one.Enqueue("小明");
one.Enqueue("小红");
one.Enqueue("小李");
cout<<'\n'<<"请输入入队人的姓名"<<endl;
cin>>i;
one.Enqueue(i);
if(one.Empty())
{
cout<<"队伍没有人!";
}
else
{
cout<<'\n';
cout<<"队伍有人!";
cout<<'\n'<<"队列第一个人是:";
cout<<one.Getqueue();
cout<<'\n'<<endl;
cout<<"出队的是:";
cout<<one.Dequeue();
cout<<'\n'<<"此时队头是:";
cout<<one.Getqueue();

}
cout<<'\n'<<endl;
return 0;
}

运行截图



心得:
1. 要注意这种循环队列的判空操作为:front==rear是否成立,若成立则为空,反之则反;还有队满的判断条件可以设置为:(rear+1)%QueueSize=from.

2. 初始化一个空的循环队列,只需要将队头指针和队尾指针同时指向数组的某一位置,一般是数组的高端。

3.循环队列的入队和出队操作都比较容易,入队只需要将尾指针rear在循环下加一,而出队只需要将队头指针front在循环下加一。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: