#include <iostream>
using namespace std;
#define Max 100 //宏定义
//定义队列 循环链表
typedef struct{
int *base;
int front;
int rear;
}queue;
//初始化
void Initqueue(queue &q) {
q.base = new int[Max];
q.front = q.rear = 0; //初始化即为两个索引都置为 0
}
//push入队
void push(queue &q, int e) {
if ((q.rear + 1) % Max != q.front) //队不满
{
q.base[q.rear] = e; //注意base用法
q.rear = (q.rear + 1) % Max;
}
}
//pop出队
void pop(queue &q) {
q.front = (q.front + 1) % Max;
}
//empty判空 [空为1 不空为0]
bool empty(queue &q) {
if (q.front == q.rear)
return 0;
else
return 1;
}
int main() {
int n, m;
while (cin>>n>>m )
{
if (n == 0 && m == 0) break; //退出条件
queue q;
Initqueue(q);//定义队列+初始化
//入队
for (int i = 0; i < n; i++) {
int e; cin >> e;
push(q,e);
}
//输出+出队
for (int i = 0; i < m; i++) {
cout << q.base[q.front] << " ";
pop(q);
}
//判空并输出
cout <<empty(q)<< endl;
//清空队列
while (empty(q)==1) {
pop(q);
}
}
}
BJFU 246基于循环链表的队列的基本操作
最新推荐文章于 2024-01-25 20:23:21 发布