假设以带头结点的循环链表表示队列,并且只设置一个尾指针(没有头指针),编写置空,判空,入队和出队操作
时间: 2024-05-08 16:19:01 浏览: 58
只有尾结点的链表表示的队列算法
置空操作:
由于只有一个尾指针,因此将尾指针置为 NULL 即可。
```
void makeEmpty(queue *q) {
q->rear = NULL;
}
```
判空操作:
如果尾指针为 NULL,则队列为空。
```
int isEmpty(queue *q) {
return q->rear == NULL;
}
```
入队操作:
新元素插入到队列尾部即可,同时更新尾指针处的 next 指针。
```
void enqueue(queue *q, queue_entry e) {
queue_node *n = (queue_node *)malloc(sizeof(queue_node));
n->data = e;
if (q->rear == NULL) {
n->next = n;
} else {
n->next = q->rear->next;
q->rear->next = n;
}
q->rear = n;
}
```
出队操作:
如果队列为空,则直接返回;否则返回队头元素,并更新队头指针,同时释放原队头节点的空间。
```
void dequeue(queue *q, queue_entry *e) {
if (q->rear == NULL) {
return;
}
queue_node *front = q->rear->next;
if (front == q->rear) {
q->rear = NULL;
} else {
q->rear->next = front->next;
}
*e = front->data;
free(front);
}
```
阅读全文