设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。用C++编写相应的入队和出队程序。
时间: 2024-04-30 12:04:28 浏览: 81
数据结构队列的实现
入队程序:
```c
void enqueue(node** tail, int data) {
node* new_node = (node*)malloc(sizeof(node));
new_node->data = data;
if (*tail == NULL) { // 空队列
new_node->next = new_node; // 指向自身
} else {
new_node->next = (*tail)->next; // 指向头结点
(*tail)->next = new_node; // 将新结点作为新的队尾
}
*tail = new_node; // 更新队尾指针
}
```
出队程序:
```c
int dequeue(node** tail) {
if (*tail == NULL) { // 空队列
printf("Queue is empty");
return -1;
}
int data;
node* head = (*tail)->next;
if (head == *tail) { // 队列只剩一个结点
data = head->data;
free(head);
*tail = NULL; // 更新队尾指针
} else {
data = head->data;
(*tail)->next = head->next; // 移除头结点
free(head);
}
return data;
}
```
阅读全文