写一个数据结构链队列的链式表示与实现c语言
时间: 2024-10-09 07:10:30 浏览: 36
C语言单链队列的表示与实现实例详解
链队列是一种线性数据结构,它的特点是先进先出(First In First Out,FIFO)。在链式表示中,每个节点包含两个部分:一个是存储元素的数据域,另一个是指向下一个节点的指针。以下是C语言中链队列的一种简单实现:
```c
// 定义链队列节点结构体
typedef struct Node {
int data; // 存储数据域
struct Node* next; // 指向下一个节点的指针
} QueueNode;
// 链队列的头结点定义
typedef struct Queue {
QueueNode* front; // 队首指针
QueueNode* rear; // 队尾指针
int size; // 队列大小
} Queue;
// 初始化一个新的空队列
Queue* createQueue() {
Queue* queue = (Queue*)malloc(sizeof(Queue));
queue->front = NULL;
queue->rear = NULL;
queue->size = 0;
return queue;
}
// 插入元素到队尾
void enqueue(Queue* queue, int value) {
QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));
newNode->data = value;
newNode->next = NULL;
if (queue->rear == NULL) {
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
queue->size++;
}
// 删除并返回队首元素
int dequeue(Queue* queue) {
if (queue->front == NULL) {
printf("Queue is empty.\n");
return -1;
}
int value = queue->front->data;
QueueNode* temp = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
queue->size--;
return value;
}
// 查看队列是否为空
int isEmpty(Queue* queue) {
return queue->front == NULL;
}
// 获取队列长度
int getSize(Queue* queue) {
return queue->size;
}
// 关闭链队列释放内存
void destroyQueue(Queue* queue) {
QueueNode* current = queue->front;
while (current != NULL) {
QueueNode* temp = current;
current = current->next;
free(temp);
}
free(queue);
}
```
阅读全文