队列的简单操作

//借鉴《实用数据结构》一书
#include <iostream>
using namespace std;
void Menu();//定义菜单选项框
//定义循环队列类
template <class T>  //模板声明,数据元素虚拟类型为T
class  sq_Queue     
{ private:  //数据成员
int mm;         //存储空间容量
int front;     //排头指针
int rear;      //队尾指针
int s;         //标志
T *q;          //循环队列存储空间首地址
	  public:   //成员函数
		  sq_Queue(int);    //构造函数,建立空循环队列 
		  void prt_sq_Queue();  //输出排头与队尾指针以及队中元素
		  int flag_sq_Queue();  //检测循环队列的状态
		  void ins_sq_Queue(T);  //入队
		  T del_sq_Queue();     //退队
};
//建立容量为mm的空循环队列
template <class T>
sq_Queue<T>::sq_Queue(int m)  
{ mm=m;          //存储空间容量
q=new T[mm];   //动态申请存储空间
front=mm;   rear=mm;  s=0;
return; 
}
//输出排头与队尾指针以及队中元素
template <class T>
void sq_Queue<T>::prt_sq_Queue()
{ int i;
cout <<"front=" <<front <<endl;
cout <<"rear=" <<rear <<endl;
if (s==0) { cout <<"队列空!" <<endl; return; }
i=front;
do { i=i+1; 
if (i==mm+1) i=1;
cout <<q[i-1] <<endl;
} while (i!=rear);
return;
}
//检测循环队列的状态
template <class T>
int sq_Queue<T>::flag_sq_Queue()  
{ if ((s==1)&&(rear==front)) return(-1);  //存储空间已满,返回-1
if (s==0) return(0);   //循环队列为空,返回0
return(1);   //正常返回1
}
//入队
template <class T>
void sq_Queue<T>::ins_sq_Queue(T x) 
{ if ((s==1)&&(rear==front))  //存储空间已满,上溢错误
{ cout <<"Queue_overflow!" <<endl;   return; }
rear=rear+1;  //队尾指针进一
if (rear==mm+1) rear=1;
q[rear-1]=x;   //新元素入队
s=1;   //入队后队列非空
return;
}
//退队
template <class T>
T sq_Queue<T>::del_sq_Queue()
{ T y;
if (s==0)  //队列为空,下溢错误
{ cout <<"Queue_underflow!" <<endl;  return(0); }
front=front+1;  //排头指针进一
if (front==mm+1) front=1;
y=q[front-1];  //将退队元素赋给变量
if (front==rear) s=0;
return(y);  //返回退队的元素
}
void Menu()
{
	cout<<"**********************Menu****************************"<<endl;
	cout<<"        ----------1.   输出队       ------------------"<<endl;
	cout<<"        ----------2.   入队         ------------------"<<endl;
	cout<<"        ----------3.   退队         ------------------"<<endl;
	cout<<"******************************************************"<<endl;
}
int main()//main函数
{
	cout<<"请输入您要建立的队列容量(元素为整形)"<<endl;
	int len;
	cin>>len;
	sq_Queue<int> q(len);
	Menu();
	int chs;
	cout<<"请输入你的选择"<<endl;
	cin>>chs;
	if(chs<1||chs>3)  
	{cout<<"Out of Bounds"<<endl;return 0;}  
	while(chs!=0)  
	{
		switch(chs)
		{
		case 1:
			cout <<"输出排头与队尾指针以及队中元素:" <<endl;
			q.prt_sq_Queue();    //输出排头与队尾指针以及队中元素
			break;
		case 2:
			int inp;
			cout<<"请输入要入队的元素(整形)"<<endl;
			cin>>inp;
			q.ins_sq_Queue(inp);
			
			break;
		case 3:
			cout <<"输出退队元素:" <<endl;
			cout<<"请输入要退队的元素个数"<<endl;
			int num;
			cin>>num;
			for(int i=0;i<num;i++)
				cout <<q.del_sq_Queue() <<endl;
			break;
			
		}
		Menu();
		cin>>chs;
	}
}


VC6.0运行结果如下:



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值