4-1
#include <iostream>
#include <cstdlib>
using namespace std;
#define MAXQSIZE 10 //最大队列长度,实际使用MAXQSIZE-1
typedef int ElemType;
//循环队列(☆☆☆☆少用一个存储单元☆☆☆☆☆)
typedef struct
{
//======补充代码======
ElemType *base;
int front;
int rear;
}SqQueue;
//函数声明
void PrintQueue(SqQueue &Q);
int InitQueue(SqQueue &Q);
int QueueEmpty(SqQueue &Q);
int QueueLength(SqQueue &Q);
int GetHead(SqQueue &Q,ElemType &e);
int EnQueue(SqQueue &Q,ElemType e);
int DeQueue(SqQueue &Q,ElemType &e);
void Circle(SqQueue &Q);
void Reverse(SqQueue &Q);
//输出队列中元素值,从头到尾
void PrintQueue(SqQueue &Q)
{
int p=Q.front;
//判断队列是否为空
if(!QueueEmpty(Q))
{
while(p!=Q.rear)
{
cout<<Q.base[p]<<endl;
p = (p+1)%MAXQSIZE;
}
}
}
//构造一个空队列Q,分配空间并做初始化,成功返回1,否则返回0
int InitQueue(SqQueue &Q)
{
//======补充代码======
Q.base = (ElemType*)malloc(MAXQSIZE * sizeof(ElemType));
if(!Q.base) return 0;
Q.front = Q.rear = 0;
return 1;
}
//队列判空,若队列Q为空队列,则返回1,否则返回0
int QueueEmpty(SqQueue &Q)
{
//======补充代码======
return Q.front == Q.rear;
}
//求队列的长度
int QueueLength(SqQueue &Q)
{
//======补充代码======
return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}
//求队头元素值,若队列不为空,则用e返回Q的队头元素,并返回1;否则返回0
int GetHead(SqQueue &Q,ElemType &e)
{
//======补充代码======
if (QueueEmpty(Q)) {
return 0;
}
e = Q.base[Q.front];
return 1;
}
//插入元素e作为Q的新的队尾元素,队满则返回0,否则返回1
int EnQueue(SqQueue &Q,ElemType e)
{
//======补充代码======
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXQSIZE;
return 1;
}
//若队列不空,则删除Q的队头元素,用e返回其值,并返回1,否则返回0
int DeQueue(SqQueue &Q,ElemType &e)
{
//======补充代码======
if (QueueEmpty(Q)) {
return 0;
}
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
return e;
}
//若队列不空,将队头元素塞到队尾
void Circle(SqQueue &Q)
{
//======补充代码======
if (QueueEmpty(Q)) {
return;
}
int e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXQSIZE;
EnQueue(Q, e);
}
//若队列不空,队列逆序
void Reverse(SqQueue &Q)
{
//======补充代码======
if (QueueEmpty(Q)) {
return;
}
int p = Q.front, q = Q.rear;
while((p + 1) % MAXQSIZE != q && p != q) {
int iq = (q - 1) < 0 ? MAXQSIZE - 1 : q - 1;
int x = Q.base[p];
Q.base[p] = Q.base[iq];
Q.base[iq] = x;
p = (p + 1) % MAXQSIZE;
q = (q - 1 + MAXQSIZE) % MAXQSIZE;
}
PrintQueue(Q);
}
/*
输入输出约定 ,多行输入:
0 //输出全部元素
1 x //进队操作,第2个数代表添加的元素值,队列满则输出-1
2 //出队操作,输出出队的元素,如果队空没有元素输出-1
3 //取队头元素,输出队头元素,如果队空没有元素输出-1
4 //求长度,输出队列长度
5 //判断是否为空,空输出1,非空输出0
6 //队头塞到队尾
7 //逆序
-1 //程序结束
*/
//主函数
int main( )
{
SqQueue Q;
int select;
ElemType e;
//初始化队列,如果无法分配程序退出
if ((InitQueue(Q))==0)
return 0;
//处理输入输出
while(cin>>select)
{
//程序结束
if(select==-1)
return 0;
//输出元素
else if(select==0)
PrintQueue(Q);
//进队
else if(select==1)
{
//--------补充代码--Start------
cin >> e;
if ((Q.rear + 1) % MAXQSIZE == Q.front) {
return 0;
}
EnQueue(Q, e);
//--------补充代码--End-------
}
//出队
else if(select==2)
{
//--------补充代码--Start------
if (QueueEmpty(Q)) {
return -1;
}
e = DeQueue(Q, e);
cout << e << "\n";
//--------补充代码--End-------
}
//求队头
else if(select==3)
{
if(GetHead(Q,e)==0)
cout<<"-1"<<endl;
else
cout<<e<<endl;
}
//求队列长度
else if(select==4)
cout<<QueueLength(Q)<<endl;
//判断队空
else if(select==5)
cout<<QueueEmpty(Q)<<endl;
//队头塞到队尾
else if(select==6)
Circle(Q);
//翻转
else if(select==7)
Reverse(Q);
}
return 0;
}
Comments | NOTHING