用c语言写一个没有打印和销毁的链队列
时间: 2024-11-12 14:37:03 浏览: 5
C语言中队列的链式表示和实现,链队列
4星 · 用户满意度95%
在C语言中,我们可以使用结构体定义链表节点,并通过指针操作来创建一个简单的无头结点的队列。这里是一个简化的例子,它展示了如何添加元素到队列尾部以及从队列头部获取元素,但并没有提供打印和销毁功能。因为队列是一种线性数据结构,没有专门的“销毁”操作,而“打印”通常用于调试目的,在此示例中也不会体现。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
// 队列结构体,只有一个指向第一个节点的头指针
typedef struct Queue {
Node* front; // 队首指针
} Queue;
// 将元素添加到队尾
void enqueue(Queue* queue, int value) {
Node* newNode = (Node*)malloc(sizeof(Node)); // 动态分配内存
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = NULL;
if (queue->front == NULL) { // 如果队列为空
queue->front = newNode;
} else {
Node* temp = queue->front;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
// 从队首获取并删除元素(如果存在)
int dequeue(Queue* queue) {
if (queue->front == NULL) {
printf("Queue is empty.\n");
return -1; // 返回特殊值表示队列空
}
int value = queue->front->data;
Node* temp = queue->front;
queue->front = queue->front->next;
free(temp); // 释放已提取节点的内存
return value;
}
int main() {
Queue q;
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
int removedValue;
while ((removedValue = dequeue(&q)) != -1) {
printf("Removed value: %d\n", removedValue);
}
return 0;
}
```
阅读全文