一、实验目的
1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2、 学会使用栈和队列解决实际问题。
二、实验内容
1、自己确定结点的具体数据类型和问题规模:
分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
分别建立一个顺序队列和链队列,实现队列的入队和出队操作。
2、设计算法并写出代码,实现一个十将二进制转换成2进制数。
3、选做题(*)
设计一个模拟饭堂排队打饭管理软件,实现“先来先打饭”的排号叫号管理。
三、实验步骤
1、依据实验内容分别说明实验程序中用到的数据类型的定义;
2、相关操作的算法表达;
3、完整程序;
4、总结、运行结果和分析。
5、总体收获和不足,疑问等。
四、实验要求
1、 按照数据结构实验任务书,提前做好实验预习与准备工作。
2、 加“*”为选做题。做好可加分。
3、 严格按照数据结构实验报告模板和规范,及时完成实验报告。
4、 在个人主页上发文章提交作业。
5、 实验课会抽查3-5人,希望你可以被查到!
源代码如下:
#include<iostream>
using namespace std;
const int QueueSize=100; //最大长度
class CirQueue
{
public:
CirQueue(){
front=rear=QueueSize-1;
}
~CirQueue(){}
void EnQueue(int x);
int DeQueue();
int GetQueue();
int Empty(){
if(front==rear)
return 1;
else return 0;
}
private:
int data[QueueSize];
int front,rear;
} ;
void CirQueue::EnQueue(int x)
{
if((rear+1)%QueueSize==front)throw"上溢";
rear=(rear+1)%QueueSize;
data[rear]=x;
}
int CirQueue::DeQueue()
{
while(front!=rear)
{ front=(front+1)%QueueSize;
return data[front];
}
}
int CirQueue::GetQueue()
{
int i;
if(rear==front)throw"下溢";
i=(front+1)%QueueSize;
return data[i];
}
int main()
{
cout<<"1.入队"<<endl;
cout<<"2.出队"<<endl;
cout<<"3.判空"<<endl;
cout<<"4.退出"<<endl;
int x,t,flag=1;
CirQueue Cir;
while(flag==1)
{
cout<<"请输入想进行的操作:"<<endl;
cin>>t;
switch(t)
{
case 1:
{
cout<<"入队数据为:";
while(x)
{
cin>>x;
if(x!=0)
Cir.EnQueue(x);
}
cout<<endl;
break;
}
case 2:
cout<<"出队数据为:";
cout<<Cir.DeQueue();
cout<<endl<<endl;
break;
case 3:
cout<<"判空操作,如果为空,输出1;不为空,输出0:"<<endl<<Cir.Empty();
cout<<endl<<endl;
break;
case 4:
{
flag=0;
break;
}
default:
{
cout<<"请输入数字1-4!"<<endl;
break;
}
}
}
return 0;
}
实验结果如下: