#include<iostream>
#include<cstdio>
using namespace std;
#define MAXSIZE 100
typedef int Status;
typedef int Elem;
typedef struct SqQueue
{
/* data */
Elem *base;
int front;
int rear;
}sqQueue;
Status InitSqueue(SqQueue &Q)
{
Q.base = new Elem[MAXSIZE];
if (!Q.base) return 0;
Q.front = Q.rear = 0;
return 1;
}
int QueueLen(SqQueue &Q)
{
//%MAXSIZE 是因为有可能是循环列表
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
Status EnQueue(SqQueue &Q,Elem e)
{
//队尾+1==头 说明他满了
if ((Q.rear + 1) % MAXSIZE == Q.front)
return 0;
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXSIZE;
return 1;
}
Status DelQueue(SqQueue &Q,Elem e)
{
if (Q.front == Q.rear) return 0;
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXSIZE; //头走了一格就当没它了
return 1;
}
Elem GetHead(sqQueue Q)
{
if (Q.front != Q.rear)
return Q.base[Q.front];
//这里为什么不该返回 0? 因为他是Elem 如果是你妈个字符 那很尴尬
//但是这里我不得不返回个0来判断是否成功 因为他妈的他返回1 了 ????
else return 0;
}
int main()
{
sqQueue Q;
//1
InitSqueue(Q);
//1
EnQueue(Q, 1);
cout<<GetHead(Q);
//1
Elem e = 1;
DelQueue(Q,e);
cout<<GetHead(Q);
}