#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;
}
C++结构体实现队列
最新推荐文章于 2024-11-02 20:20:37 发布