c语言链队 完成出队入队获取队列长度等操作
时间: 2024-01-10 11:04:24 浏览: 47
好的,以下是一个简单的基于链表实现的队列的 C 语言代码:
```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 *queue)
{
queue->front = NULL;
queue->rear = NULL;
queue->length = 0;
}
/* 判断队列是否为空 */
int isQueueEmpty(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 (isQueueEmpty(queue))
{
queue->front = newNode;
}
else
{
queue->rear->next = newNode;
}
queue->rear = newNode;
queue->length++;
}
/* 出队 */
int deQueue(Queue *queue)
{
if (isQueueEmpty(queue))
{
printf("Queue is empty.\n");
return -1;
}
Node *temp = queue->front;
int data = temp->data;
queue->front = temp->next;
free(temp);
queue->length--;
return data;
}
/* 获取队列长度 */
int getQueueLength(Queue *queue)
{
return queue->length;
}
/* 测试 */
int main()
{
Queue queue;
initQueue(&queue);
enQueue(&queue, 1);
enQueue(&queue, 2);
enQueue(&queue, 3);
printf("Queue length: %d\n", getQueueLength(&queue)); // 输出队列长度
printf("Dequeue: %d\n", deQueue(&queue)); // 出队
printf("Dequeue: %d\n", deQueue(&queue));
printf("Dequeue: %d\n", deQueue(&queue));
printf("Dequeue: %d\n", deQueue(&queue)); // 队列已空
return 0;
}
```
以上代码实现了队列的初始化、入队、出队和获取队列长度等基本操作。需要注意的是,在出队时如果队列为空,需要给出相应提示并返回 -1。