#include <iostream>
#define MAXNUM 10
using namespace std;
typedef int DataType;
struct SeqQueue {
DataType que[MAXNUM];
size_t f, r;
};
typedef struct SeqQueue *PSeqQueue;
PSeqQueue createEmptyQueue() {
PSeqQueue sp = new SeqQueue;
sp->f = 0;
sp->r = 0;
return sp;
}
bool isEmpty(PSeqQueue sq) {
return sq->f == sq->r;
}
bool isFull(PSeqQueue sq) {
return (sq->r + 1) % MAXNUM == sq->f;
}
void enQueue(PSeqQueue sq, DataType value) {
if (isFull(sq)) {
cout << "队满,无法入队" << endl;
} else {
sq->que[sq->r] = value;
sq->r = (sq->r + 1) % MAXNUM;
}
}
DataType delQueue(PSeqQueue sq) {
if (isEmpty(sq)) {
cout << "队空,无法出队" << endl;
return -1;
} else {
DataType temp = sq->que[sq->f];
sq->f = (sq->f + 1) % MAXNUM;
return temp;
}
}
DataType frontQueue(PSeqQueue sq) {
return sq->que[sq->f];
}
size_t numQueue(PSeqQueue sq) {
if (isFull(sq)) {
return MAXNUM;
} else if (isEmpty(sq)) {
return 0;
} else if (sq->r >= sq->f) {
return sq->r - sq->f;
} else {
return MAXNUM - (sq->f - sq->r);
}
}
int main() {
PSeqQueue sq = createEmptyQueue();
for (int i = 1; !isFull(sq); ++i) {
enQueue(sq, i);
}
while (!isEmpty(sq)) {
cout << delQueue(sq) << " ";
}
cout << endl;
for (int i = 1; !isFull(sq); ++i) {
enQueue(sq, i);
}
while (!isEmpty(sq)) {
cout << delQueue(sq) << " ";
}
cout << endl;
delete sq;
return 0;
}