#include<iostream>
using namespace std;
#define Maxsize 100
typedef struct SqQueue {
int* base;
int front, rear;
}SqQueue;
bool InitQueue(SqQueue& Q)
{
Q.base = new int[Maxsize];
if (!Q.base)return false;
Q.front = Q.rear = 0;
return true;
}
bool EnQueue(SqQueue& Q, int e)
{
if ((Q.rear + 1) % Maxsize == Q.front)
return false;
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % Maxsize;
return true;
}
bool DeQueue(SqQueue& Q, int& e)
{
if (Q.front == Q.rear)
return false;
e = Q.base[Q.front];
Q.front = (Q.front + 1) % Maxsize;
return true;
}
int GetHead(SqQueue Q)
{
if (Q.front != Q.rear)
return Q.base[Q.front];
return -1;
}
int QueueLength(SqQueue Q)
{
return (Q.rear - Q.front + Maxsize) % Maxsize;
}
int main()
{
SqQueue Q;
int n, x;
InitQueue(Q);
cout << "请输入元素个数n: " << endl;
cin >> n;
cout << "请依次输入n个整型数,依次入队: " << endl;
while (n--)
{
cin >> x;
EnQueue(Q, x);
}
cout << "队列内元素个数,即长度: " << QueueLength(Q) << endl;
cout << "队头元素:" << GetHead(Q) << endl;
cout << "元素依次出队: " << endl;
while (true)
{
if (DeQueue(Q, x))
cout << x << "\t";
else
break;
}
cout << endl;
cout << "队列内元素个数,即长度:" << QueueLength(Q) << endl;
return 0;
}