由用户输入元素,创建一个链队列,用c语言实现
时间: 2024-11-03 08:14:45 浏览: 14
在C语言中,我们可以使用结构体(struct)和指针来实现一个简单的单向链表作为队列的数据结构。下面是一个基础的链队列(Queue)的实现:
首先,我们定义一个节点结构体(Node),包含数据域和指向下一个节点的指针:
```c
typedef struct Node {
int data;
struct Node* next;
} QueueNode;
```
然后创建队列的头结点(head)和尾结点(tail):
```c
typedef struct Queue {
QueueNode* head;
QueueNode* tail;
int size; // 队列大小
} Queue;
```
初始化函数用于创建新的空队列:
```c
void createQueue(Queue** queue) {
*queue = (Queue*)malloc(sizeof(Queue));
(*queue)->head = NULL;
(*queue)->tail = NULL;
(*queue)->size = 0;
}
```
添加元素到队列尾部(enqueue):
```c
void enqueue(Queue* q, int value) {
if (q->size == sizeof(q->tail)) {
printf("Queue is full.\n");
return;
}
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = NULL;
if (q->tail == NULL) {
q->head = newNode;
} else {
q->tail->next = newNode;
}
q->tail = newNode;
q->size++;
}
```
从队列头部删除并返回元素(dequeue):
```c
int dequeue(Queue* q) {
if (q->size == 0) {
printf("Queue is empty.\n");
return -1; // 或者抛出异常
}
int removedValue = q->head->data;
QueueNode* temp = q->head;
if (q->head == q->tail) { // 队列只剩一个元素
q->head = NULL;
q->tail = NULL;
} else {
q->head = q->head->next;
}
free(temp);
q->size--;
return removedValue;
}
```
你可以通过上述函数来操作链队列。注意,这只是一个基本实现,实际应用中还需要考虑错误处理和内存管理。
阅读全文