从0开始学C++ 第二十八课 数据结构深入 - 栈和队列

这篇具有很好参考价值的文章主要介绍了从0开始学C++ 第二十八课 数据结构深入 - 栈和队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第二十八课:数据结构深入 - 栈和队列

学习目标:

  1. 理解栈(Stack)的基本概念和特性。
  2. 掌握队列(Queue)的基本概念和特性。
  3. 学会在C++中使用栈和队列。
  4. 了解栈和队列的典型应用场景。

学习内容:

  1. 栈(Stack)

    • 概念:栈是一种后进先出(LIFO, Last In First Out)的数据结构,元素被添加到栈的顶部,并从栈顶部移除。
    • 栈的操作:
      • push:将一个元素放入栈顶。
      • pop:移除栈顶元素。
      • top:访问栈顶元素。
      • empty:检查栈是否为空。
    • 代码示例:
      #include <iostream>
      #include <stack>
      using namespace std;
      
      int main() {
          stack<int> stk;
      
          // 入栈
          stk.push(10);
          stk.push(20);
          stk.push(30);
      
          // 访问栈顶元素
          cout << "Top element: " << stk.top() << endl;
      
          // 出栈
          cout << "Elements: ";
          while (!stk.empty()) {
              cout << stk.top() << " ";
              stk.pop();
          }
          cout << endl;
      
          return 0;
      }
      
    • 预计输出效果:
      Top element: 30
      Elements: 30 20 10
      
    • 使用场景:栈用于解决像浏览器前进后退、函数调用、括号匹配等问题。
  2. 队列(Queue)

    • 概念:队列是一种先进先出(FIFO, First In First Out)的数据结构,元素被添加到队列的末尾,并从队列的前端移除。
    • 队列的操作:
      • enqueuepush:将一个元素添加到队列末尾。
      • dequeuepop:移除队列前端的元素。
      • front:访问队列前端的元素。
      • empty:检查队列是否为空。
    • 代码示例:
      #include <iostream>
      #include <queue>
      using namespace std;
      
      int main() {
          queue<int> q;
      
          // 入队
          q.push(10);
          q.push(20);
          q.push(30);
      
          // 访问队首元素
          cout << "Front element: " << q.front() << endl;
      
          // 出队
          cout << "Elements: ";
          while (!q.empty()) {
              cout << q.front() << " ";
              q.pop();
          }
          cout << endl;
      
          return 0;
      }
      
    • 预计输出效果:
      Front element: 10
      Elements: 10 20 30
      
    • 使用场景:队列用于任务排队、缓冲处理、打印队列等场景。

练习题:

编写一个C++程序,创建一个栈和一个队列。首先向栈中压入三个整数:1,2,3,然后依次弹出并打印。接着向队列中加入同样的三个整数,并依次从队列中移除并打印。

答案:

#include <iostream>
#include <stack>
#include <queue>
using namespace std;

int main() {
    stack<int> s; // 创建栈
    queue<int> q; // 创建队列

    // 栈操作
    s.push(1);
    s.push(2);
    s.push(3);

    cout << "Stack elements (LIFO order): ";
    while (!s.empty()) {
        cout << s.top() << " ";
        s.pop();
    }
    cout << endl;

    // 队列操作
    q.push(1);
    q.push(2);
    q.push(3);

    cout << "Queue elements (FIFO order): ";
    while (!q.empty()) {
        cout << q.front() << " ";
        q.pop();
    }
    cout << endl;

    return 0;
}

预计输出效果:

Stack elements (LIFO order): 3 2 1
Queue elements (FIFO order): 1 2 3

以上示例和练习涉及到栈和队列的基本操作,通过实际的代码演示帮助你理解这些结构的工作原理。在实际应用中,栈和队列是非常有用的数据结构,对于理解更复杂的数据结构和算法也是非常重要的基础。

目录
第二十九课 冒泡排序和选择排序文章来源地址https://www.toymoban.com/news/detail-817867.html

