#include <iostream>
#define MaxSize 50
using namespace std;
typedef int DataType;
//队列的顺序存储结构
typedef struct{
DataType data[MaxSize]; //存放队列中的数据元素
int front,rear; //队头指针和队尾指针
}SqQueue;
/*
假设队列空间够用
顺序队列的缺点:
1.可能存在上溢和下溢
2.所以真正应用时要考虑,数组大小,判断溢出时怎莫作
顺序队列:队头删除数据元素,队尾插入数据元素
1.数据运算
1.InitQueue(&Q):初始化队列,构造一个空队列
2.QueueEmpty(&Q):队列判空,若队列为空,返回true,否则返回false
3.EnQueue(&Q,x):入队,若队列未满,将数据元素插入到队尾
4.DeQueue(&Q,&x):出队,若队列非空,删除队头元素,并用x返回
5.GetHead(Q,&x):读出对头元素,若队列非空,则将队头元素赋值给x
2.队列术语
1.队头(front):允许删除的一端
2.队尾(rear):允许插入的一端
3.空队列:不含任何元素的队列
3.顺序队列的判断条件
1.队列的初始状态:Q.front=Q.rear=0
2.队列的满了条件:Q.rear-Q.front=MaxSize
3.队列空了的条件:Q.rear=Q.front
*/
//初始化一个顺序队列
void InitQueue(SqQueue &Q){
//队列的初始状态 队列空,并且位置为0 Q.front=Q.rear=0
Q.front=Q.rear=0;
}
//队列判空
bool QueueEmpty(SqQueue &Q){
if(Q.front==Q.rear){
cout<<"对列为空!"<<endl;
return true;
}else{
return false;
}
}
//入队
bool EnQueue(SqQueue &Q,DataType x){
if(Q.rear-Q.front==MaxSize){
cout<<"队列已满,无法插入!"<<endl;
return false;
}else{
Q.data[Q.rear++]=x;
return true;
}
}
//出队
bool DeQueue(SqQueue &Q,DataType &x){
if(Q.rear==Q.front){
cout<<"队列为空,无法出队!"<<endl;
return false;
}else{
x=Q.data[Q.front++];
return true;
}
}
//读队头元素
bool GetHead(SqQueue &Q,DataType &x){
if(Q.rear==Q.front){
cout<<"队列为空!无法得到队头元素"<<endl;
return false;
} else{
x=Q.data[Q.front];
return true;
}
}
int main()
{
SqQueue Q;
InitQueue(Q);
EnQueue(Q,100);
int x;
DeQueue(Q,x);
cout<<x<<endl;
QueueEmpty(Q);
return 0;
}