实验4:栈和队列的基本操作实现及其应用之《顺序队列》

实验4:栈和队列的基本操作实现及其应用之顺序队列

一、实验目的

1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。

2、   学会使用栈和队列解决实际问题。

二、实验内容

1、自己确定结点的具体数据类型和问题规模:

分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。

分别建立一个顺序队列和链队列,实现队列的入队和出队操作。

2、设计算法并写出代码,实现一个十将二进制转换成2进制数。

3、选做题(*

设计一个模拟饭堂排队打饭管理软件,实现“先来先打饭”的排号叫号管理。

三、实验步骤

1、依据实验内容分别说明实验程序中用到的数据类型的定义

    实验中选用的是整型来进行栈的数据输入。

2、相关操作的算法表达;

   入队列:只需将队尾指针rear在循环意义下加1,然后将待插元素x插入队尾位置。

   出队列:只需将队头指针front在循环意义下加1,然后读取并返回队头元素。

3、完整程序;   

#include<iostream>
using namespace std;
const int Q=100;
class CirQueue
{
	public:
		CirQueue(){front=rear=Q-1;}
		~CirQueue(){}
		void Push(int x);
		int Pop();
		int Gettop(); 
		int Empty(){if(front==rear)return 1;else return 0;}
	private:
	    int data[Q];
		int front,rear;	
};
void CirQueue::Push(int x)
{
	if((rear+1)%Q==front) throw "上溢";
	rear=(rear+1)%Q;
	data[rear]=x; 
}
int CirQueue::Pop()
{   
    if(rear==front)	throw"下溢";
	front=(front+1)%Q;
	return data[front]; 
}
int CirQueue::Gettop()
{
	int i;
	if(rear==front)	throw"下溢";
	i=(front+1)%Q;
	return data[i]; 
}
	
int main()
{   
    int i,s,x;
	CirQueue Stact;
	do
	{
	cout<<endl<<"\t\t\t   顺序队列"<<endl<<"\t\t\t输入进队列的数:";
	cin>>i;
	cout<<"\t\t\t是否继续输入?(1/0):";
	cin>>s;
	Stact.Push(i);
	}
	while(s);
	
	while(1)
	{
	cout<<endl<<"\t\t\t   顺序队列"; 
	cout<<endl<<"\t\t\t 1、入队列";
	cout<<endl<<"\t\t\t 2、出队列";
	cout<<endl<<"\t\t\t 3、队列顶数";
	cout<<endl<<"\t\t\t 4、队列是否为空";		
    cout<<endl<<"\t\t\t请选择操作(0-4):";
	cin>>x;
	cout<<endl;
	if(x==0)
	break;	
	switch(x)
	   {
		case 1:                                   
			{
			   do
	          {
	            cout<<endl<<"\t\t\t输入进栈的数:";
		        cin>>i;
		        cout<<"\t\t\t是否继续输入?(1/0):";
		        cin>>s;
		        Stact.Push(i);
	          }
		        while(s);
		        break;
			}
		case 2: 
	     	{
			    cout<<"\t\t\t出栈:"<<Stact.Pop()<<endl;
			    break;
	    	}
	    case 3:
	    	{
	    		cout<<"\t\t\t栈顶数:"<<Stact.Gettop()<<endl;
	    		break;
	    	}
	    case 4:
	    	{
	    		cout<<"\t\t\t栈是否为空:"<<Stact.Empty();
	    		break;
	    		
	    	}
		default:
			{
				cout<<"\t\t\t请输入数字(0-5)!"<<endl;
			}  
	   } 
    }
}

4、总结、运行结果和分析。



5、总体收获和不足,疑问等。

      在顺序队列中,运用循环的方式来进行入队列。为解决“假溢出”问题,用的是循环队列来实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值