补全代码Status EnQueue(LinkQueue *Q, QElemType e) { }
时间: 2024-06-01 10:09:39 浏览: 71
Status EnQueue(LinkQueue *Q, QElemType e) {
QueuePtr p = (QueuePtr)malloc(sizeof(QNode)); // 创建一个新节点
if (!p) {
exit(OVERFLOW); // 内存分配失败
}
p->data = e; // 将元素e赋值给新节点的data域
p->next = NULL; // 新节点的next指针置为NULL
Q->rear->next = p; // 将新节点插入到队尾
Q->rear = p; // 修改队尾指针
return OK;
}
相关问题
(1)编写链接队列的基本操作函数。 ①进队操作 EnQueue(LinkQueue *Q, QElemType e) ②出队操作,队空 DeQueue(LinkQueue *Q, QElemType *e) ③输出队列中元素 0utputQueue(LinkQueue Q) (2)调用上述函数实现下列操作,操作步骤如下。 ①调用进队函数建立一个队列。 ②读取队列中的第一个元素。 ③从队列中删除元素。 ④输出队列中的所有元素。 注意 每完成一个步骤就必须及时输出队列中元素,以便观察操作结果。
下面是链接队列的基本操作函数的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
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 = (QueuePtr) malloc(sizeof(QNode));
if (!Q->front) {
exit(OVERFLOW);
}
Q->front->next = NULL;
return OK;
}
Status EnQueue(LinkQueue *Q, QElemType e) {
QueuePtr p = (QueuePtr) malloc(sizeof(QNode));
if (!p) {
exit(OVERFLOW);
}
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
return OK;
}
Status DeQueue(LinkQueue *Q, QElemType *e) {
if (Q->front == Q->rear) {
return ERROR;
}
QueuePtr p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if (Q->rear == p) {
Q->rear = Q->front;
}
free(p);
return OK;
}
void OutputQueue(LinkQueue Q) {
QueuePtr p = Q.front->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkQueue Q;
QElemType e;
InitQueue(&Q);
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
printf("Enqueued elements: ");
OutputQueue(Q);
DeQueue(&Q, &e);
printf("Dequeued element: %d\n", e);
printf("Remaining elements: ");
OutputQueue(Q);
return 0;
}
```
接下来是调用上述函数实现的操作步骤:
```
LinkQueue Q;
QElemType e;
InitQueue(&Q);
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
printf("Enqueued elements: ");
OutputQueue(Q);
DeQueue(&Q, &e);
printf("Dequeued element: %d\n", e);
printf("Remaining elements: ");
OutputQueue(Q);
```
输出结果为:
```
Enqueued elements: 1 2 3
Dequeued element: 1
Remaining elements: 2 3
```
可以看到,第一步成功地建立了一个队列,并且输出了队列中的元素;第二步读取了队列中的第一个元素;第三步成功地从队列中删除了元素;第四步输出了队列中剩余的所有元素。
#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; }补全这段代码
为了让代码能够正常运行,需要在代码中填充一些缺失的部分。下面是完整的代码:
```c++
#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;
}
```
这段代码实现了一个基于链式存储的队列,并且能够读入一串字符,将其入队,并依次出队输出。
阅读全文