队列的链式存储的队头指针和队尾指针的初始值
时间: 2023-11-02 09:49:11 浏览: 35
在链式存储结构中,队头指针和队尾指针分别指向链表的头结点和尾结点。如果链表为空,则队头指针和队尾指针都应该指向空(NULL)。
具体来说,在初始状态下,队头指针和队尾指针都应该初始化为 NULL,表示队列为空。当有元素入队时,队头指针指向链表的第一个结点,队尾指针指向链表的最后一个结点。当队列中的元素全部出队后,队头指针和队尾指针再次指向 NULL,表示队列重新变为空。
相关问题
采用链式存储实现队列的初始化,入队出队操作
链式存储的队列可以使用一个带有指针的结构体来实现,结构体中包含队列头指针和队列尾指针,同时每个节点也包含一个指向下一个节点的指针。具体实现如下:
```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 *queue) {
queue->front = queue->rear = NULL;
}
// 判断队列是否为空
int isEmpty(Queue *queue) {
return queue->front == NULL;
}
// 入队操作
void enQueue(Queue *queue, int data) {
// 创建新节点
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
// 如果队列为空,将新节点设为队列头和队列尾
if (isEmpty(queue)) {
queue->front = queue->rear = newNode;
}
// 否则将新节点插入到队列尾
else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队操作
int deQueue(Queue *queue) {
// 如果队列为空,返回-1
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
// 取出队列头节点的值,并移除队列头节点
int data = queue->front->data;
Node *temp = queue->front;
queue->front = queue->front->next;
free(temp);
// 如果队列只有一个节点,出队后将队列尾指针置为NULL
if (queue->front == NULL) {
queue->rear = NULL;
}
return data;
}
int main() {
Queue queue;
initQueue(&queue);
enQueue(&queue, 1);
enQueue(&queue, 2);
enQueue(&queue, 3);
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
enQueue(&queue, 4);
enQueue(&queue, 5);
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
return 0;
}
```
输出结果为:
```
1
2
3
Queue is empty.
4
5
Queue is empty.
Queue is empty.
```
c语言队列的链式存储
链式存储是一种使用链表实现的存储方式,用于表示队列的数据结构。在C语言中,链式队列通常由两个指针变量front和rear来表示队首和队尾。队列中的元素通过节点依次连接起来,每个节点包含一个数据元素和指向下一个节点的指针。
关于链式队列的操作,以下是一些常见的方法和步骤:
1. 初始化队列:使用malloc函数为队列结构分配内存,并将front和rear指针初始化为NULL,表示队列为空。
2. 入队操作:创建一个新的节点,并将数据元素存储在节点的data域中。将新的节点插入到队列的尾部,即将rear指针指向新节点,并更新rear指针。如果队列为空,则同时更新front指针。
3. 出队操作:通过front指针获得队首节点,并将数据元素存储在一个临时变量中。将front指针指向队首节点的下一个节点,并释放原队首节点的内存。如果队列为空,即front指针为NULL,则出队操作无效。
4. 判断队列是否为空:当front指针和rear指针均为NULL时,队列为空。
5. 获取队列长度:从front指针开始遍历链表,通过next指针依次访问每个节点,同时计数器自增,直到next指针为NULL时停止遍历,计数器的值就是队列的长度。
6. 销毁队列:释放队列占用的全部存储空间,包括链队结点和所有数据结点的存储空间。