队列的顺序存储结构——基本操作的实现
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在循环下加一。
文章内容:入队、出队、读取队头元素等操作的代码以及实现结果截图
队列类的定义
#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在循环下加一。
相关文章推荐
- 链式队列的基本操作与实现
- 队列的实现与基本操作
- 利用两个栈实现队列的--->基本操作
- 实验4:栈和队列的基本操作实现及其应用之《链栈》
- 实验4:栈和队列的基本操作实现及其应用之《进制转换》
- 利用顺序存储结构实现双端队列的入队和出队操作
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- (C语言版)栈和队列(一)——实现链式栈和链式队列的基本操作以及遇到的问题
- bo3-4.c 用单链表的基本操作实现链队列(存储结构由c3-2.h定义)的基本操作(9个)
- (C语言版)栈和队列(一)——实现链式栈和链式队列的基本操作以及遇到的问题
- 顺序存储结构的基本操作实现(以类的方式实现)----插入、删除、查询
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 实验4:栈和队列的基本操作实现及其应用——进制转换以及实验总结
- 实验4:栈和队列的基本操作实现及其应用之《链栈》
- 数据结构之队列定义及基本操作实现
- 队列的实现与基本操作
- c++ 队列基本操作实现
- 制作一个菜单,用队列实现基本操作