C语言数据结构和ACM2023-第四章-链队的基本操作- LJD 【问题描述】 练习链队的基本操作,包括初始化队列,入队,出队和遍历队列等 【输入形式】 第一行输入入队的元素,以逗号隔开 【输出形式】 第一行输出:出队列的元素 第二行输出:当前队列的元素(遍历) 【样例输入】 10 20 30 【样例输出】 出队列的元素是:10 当前队列的数据元素为 20 30
时间: 2023-12-01 15:04:57 浏览: 90
以下是C语言实现链队的基本操作的代码,可以参考:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node, *QueuePtr;
typedef struct {
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
} LinkQueue;
// 初始化队列
void InitQueue(LinkQueue *Q) {
Q->front = Q->rear = (QueuePtr)malloc(sizeof(Node));
if (!Q->front) {
exit(0); // 分配内存失败,退出程序
}
Q->front->next = NULL;
}
// 入队
void EnQueue(LinkQueue *Q, int e) {
QueuePtr p = (QueuePtr)malloc(sizeof(Node));
if (!p) {
exit(0); // 分配内存失败,退出程序
}
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
}
// 出队
int DeQueue(LinkQueue *Q) {
if (Q->front == Q->rear) {
exit(0); // 队列为空,退出程序
}
QueuePtr p = Q->front->next;
int e = p->data;
Q->front->next = p->next;
if (Q->rear == p) {
Q->rear = Q->front;
}
free(p);
return e;
}
// 遍历队列
void TraverseQueue(LinkQueue Q) {
QueuePtr p = Q.front->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkQueue Q;
InitQueue(&Q);
int e;
char ch;
do {
scanf("%d", &e);
EnQueue(&Q, e);
ch = getchar(); // 读取逗号或回车
} while (ch == ',');
printf("出队列的元素是:%d\n", DeQueue(&Q));
printf("当前队列的数据元素为 ");
TraverseQueue(Q);
return 0;
}
```
输入格式为:以逗号隔开的入队元素。输出格式为:出队元素和当前队列元素。
阅读全文