#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define MAXSIZE 10
using namespace std;
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
int front;
int rear;
}SqQueue;
//初始化
void InitQueue(SqQueue &Q){
Q.front=Q.rear=0;
printf("初始化队列成功!\n");
}
//判断队列是否为空
int QueuEmpty(SqQueue &Q){
if(Q.front==Q.rear)
return 1;
else
return 0;
}
//入队
int EnQueue(SqQueue &Q,ElemType x){
if((Q.rear+1)%MAXSIZE==Q.front){//队满
return 0;
}
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MAXSIZE;
return 1;
}
//出队
int DeQueue(SqQueue &Q){
ElemType x;
if(Q.front==Q.rear){
return 0;
}
x=Q.data[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
printf("出队成功!\n");
printf("出队的元素为:%d\n",x);
return 1;
}
//多元素入队
int MEnQueue(SqQueue &Q){
printf("你想几个元素入队:");
int n;
ElemType x;
scanf("%d",&n);
printf("请依次输入入队元素:");
for(int i=1; i<=n; i++)
{
scanf("%d",&x);
EnQueue(Q,x);
}
return 1;
}
//顺序队列的遍历输出
bool Print(SqQueue Q) {
// ElemType x;
// printf("队列值为:");
// int length;
// length=(Q.rear-Q.front+MAXSIZE)%MAXSIZE;
// if(Q.front==Q.rear)
// return false; //若队列为空则报错
// while(Q.rear<MAXSIZE){
// x=Q.data[Q.front++];
// printf("%d ",x);
// }
// printf("\n");
cout<<"<-front ";
if(QueuEmpty(Q))
cout<<"error!\n\n";
for(;Q.front!=Q.rear;Q.front++){
cout<<Q.data[Q.front]<<" ";
}cout<<endl;
return true;
}
/*int Print(SqQueue Q)
{
if (IsEmpty Q)
return 0;
else
{
int p = Q.front;
while (Q.rear != p)
{
printf("%d ",Q.data[p]);
//printf("行号----%d----\n",__LINE__);
p = (p + 1) % MAXSIZE;
}
return 1;
}
}
*/
int main(){
ElemType x;
SqQueue Q;
InitQueue(Q);
printf("你想几个元素入队:");
int n;
scanf("%d",&n);
printf("请依次输入入队元素:");
for(int i=1; i<=n; i++)
{
scanf("%d",&x);
EnQueue(Q,x);
}
Print(Q);
printf("-------------------\n");
// DeQueue(Q);
// Print(Q);
// printf("-------------------\n");
MEnQueue(Q);
Print(Q);
// printf("-------------------\n");
// DeQueue(Q);
// Print(Q);
}