#include<iostream> using namespace std; #define OK 1 #define ERROR 0 typedef int Status; typedef char QElemType; typedef struct QNode { QElemType data; struct QNode *next; } QNode, *QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; } LinkQueue; Status InitQueue(LinkQueue &Q) { Q.front = Q.rear = new QNode; Q.front->next = NULL; return OK; } Status EnQueue(LinkQueue &Q, QElemType e) { QueuePtr p; p = new QNode; p->data = e; p->next = NULL; ; ; return OK; } Status DeQueue(LinkQueue &Q, QElemType &e) { QueuePtr p; if (Q.front == Q.rear) return ERROR; p = Q.front->next; e = p->data; ; if (Q.rear == p) ; delete p; return OK; } int main() { LinkQueue Q; int n,m,i; char c; InitQueue(Q); cin >> n; for(i=0;i<n;i++){ cin >> c; EnQueue(Q,c); } for(i=0;i<n;i++){ DeQueue(Q,c); } cin >> m; for(i=0;i<m;i++){ cin >> c; EnQueue(Q,c); } for(i=0;i<m;i++){ DeQueue(Q,c); cout << c << " "; } return 0; }
时间: 2024-03-20 11:44:01 浏览: 107
#include_iostream.h_
4星 · 用户满意度95%
这段代码是一个基于链表实现的队列,主要包含了队列的初始化、入队、出队操作。其中,QNode结构体表示队列中的每个节点,LinkQueue结构体表示队列,包含一个头指针和一个尾指针。
在InitQueue函数中,创建一个空节点作为队列的头节点和尾节点,front和rear都指向它。
在EnQueue函数中,新建一个节点,将数据存储在节点中,然后将其插入到队列的尾部。
在DeQueue函数中,判断队列是否为空。如果不为空,取出队头节点的数据,将队头节点从链表中删除,并更新队列的头指针。
在main函数中,通过调用InitQueue函数初始化队列,然后对队列进行入队和出队操作。
需要注意的是,代码中的EnQueue函数有一些问题,缺少了将新建的节点插入到队列的尾部的操作,导致出队操作时会出现问题。
下面是修改过的代码:
```
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef char QElemType;
typedef struct QNode {
QElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
} LinkQueue;
// 初始化队列
Status InitQueue(LinkQueue &Q) {
Q.front = Q.rear = new QNode;
Q.front->next = NULL;
return OK;
}
// 入队操作
Status EnQueue(LinkQueue &Q, QElemType e) {
QueuePtr p;
p = new QNode;
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
// 出队操作
Status DeQueue(LinkQueue &Q, QElemType &e) {
QueuePtr p;
if (Q.front == Q.rear)
return ERROR;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
delete p;
return OK;
}
int main() {
LinkQueue Q;
int n,m,i;
char c;
InitQueue(Q);
cin >> n;
for(i=0;i<n;i++){
cin >> c;
EnQueue(Q,c);
}
for(i=0;i<n;i++){
DeQueue(Q,c);
}
cin >> m;
for(i=0;i<m;i++){
cin >> c;
EnQueue(Q,c);
}
for(i=0;i<m;i++){
DeQueue(Q,c);
cout << c << " ";
}
return 0;
}
```
阅读全文