到了这里,关于从0开始学C++ 第二十八课 数据结构深入 - 栈和队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构刷题(二十八):509斐波那契数、70爬楼梯、746 使用最小花费爬楼梯

    思路:动态规划五部曲。根据本题的要求具体划分: 确定dp数组以及下标的含义 :dp[i]的定义为:第i个数的斐波那契数值是dp[i] 确定递推公式: 状态转移方程 dp[i] = dp[i - 1] + dp[i - 2]; dp数组如何初始化: dp[0] = 0, dp[1] = 1; 确定遍历顺序 : 从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可

    2023年04月09日
    浏览(40)
  • 数据结构(超详细讲解!!)第二十一节 特殊矩阵的压缩存储

    值相同的元素只存储一次 压缩掉对零元的存储,只存储非零元 特殊形状矩阵: 是指非零元(如值相同的元素)或零元素分布具有一定规律性的矩阵。 如: 对称矩阵 上三角矩阵   下三角矩阵 对角矩阵   准对角矩阵 三角矩阵大体分为三类:下三角矩阵、上三角矩阵和对称

    2024年02月04日
    浏览(50)
  • 【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

    目录  前言: 委托构造函数: 类内初始化: 空指针: 枚举类: 总结:         C++的学习难度大,内容繁多。因此我们要及时掌握C++的各种特性,因此我们更新本篇文章,向大家介绍C++的新增特性。 委托构造函数是指一 个类的构造函数调用另一个类的构造函数,以减少代

    2024年02月13日
    浏览(68)
  • 【从零开始学习C++ | 第二十二篇】C++新增特性(下)

    目录 前言: 类型推导: constexpr: 初始化列表: 基于范围的for循环: 智能指针之unique ptr Lambda表达式: 总结:         本文我们将继续介绍   C++ 11 新增十大特性的剩余六个,如果没有看过介绍前四个特性的小伙伴的可以点进我C++的专栏就可以看到。 类型推导(

    2024年02月14日
    浏览(63)
  • 【从零开始学习JAVA | 第二十三篇】集合体系结构

    目录 前言: 单列集合:      set与list的区别: 双列集合: map的特点: 总结:                   JAVA中为我们提供了很多集合,这些集合都有自己很独特的特点,因此我们要学习所有的集合,但是在学习所有的集合之前,我们还是先为大家介绍一下JAVA的集合体系结构,这

    2024年02月16日
    浏览(59)
  • C++算法之旅、05 基础篇 | 第二章 数据结构

    常用代码模板2——数据结构 - AcWing 使用结构体指针,new Node() 非常慢,创建10万个节点就超时了,做笔试题不会用这种方式(优化是提前初始化好数组,但这样跟数组模拟没区别了,而且代码量很长) 使用两个数组,e存储val,ne存储next。空节点next用-1表示 826. 单链表 - AcWi

    2024年02月10日
    浏览(57)
  • python爬虫学习第二十八天-------了解scrapy(二十八天)

    🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨  hello,兄弟姐妹们!我是喔的嘛呀。今天我们首先来了解scrapy。为后面的学习打下基础。 一、scrapy是什么?

    2024年04月25日
    浏览(41)
  • 第二十八章 Unity射线检测

    本章节我们介绍一下射线。射线就是从一个固定点向一个方向发射出一条直线,在发射过程中需要判断该射线有没有与游戏物体发送碰撞。射线既可以用来检测射击游戏中武器指向目标;又可以判断鼠标是否指向游戏物体。射线的创建方式,一般使用代码来实现。接下来,我

    2024年02月11日
    浏览(61)
  • 蓝桥杯31天真题冲刺|题解报告|第二十八天

    大家好,我是snippet,今天是我们刷题的第二十八天,距离我们刷题活动结束也就只有几天了,最近刷题有点迷茫了,下面是我今天的题解 目录 一、路标设置 题目链接:P3853 [TJOI2007]路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目内容: 解题思路: 代码: 题目链接

    2023年04月08日
    浏览(35)
  • 第二十八回:如何给PageView添加指示器

    我们在前面章回中介绍了PageView这个Widget,本章回中将介绍 如何给PageView添加指示器 .闲话休提,让我们一起Talk Flutter吧。 我们在这里说的指示器表示 PageView 底部的小圆圈,它用来指示当前哪个页面被选中。常用的场景是滑动页面时小圆圈高亮显示当前被选中的页面,其它小圆

    2024年02月04日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包