假设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针编程用C语言实现队列的入队和出队操作。
时间: 2024-06-13 12:06:01 浏览: 144
假定一个单向循环链表来表示队列(即循环链队),该队列只设一个队尾指针,不设队首指针,试编写下列各种运算的算法
4星 · 用户满意度95%
以下是C语言实现不带头结点的循环链表队列的入队和出队操作的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *rear = NULL; // 队尾指针
// 入队操作
void enqueue(int value) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
if (rear == NULL) { // 队列为空
newNode->next = newNode; // 新结点指向自己
rear = newNode; // 队尾指针指向新结点
} else {
newNode->next = rear->next; // 新结点指向队头结点
rear->next = newNode; // 队尾结点指向新结点
rear = newNode; // 队尾指针指向新结点
}
}
// 出队操作
int dequeue() {
if (rear == NULL) { // 队列为空
printf("Queue is empty.\n");
return -1;
}
int value;
if (rear->next == rear) { // 队列只有一个结点
value = rear->data;
free(rear);
rear = NULL; // 队尾指针置空
} else {
Node *head = rear->next; // 头结点
value = head->data;
rear->next = head->next; // 队头结点出队
free(head);
}
return value;
}
```
阅读全文