构造一个空的链队列并依次将元素(e,f,g,h)进行入队和出队,C语言,完整代码
时间: 2024-12-18 12:31:38 浏览: 38
在C语言中,我们可以使用结构体表示链表节点,并创建一个队列结构来存储这些节点。这里是一个简单的实现,包括创建空队列、入队和出队操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 队列结构
typedef struct Queue {
Node* front; // 队首指针
Node* rear; // 队尾指针
} Queue;
// 初始化空队列
void initQueue(Queue* q) {
q->front = q->rear = NULL;
}
// 入队操作(在队尾添加)
void enqueue(Queue* q, int item) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = item;
newNode->next = NULL;
if (q->rear == NULL) { // 如果队列为空
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队操作(返回队首元素并删除)
int dequeue(Queue* q) {
if (q->front == NULL) {
printf("Queue is empty.\n");
return -1; // 或者抛出错误
}
int item = q->front->data;
Node* temp = q->front;
q->front = q->front->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(temp); // 释放已删除的节点内存
return item;
}
int main() {
Queue myQueue;
initQueue(&myQueue);
// 入队操作
enqueue(&myQueue, 'e');
enqueue(&myQueue, 'f');
enqueue(&myQueue, 'g');
enqueue(&myQueue, 'h');
// 出队并打印元素
printf("Dequeue elements:\n");
int element;
while ((element = dequeue(&myQueue)) != -1) {
printf("%c ", element);
}
return 0;
}
```
这个程序首先初始化一个空队列,然后依次将'e', 'f', 'g', 和 'h' 元素入队,最后按照先进先出的原则出队并打印结果。
阅读全文