实验三顺序队列
程序员文章站
2022-07-09 19:11:04
...
一、实验目的
1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2、 学会使用栈和队列解决实际问题。
二、实验内容
1、自己确定结点的具体数据类型和问题规模:
分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
分别建立一个顺序队列和链队列,实现队列的入队和出队操作。
2、设计算法并写出代码,实现一个十将二进制转换成2进制数。
#include<iostream>
using namespace std;
const int Queuesize=100;
template<typename T>
class Cirqueue{
public:
Cirqueue(){front=rear=Queuesize-1;} //构造函数,初始化空队列
void EnQueue(T x); //入队操作
T DeQueue(); //出队操作
T GetQueue(); //取头元素
void PrintQueue(); //遍历操作
int Empty() {front==rear?return 1:return 0;} //判断是否为空对列
private:
T data[Queuesize]; //存放队列元素的数组
int front,rear; //队头和队尾指针
};
template <typename T>
void Cirqueue<T>::EnQueue(T x)
{
if((rear+1)%Queuesize==front) throw"上溢";
rear=(rear+1)%Queuesize;
data[rear]=x;
}
template <typename T>
T Cirqueue<T>::DeQueue()
{
if(rear==front) throw"下溢";
front=(front+1)%Queuesize;
return data[front];
}
template <typename T>
T Cirqueue<T>::GetQueue()
{
int i;
if(rear==front) throw"下溢";
i=(front+1)%Queuesize;
return data[i];
}
template <typename T>
void Cirqueue<T>::PrintQueue()
{
int p=(front+1)%Queuesize;
while(p!=rear){
cout<<data[p]<<" ";
p=(p+1)%Queuesize;
}
cout<<data[p]<<endl;
}
void main()
{
Cirqueue<int>b;
cout<<"按顺序使“1,2,3,4,5”进队列"<<endl;
for(int i=1;i<=5;i++)
{ b.EnQueue(i); cout<<i<<"入队成功"<<endl;}
cout<<"结果如下:"<<endl;
b.PrintQueue();
cout<<"出队一个元素"<<b.DeQueue()<<"结果如下:"<<endl;
b.PrintQueue();
cout<<"现在对头元素为:"<<b.GetQueue()<<endl;
}
推荐阅读