在C++中使用优先队列列表的示例
优先队列
优先队列 是一种容器适配器,特别设计为队列的第一个元素是队列中所有元素中最大的,并且元素按非递增顺序排列(因此我们可以看到队列的每个元素具有优先级{固定顺序})。
与优先队列一起使用的函数:
- empty(): 此函数返回队列是否为空。
- size(): 此函数返回队列的大小。
- top(): 返回队列的顶部元素的引用。
- push(x): 此函数在队列末尾添加元素“x”。
列表
列表 是可以进行非连续内存分配的序列容器。与向量相比,列表遍历较慢,但一旦找到位置,插入和删除很快。通常,当我们说一个列表时,我们谈论的是双向链接列表。为了实现单链表,我们使用前向列表。
与列表一起使用的函数:
- push_front(x): 在列表开头添加新元素“x”。
- push_back(x): 在列表末尾添加新元素“x”。
前向列表
前向列表 在STL中实现了单向链表。从C ++ 11开始,前向列表在插入,删除和移动操作(如排序)方面比其他容器更有用,并允许在常数时间内插入和删除元素。 它与列表的不同在于,前向列表仅跟踪下一个元素的位置,而列表则跟踪下一个和上一个元素的位置,从而增加存储每个元素所需的存储空间。前向列表的缺点是无法向后迭代,也无法直接访问其单个元素。
当仅需要正向遍历时(与单向链接列表优先于双向链接列表相同),可以优先使用前向列表,以节省空间。一些例子包括哈希中的链接,图的邻接列表表示等。
与前向列表一起使用的函数:
- push_front(x): 在列表开头添加新元素“x”。
本文重点介绍了如何在C ++中使用前向列表和列表的优先队列。列表和前向列表的优先队列在设计复杂的数据结构时非常有用。
下面是前向列表的优先队列的实现:
输出
下面是优先级队列的列表实现:
输出
默认情况下,优先队列是最大堆,因此对于优先队列中的两个列表/前向列表,具有更大的第一个元素的列表/前向列表是最顶部的元素。如果第一个元素相等,则比较列表/前向列表的第二个值,依此类推。