admin 管理员组文章数量: 887021
2024年1月23日发(作者:芒果同城霸屏源码下载)
C语言实现队列的基本操作
队列(Queue)是一种先进先出(FIFO)的数据结构,常用于实现广度优先、操作系统任务调度等场景。在C语言中,可以使用数组或链表来实现队列的基本操作。
一、使用数组实现队列
使用数组实现队列需要定义一些基本的操作函数,包括创建队列、入队列、出队列、判断队列是否为空、判断队列是否已满等。
1.创建队列:首先需要定义一个容量大小的常量,表示队列的最大长度。然后定义一个数组和两个指针,分别指向队列的头部和尾部。头部指针初始化为0,尾部指针初始化为-1
```c
#define MAX_SIZE 100
typedef struct
int data[MAX_SIZE];
int front;
int rear;
} Queue;
```
2. 入队列:将元素添加到队列的尾部。首先判断队列是否已满(rear是否等于MAX_SIZE-1),如果已满则表示队列已满,无法插入新的元素;否则,将元素添加到队列的尾部,并将rear指针后移一位。
```c
void enqueue(Queue* queue, int value)
if (queue->rear == MAX_SIZE - 1)
printf("Queue is fulln");
return;
}
queue->rear++;
queue->data[queue->rear] = value;
```
3. 出队列:从队列的头部移除元素。首先判断队列是否为空(front是否等于rear+1),如果为空则表示队列为空,无法移除元素;否则,返回队列头部的元素,并将front指针后移一位。
```c
int dequeue(Queue* queue)
if (queue->front == queue->rear + 1)
printf("Queue is emptyn");
return -1;
}
int value = queue->data[queue->front];
queue->front++;
return value;
```
4.判断队列是否为空:当队列的头部指针等于尾部指针加1时,表示队列为空。
```c
int isEmpty(Queue* queue)
return queue->front == queue->rear + 1;
```
5.判断队列是否已满:当队列的尾部指针等于MAX_SIZE-1时,表示队列已满。
```c
int isFull(Queue* queue)
return queue->rear == MAX_SIZE - 1;
```
二、使用链表实现队列
使用链表实现队列需要定义一些基本的操作函数,包括创建队列、入队列、出队列、判断队列是否为空等。
1.创建队列:定义一个节点结构体,包含一个数据域和一个指向下一个节点的指针。然后定义一个头指针和一个尾指针,初始时它们都指向NULL。
```c
typedef struct Node
int data;
struct Node* next;
} Node;
typedef struct
Node* front;
Node* rear;
} Queue;
```
2.入队列:将元素添加到队列的尾部。首先创建一个新的节点,将插入的元素赋值给新节点的数据域,然后将新节点插入到队列的尾部,并更新尾指针。
```c
void enqueue(Queue* queue, int value)
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = NULL;
if (queue->rear == NULL)
queue->front = newNode;
queue->rear = newNode;
} else
queue->rear->next = newNode;
queue->rear = newNode;
}
```
3.出队列:从队列的头部移除元素。首先判断队列是否为空,如果为空则表示队列为空,无法移除元素;否则,返回队列头部的元素,并更新头指针。
```c
int dequeue(Queue* queue)
if (queue->front == NULL)
printf("Queue is emptyn");
return -1;
}
Node* temp = queue->front;
int value = temp->data;
queue->front = temp->next;
if (queue->front == NULL)
queue->rear = NULL;
}
free(temp);
return value;
```
4.判断队列是否为空:当队列的头指针为空时,表示队列为空。
```c
int isEmpty(Queue* queue)
return queue->front == NULL;
```
以上是使用数组和链表两种常见的方式来实现队列的基本操作。无论是使用数组还是链表来实现队列,都要根据实际需求和场景选择合适的实现方式。
版权声明:本文标题:C语言实现队列的基本操作 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705960314h495760.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论