#include <iostream> using namespace std; #include <stdlib.h> struct QNode { int data; QNode *next; }; struct LinkQueue { QNode *front; QNode *rear; }; int main() { int m; cin>>m; LinkQueue Q; initQueue(Q); for(int i=1; i<=m; i++) { enQueue(Q,i*2-1); } cout<<getFront(Q)<<endl; while(!queueEmpty(Q)) { cout<<deQueue(Q)<<" "; } }
时间: 2024-01-29 11:02:24 浏览: 70
好的,这是一个链式队列的实现代码。下面是代码注释和解释:
```
#include <iostream>
using namespace std;
#include <stdlib.h>
// 队列节点结构体
struct QNode {
int data; // 数据域
QNode *next; // 指针域,指向下一个节点
};
// 链式队列结构体
struct LinkQueue {
QNode *front; // 队头指针
QNode *rear; // 队尾指针
};
// 初始化队列
void initQueue(LinkQueue &Q) {
Q.front = Q.rear = new QNode; // 创建头节点
Q.front->next = NULL; // 头节点的下一个节点指向空(即没有节点)
}
// 队列是否为空
bool queueEmpty(LinkQueue Q) {
return Q.front == Q.rear; // 队头和队尾指向同一个头节点,说明队列为空
}
// 入队
void enQueue(LinkQueue &Q, int x) {
QNode *s = new QNode; // 创建一个新节点
s->data = x; // 新节点的数据域为x
s->next = NULL; // 新节点的下一个节点指向空
Q.rear->next = s; // 队尾节点的下一个节点指向新节点
Q.rear = s; // 队尾指针指向新节点
}
// 出队
int deQueue(LinkQueue &Q) {
if (Q.front == Q.rear) { // 队列为空,无法出队
cout << "队列已空!" << endl;
exit(0);
}
QNode *p = Q.front->next; // 指向队头节点的下一个节点
int x = p->data; // 获取队头节点的数据域
Q.front->next = p->next; // 头节点的下一个节点指向队头节点的下一个节点
if (Q.rear == p) { // 如果队头节点被出队后队列为空,需要将队尾指针指向头节点
Q.rear = Q.front;
}
delete p; // 释放队头节点的内存
return x; // 返回出队元素的值
}
// 获取队头元素
int getFront(LinkQueue Q) {
if (Q.front == Q.rear) { // 队列为空,无法获取队头元素
cout << "队列已空!" << endl;
exit(0);
}
return Q.front->next->data; // 返回队头节点的下一个节点的数据域
}
// 主函数
int main() {
int m;
cin >> m; // 输入入队元素的个数
LinkQueue Q;
initQueue(Q); // 初始化队列
for (int i = 1; i <= m; i++) { // 入队m个元素
enQueue(Q, i * 2 - 1);
}
cout << getFront(Q) << endl; // 获取队头元素并输出
while (!queueEmpty(Q)) { // 循环出队并输出出队元素
cout << deQueue(Q) << " ";
}
}
```
这段代码实现了一个链式队列,可以输入入队元素的个数,然后依次将元素入队。同时,可以获取队头元素并输出,以及循环出队并输出出队元素。
阅读全文