#include
//c 输入和输出等 如cout
#include
//c输入和输出等
如getch
#include
//窗口类操作,系统调用如清屏等
#include
//控制数据输出格式
#include
#define
Maxsize
10
//设置环队的最大空间
enum
returninfo{success,fail,overflow,underflow,range_error};//定义返回信息清单
class
loopqueue
{
private:
int
data[Maxsize];
//数据存储区域
int
front,rear;
//对头、队尾指针
protected:
int
count;
//计数器
统计结点个数即线性队列的长度
public:
loopqueue();
//构造函数
~loopqueue();
//析构函数
void
clearqueue(void);
//清空环队
bool empty(void)
const;
//判断是否空队
int size(void)
const;
//求环队的长度
returninfo
traverse(void);
//遍历环队所有元素
returninfo getfront(int &item)
const;
//读取队头
returninfo insert(const int
&item);
//数据入队
returninfo remove(int
&item);
//数据出队
};
loopqueue::loopqueue()
//构造函数
{
front=0;
//头指针和尾指针的关系
rear=0;
count=0;
//计数器清零,队列没开始时没有实际数据
}
loopqueue::~loopqueue()
//析构函数
{
clearqueue();
}
void
loopqueue::clearqueue(void)
//清空环队
{
front=rear=0;
//头指针和尾指针的关系
count=0;
//计数器也清零
}
bool
loopqueue::empty(void)const
//是否空队
{
if(count==0)
return true;
else
return false;
}
int
loopqueue::size(void)const
//求环队的长度
{
return
count;
}
returninfo
loopqueue::traverse(void)
//遍历环队中的所有元素
{
if(empty())
return
underflow;
//空队列的处理
cout<<"环队中的全部数据为:
Front━>(";
//提示显示数据开始
for(int
i=front;i
//循环显示所有数据
{
cout<<"
"<<setw(2)<<data[i%Maxsize];
if (i==count front-1)
cout<<"
)<</font>━";
else
cout<<" ,";
}
cout<<"
Rear"<<endl;
//最后有一个回车的控制
return
success;
//本次操作成功
}
returninfo
loopqueue::getfront(int &item)
const //读取一个结点
{
if(empty())
//处理意外
return
underflow;
item=data[front];
//返回读取的数据
return
success;
//本次操作成功
}
returninfo
loopqueue::insert(const int
&item)
//进队
{
if(count>=Maxsize)
return
overflow;
//满队处理
data[rear]=item;
//给数据赋值
rear=(rear
1)%Maxsize;
count
;
//计数器加一
return success;
}
returninfo
loopqueue::remove(int
&item)
//出队
{
if(empty())
return underflow;
item=data[front];
front=(front 1)%Maxsize;
count--;
//计数器减一
return success;
}
class
interfacebase
{
private:
loopqueue queueonface;
public:
void clearscreen(void);
void showmenu(void);
int userchoice(void);
returninfo processmenu(int menuchoice);
};
void
interfacebase::clearscreen(void)
{
system("cls");
}
void
interfacebase::showmenu(void)
{
cout<<"环队基本功能菜单"<<endl;
cout<<"=========="<<endl;
cout<<"1.数据进队"<<endl;
cout<<"2.数据出队"<<endl;
cout<<"3.显示数据(遍历全部数据)"<<endl;
cout<<"4.判断队空"<<endl;
cout<<"5.读取队头"<<endl;
cout<<"6.求链队长度"<<endl;
cout<<"7.结束程序"<<endl;
cout<<"=========="<<endl;
}
int
interfacebase::userchoice(void)
{
int menuchoice;
cout<<"请输入您的选择:";
cin>>menuchoice;
return menuchoice;
}
returninfo
interfacebase::processmenu(int menuchoice)
{
int item,returnvalue;
switch(menuchoice)
//根据用户的选择进行相应的操作
{
case 1:
cout<<"请输入要进队的新数据:";
cin>>item;
returnvalue=queueonface.insert(item);
if(returnvalue==overflow)
cout<<"对不起,环队已满,进队失败!请按任意键继续..."<<endl;
else
cout<<"进队操作成功!请按任意键继续..."<<endl;
break;
case 2:
returnvalue=queueonface.remove(item);
if(returnvalue==underflow)
cout<<"对不起,环队已空!请按任意键继续..."<<endl;
else
{
cout<<"出队数据为:"<<item<<endl;
cout<<"出队操作成功!请按任意键继续..."<<endl;
}
break;
case 3:
returnvalue=queueonface.traverse();
if(returnvalue==underflow)
cout<<"环队目前为空,没有数据可以显示!请按任意键继续..."<<endl;
else
cout<<"环队遍历操作成功!请按任意键继续..."<<endl;
break;
case 4:
if(queueonface.empty())
cout<<"此时队列为空!请按任意键继续..."<<endl;
else
cout<<"此时队列不为空!请按任意键继续..."<<endl;
break;
case 5:
returnvalue=queueonface.getfront(item);
if(returnvalue==underflow)
cout<<"对不起,环队已空!请按任意键继续..."<<endl;
else
cout<<"队头数据为:"<<item<<endl<<"读取操作成功!请按任意键继续..."<<endl;
break;
case 6:
cout<<"环队目前的长度为:
"<<queueonface.size()<<endl;
cout<<"求环队长度操作成功!请按任意键继续..."<<endl;
break;
case
7:
exit(0);
default:
cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl;
break;
}
return success;
}
void
main(void)
//程序主入口
{
int
menuchoice;
//下面要用到
interfacebase interfacenow;
loopqueue loopqueuenow;
interfacenow.clearscreen();
while (1)
{
interfacenow.showmenu();
menuchoice=interfacenow.userchoice();
interfacenow.processmenu(menuchoice);
getch();
Sleep(200);
//延迟了一会
interfacenow.clearscreen();
}
}//主函数结束