有关栈、队列、堆的函数使用总结

C++版本:

栈:

     #include< stack >    定义:stack< int > s;
     s.empty();         //如果栈为空则返回true, 否则返回false;
     s.size();          //返回栈中元素的个数
     s.top();           //返回栈顶元素, 但不删除该元素
     s.pop();           //弹出栈顶元素, 但不返回其值
     s.push();          //将元素压入栈顶

  
队列:

      #include< queue> 。定义:queue< int > q;
      q.empty()               如果队列为空返回true,否则返回false
      q.size()                返回队列中元素的个数
       q.pop()                 删除队列首元素但不返回其值
      q.front()               返回队首元素的值,但不删除该元素
       q.push()                在队尾压入新元素
      q.back()                返回队列尾元素的值,但不删除该元素


堆:

1、使用队列定义堆:

       #include< queue>

        priority_queue<int> q;  默认最大堆

       priority_queue<int,vector<int>,less<int> >;定义最大堆  //后面有一个空格

        priority_queue<int,vector<int>,greater<int> >q;定义最小堆  //后面有一个空格

2、直接使用库函数:

        #include <algorithm>

        make_heap: 根据指定的迭代器区间以及一个可选的比较函数,来创建一个heap.

        push_heap: 把指定区间的最后一个元素插入到heap中. 

        pop_heap: 弹出heap顶元素, 将其放置于区间末尾. 

        sort_heap:堆排序算法,通常通过反复调用pop_heap来实现.

 

python 版本

参考博客:https://www.cnblogs.com/BASE64/p/10956768.html

栈:

    列表就能实现。

 

队列:

    1、from collections import deque

         d = deque()

   2、form queue import Queue

         q = Queue()  #创建队列对象

 

堆:

    import heapq

   heapq模块实现了一个适用于python列表的最小堆排序算法。

内容不完整,后续补充。

 

### 3.1 队列的基本概念 队列是计算机科学中常见的数据结构,它们在内存管理、算法设计和程序执行中扮演着不同的角色。这些结构各自有不同的实现方式和用途,彼此之间并没有直接的关系,但在某些场景下可以相互配合使用。 #### (Stack) 是一种后进先出(LIFO, Last In First Out)的数据结构。中的元素只能从一端(称为)插入或删除。的特点是只能从添加或移除元素,常见操作包括 `push`(压,插入元素)、`pop`(出,移除元素)和 `peek`(查看元素)[^1]。 的典型用途包括函数调用管理(调用)、表达式求值(例如逆波兰表达式)以及撤销操作(如文本编辑器中的撤销操作)。 #### 队列(Queue) 队列是一种先进先出(FIFO, First In First Out)的数据结构。队列中的元素只能从一端(称为队尾)插入,从另一端(称为队头)删除。队列的特点是只能从队尾添加元素,从队头移除元素,常见操作包括 `enqueue`(入队,插入元素)、`dequeue`(出队,移除元素)和 `peek`(查看队头元素)[^1]。 队列的典型用途包括任务调度(例如操作系统中的进程调度)、广度优先搜索(BFS)算法以及数据流处理(如缓冲区管理)[^1]。 #### (Heap) 是一种树形数据结构,通常用于实现优先队列分为最大和最小:最大中每个节点的值都大于或等于其子节点的值;最小中每个节点的值都小于或等于其子节点的值。是一种完全二叉树,通过元素可以快速获取最大值或最小值。常见操作包括 `insert`(插入元素)、`extract`(移除元素)和 `heapify`(化操作)。 的典型用途包括优先队列的实现、排序以及图的算法(如 Dijkstra 算法)。 ### 3.2 队列的区别 #### 线性结构与非线性结构 队列都是线性数据结构,但它们的操作规则不同:是后进先出,而队列是先进先出。则是一种树形结构,用于快速访问优先级最高(或最低)的元素,可以看作是更复杂的队列实现。 #### 内存管理中的 计算机操作系统中的是指一块内存区域,该区域的管理(内存空间的分配与回收)采用类似数据结构中“”的特点进行操作。操作系统中的是物理存在的,是对数据结构中的这种手段的实现。无论哪一种,都遵循“后进先出”的特点[^4]。 #### 队列的实现 与的实现一样,队列的实现需要定义一个队列结构。以下是一个简单的队列定义示例: ```c typedef int QDataType; typedef struct QueueNode { struct QueueNode* next; QDataType data; } QueueNode; // 定义队列,实际上就是定义两个指针:头指针和尾指针 typedef struct Queue { QueueNode* phead; QueueNode* ptail; } Queue; ``` 这段代码定义了一个队列,其中包含两个指针 `phead` 和 `ptail`,分别指向队列的头部和尾部。队列的操作可以通过这两个指针来实现[^3]。 ### 3.3 队列的应用场景 #### 的应用场景 - **函数调用管理**:在程序执行过程中,每次函数调用都会在调用上分配一块内存,用于存储函数的局部变量、参数和返回地址。当函数返回时,这块内存会被释放[^1]。 - **表达式求值**:可以用于求解后缀表达式(逆波兰表达式),通过来存储操作数,并在遇到运算符时弹出的两个操作数进行计算。 - **撤销操作**:许多应用程序(如文本编辑器)使用来实现撤销功能,每次操作都会被压入中,用户可以通过出操作回退到上一步。 #### 队列的应用场景 - **任务调度**:在操作系统中,队列常用于管理进程调度,确保任务按照先进先出的原则执行。 - **广度优先搜索(BFS)**:在图的遍历中,队列用于实现广度优先搜索,确保节点按照层次顺序被访问[^1]。 - **数据流处理**:队列可以用于缓冲区管理,处理数据流中的突发流量,确保数据的有序传输。 #### 的应用场景 - **优先队列**:是实现优先队列的理想结构,能够快速获取优先级最高的元素(最大或最小)。 - **排序**:排序是一种基于结构的排序算法,能够在 O(n log n) 的时间复杂度内完成排序。 - **图的算法**:在 Dijkstra 算法中,用于维护最短路径优先的节点,提高算法的效率[^1]。 ### 3.4 总结 队列是三种基础且重要的数据结构,它们在不同的应用场景中发挥着关键作用。遵循后进先出的原则,适用于函数调用管理和表达式求值;队列遵循先进先出的原则,适用于任务调度和广度优先搜索;是一种树形结构,适用于优先队列排序。这些结构虽然在实现方式和用途上有所不同,但它们共同构成了计算机科学中不可或缺的基础。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值