C 语言双端队列

2025年1月7日 | 阅读 8 分钟

在 C 语言中,Deque双端队列)是一种允许从左端和右端进行插入删除的队列数据结构。

Double Ended Queue in C

我们可以从上图的双端队列中看到,当我们在后端添加一个元素时,R移动;当我们在后端删除一个元素时,R移动。

同样地,当元素从前端删除时,F 向右移动;当元素添加到前端时,F移动。

双端队列操作

双端队列支持四种操作。

1. 添加尾部元素

它用于从尾部添加一个元素。

2. 删除尾部元素

它用于从尾部删除一个元素。

3. 添加头部元素

它用于从头部添加一个元素。

4. 删除头部元素

它用于删除头部的一个元素。

我们将使用循环数组来实现双端队列。

双端队列的添加尾部元素操作

如果 te 的值大于数组的大小,将显示消息“队列已满”。否则,R 的值将增加 R=(R+1)%Size,并将元素添加到数组中 R 的新位置。最后,te 的值将增加1

在这种情况下,数组中的元素总数由变量 te 维护。添加元素时,te 的值增加1。删除元素后,te 的值减少1

程序

让我们以一个例子来演示 C++ 中双端队列添加尾部元素操作

输出

Item 10 added to the queue at position 0
Queue contents: 10

双端队列的删除尾部元素操作

如果 te 的值为0,我们将显示消息队列为空;否则,我们将检查 R 的值是否为-1,如果是,我们将初始化 R=size-1。之后,我们将显示它并在删除元素后将 Rte1

程序

让我们以一个例子来演示 C++ 中双端队列删除尾部元素操作

输出

Item 42 added to the queue at position 0
Number Deleted From Rear End = 42
Queue contents:

双端队列的添加头部元素操作

当从前端添加元素时,我们首先检查 te 的值是否等于数组大小,然后显示消息。如果不是,则队列已满,我们将检查 F 的值是否为 0,如果是,则将其初始化为size-1;否则,将其减1。之后,将元素添加到数组中元素 F 的新位置,然后将 te 的值增加1

程序

让我们以一个例子来演示 C++ 中双端队列添加头部元素操作

输出

Item 42 added to the front end of the queue at position 9
Queue contents: 42

双端队列的删除头部元素操作

删除前端元素时,我们首先检查 te 的值是否等于 0,在这种情况下将显示消息“队列为空”。如果不是,将被删除的元素将显示在屏幕上。之后,我们将 F 的值增加 F=(F+1)%Size,然后将 te 的值减少1

程序

让我们以一个例子来演示 C++ 中双端队列删除头部元素操作

输出

Item 42 added to the front end of the queue at position 9
Number Deleted From Front End = 42
Queue contents:

实现循环数组的双端队列程序

这是一个使用大小为 7 的循环数组实现的双端队列的示例 C 程序。

输出

运行时案例

1. Add Rear
2. Delete Rear
3. Add Front
4. Delete Front
5. Display
6. Exit
Enter Choice: 1
Enter a number: 10

1. Add Rear
2. Delete Rear
3. Add Front
4. Delete Front
5. Display
6. Exit
Enter Choice: 3
Enter a number: 5

1. Add Rear
2. Delete Rear
3. Add Front
4. Delete Front
5. Display
6. Exit
Enter Choice: 1
Enter a number: 20

1. Add Rear
2. Delete Rear
3. Add Front
4. Delete Front
5. Display
6. Exit
Enter Choice: 5
Deque Elements: 5 10 20 

1. Add Rear
2. Delete Rear
3. Add Front
4. Delete Front
5. Display
6. Exit
Enter Choice: 2
Number Deleted From Rear End = 20

1. Add Rear
2. Delete Rear
3. Add Front
4. Delete Front
5. Display
6. Exit
Enter Choice: 4
Number Deleted From Front End = 5

1. Add Rear
2. Delete Rear
3. Add Front
4. Delete Front
5. Display
6. Exit
Enter Choice: 5
Deque Elements: 10 

1. Add Rear
2. Delete Rear
3. Add Front
4. Delete Front
5. Display
6. Exit
Enter Choice: 6