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;

```

以上是使用数组和链表两种常见的方式来实现队列的基本操作。无论是使用数组还是链表来实现队列,都要根据实际需求和场景选择合适的实现方式。


本文标签: 队列 实现 元素 指针 定义