使用数组模拟队列,定义队列头和队列尾两个指针,队列为空时头尾指针相等且指向队列头部。 对于入队操作,判断队列是否已满,如果已满则无法入队;否则将元素加入队列尾部,队列尾指针后移。 对于出队操作,判断队列是否为空,如果为空则无法出队;否则返回队列头部元素并将头指针后移。 C语言代码
时间: 2023-12-07 22:33:26 浏览: 31
#define MAX_SIZE 100 // 队列最大容量
int queue[MAX_SIZE]; // 队列数组
int front = 0, rear = 0; // 队列头和尾指针
// 判断队列是否为空
int is_empty() {
return front == rear;
}
// 判断队列是否已满
int is_full() {
return rear - front == MAX_SIZE;
}
// 入队操作
void enqueue(int x) {
if (is_full()) {
printf("Queue is full.\n");
return;
}
queue[rear++] = x;
}
// 出队操作
int dequeue() {
if (is_empty()) {
printf("Queue is empty.\n");
return -1;
}
return queue[front++];
}
相关问题
循环队列中,为什么定义头指针和尾指针时不带星号
在循环队列中,定义头指针和尾指针时不带星号是因为它们是指向队列中元素的位置的指针,而不是指向具体元素的指针。
循环队列是一种环形的数据结构,通过使用头指针和尾指针来标记队列的起始位置和结束位置。头指针指向队列的第一个元素,尾指针指向队列最后一个元素的下一个位置。
当定义头指针和尾指针时,不带星号表示它们是指针变量,用于存储队列中元素的位置信息。通过对头指针和尾指针进行操作,可以实现队列的插入和删除操作。
例如,当插入一个元素到队列中时,可以将元素插入到尾指针所指向的位置,并将尾指针后移一位。当删除一个元素时,可以将头指针后移一位,并返回头指针所指向的元素。
总结来说,循环队列中定义头指针和尾指针时不带星号是因为它们是用于标记队列中元素位置的指针变量,而不是指向具体元素的指针。
非空链表队列中,front为头部指针,rear为尾部指针,那么两个节点出队的操作为
出队操作需要分为两步:
1. 删除队头节点:将front指针指向队头节点的下一个节点,释放队头节点的内存空间。
2. 如果删除的是队列中最后一个元素,需要将rear指针也指向NULL。
下面是两个节点出队的代码实现:
```c
if (front == NULL) {
// 队列为空,返回错误
return ERROR;
}
// 保存队头节点
QueueNode *temp = front;
// 将front指针指向队头节点的下一个节点
front = front->next;
// 如果队列中只有一个节点,将rear指针也指向NULL
if (front == NULL) {
rear = NULL;
}
// 释放队头节点的内存空间
free(temp);
return OK;
```
需要注意的是,如果队列为空,则无法进行出队操作,需要返回错误。