2.队列管理模拟算法,要求采用带头结点的链队列结构,其管理模式如下。 (1)队列初始化为空队列。 (2)键盘输入偶数时,入队。 (3)键盘输入奇数时,出队。 (4)每输入一个整数,显示操作后队列中的值。 (5)键盘输入0时,算法结束。
时间: 2024-10-22 16:15:08 浏览: 41
在链队存储中,队列的基本运算算法如下:-数据结构讲义
队列管理模拟算法通常使用链表数据结构来实现,特别是带头节点的单链队列。这里是一个简单的C语言代码示例,实现了上述描述的功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化空链表
Node* initQueue() {
return (Node*)malloc(sizeof(Node));
}
// 入队操作
void enqueue(Node** head, int value) {
Node* newNode = initQueue();
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
// 出队操作
int dequeue(Node** head) {
if (*head == NULL) {
printf("Queue is empty.\n");
return -1; // 队列空,返回错误码
}
int value = (*head)->data;
Node* temp = *head;
*head = (*head)->next;
free(temp); // 释放已移除的节点
return value;
}
// 显示队列元素
void displayQueue(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node* head = initQueue(); // 初始化头节点为NULL
int input;
do {
printf("Enter an integer (even for enqueue, odd for dequeue, 0 to quit): ");
scanf("%d", &input);
if (input % 2 == 0) { // 偶数入队
enqueue(&head, input);
} else if (input % 2 != 0) { // 奇数出队
displayQueue(head);
head = dequeue(&head);
} else { // 输入0,退出循环
break;
}
displayQueue(head); // 操作后立即显示队列内容
} while (input != 0);
return 0;
}
```
阅读全文