用c语言实战:链队列其他操作的实现和调用 QueueEmpty(Q)条件:队列Q已存在,结果:若Q为空队列,则 返回TRUE,否则返回FALSE。 QueueLength(Q)返回Q的元素个数,即队列的长度 GetHead(Q,&e)用e返回Q的队头元素
时间: 2024-09-25 20:09:54 浏览: 50
在C语言中,链队列是一种利用指针链接节点的数据结构,用于实现先进先出(FIFO)的操作。对于你提到的几个操作,下面是一个简单的链队列实现以及相应的函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链队列结点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 链队列结构体
typedef struct Queue {
Node* front; // 队头指针
Node* rear; // 队尾指针
int length;
} Queue;
// 初始化空队列
void initQueue(Queue* q) {
q->front = q->rear = NULL;
q->length = 0;
}
// 判断队列是否为空
int QueueEmpty(Queue* q) {
return (q->front == NULL);
}
// 返回队列的长度
int QueueLength(Queue* q) {
return q->length;
}
// 获取队头元素并将其复制到e(如果非空)
void GetHead(Queue* q, int* e) {
if (!QueueEmpty(q)) {
*e = q->front->data;
q->front = q->front->next;
} else {
printf("Error: queue is empty.\n");
}
}
// 入队操作(添加元素到队尾)
void Enqueue(Queue* q, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = q->rear;
q->rear = newNode;
q->length++;
}
// 出队操作(删除并返回队头元素,如果非空)
int Dequeue(Queue* q) {
if (QueueEmpty(q)) {
return -1; // 或者抛出异常
} else {
int removedValue = q->front->data;
Node* temp = q->front;
q->front = q->front->next;
free(temp); // 释放内存
q->length--;
return removedValue;
}
}
// 测试链队列操作
int main() {
Queue Q;
initQueue(&Q);
// 添加一些元素并测试
Enqueue(&Q, 1);
Enqueue(&Q, 2);
Enqueue(&Q, 3);
// 检查队列长度和获取队头元素
printf("Queue length: %d\n", QueueLength(&Q));
int head;
GetHead(&Q, &head); // 应该得到值1
// 出队并检查结果
int popped = Dequeue(&Q);
printf("Popped element: %d\n", popped);
return 0;
}
```
阅读全文