循环队列的基本实现

/*2.  完成对循环队列结构的定义,以及对循环队列的各种基本运算的实现(每种基本运算用一个函数来实现)。
基本运算包括:
初始化Init_sqqueue运算、
判队空Empty_sqqueue运算、
入队En_sqqueue运算、
出队De_sqqueue运算、
取队头元素Gethead_sqqueue运算。*/

#include<iostream>
using namespace std;
typedef char datatype;
const int maxsize=100; //队列的容量,元素最多不能超过它
typedef struct
{
	datatype data[maxsize]; //用数组实现
	int front,rear;
} sqqueue;   //顺序队列类型
//初始化
void Init_sqqueue(sqqueue *sq)
{
	sq->front=sq->rear=0;
}
//判队空
int Empty_sqqueue(sqqueue *sq)
{
	if(sq->rear==sq->front) return 1;
	else return 0;
}
//取队头
int Gethead_sqqueue(sqqueue *sq,datatype *x)
{
	if(sq->front=sq->rear) { cout<<"队空,无队头可取!\n";return 0;}
	else {
		*x=sq->data[(sq->front+1)%maxsize];
		return 1;
	}
}
//入队
int En_sqqueue(sqqueue *sq,datatype x)
{
	if((sq->rear+1)%maxsize==sq->front)
	{
		cout<<"队满,不能入队!\n"; return 0;
	}
	sq->rear=(sq->rear+1)%maxsize;
	sq->data[sq->rear]=x;
	return 1;
}
//出队
int De_sqqueue(sqqueue *sq,datatype *x)
{
	if(sq->rear==sq->front)
	{  cout<<"队空,不能出队!\n";return 0;}
	else
	{
		sq->front=(sq->front+1)%maxsize;
		*x=sq->data[sq->front];
		return 1;
	}
}
void Display(sqqueue *sq)
{
    
	if(Empty_sqqueue(sq))
	{	cout<<"队空,无数据输出!\n";}
	else
		cout<<"队列的所有元素:"<<endl;
		for(int i=sq->front+1;i<=sq->rear;i++)
			cout<<sq->data[i]<<" ";
}
int main()
{
	sqqueue *Sq=new sqqueue;
	Init_sqqueue(Sq);

	char choice,y;
	char *S;
	S=&y;
	int flag = 1;
	while(flag)
	{
		cout<<"------------------循环队列---------------------"<<endl;
		cout<<"        1. 入队                                 "<<endl;
		cout<<"        2. 出队                                 "<<endl;
		cout<<"        3. 取队头元素                           "<<endl;
		cout<<"        4. 判断队是否为空                       "<<endl;
		cout<<"        5. 浏览队列所有元素(测试用)     "<<endl;
		cout<<"        6. 退出                                 "<<endl;
		cout<<"------------------------------------------------"<<endl;
		cout<<"请选择:";

		cin>>choice;
		switch(choice)
		{
		case '1':	cout<<"请输入一个需要入队的字符"<<endl;
					cin>>y;
					if(En_sqqueue(Sq,y))
						cout<<"入队成功"<<endl;
					else
						cout<<"入队失败!"<<endl;
					break;

		case '2':   if(De_sqqueue(Sq,S))
						cout<<"出队成功,出队的元素是:"<<y<<endl;
					else
						cout<<"出队失败!"<<endl;
					break;

		case '3':	if(Gethead_sqqueue(Sq,S))
						cout<<"取队列头元素成功,出队的元素是:"<<y<<endl;
					else
						cout<<"取队头元素失败!"<<endl;
					break;

		case '4':   if(Empty_sqqueue(Sq))
						cout<<"此时队为空。"<<endl;
					else
						cout<<"此时队不为空。"<<endl;
					break;

		case '5':   Display(Sq);
					cout<<endl;
					break;

		case '6':   flag=0; 
					break;
		default :   cout<<"输入错误,请重新选择。"<<endl;
		}

	}
	return 0;
}















posted on 2011-11-09 22:10  1.曲待续  阅读(435)  评论(0编辑  收藏  举报

导航