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

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

学习目标:

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

学习内容:

  1. 栈(Stack)

    • 概念:栈是一种后进先出(LIFO, Last In First Out)的数据结构,元素被添加到栈的顶部,并从栈顶部移除。

    • 栈的操作:

      • push:将一个元素放入栈顶。
      • pop:移除栈顶元素。
      • top:访问栈顶元素。
      • empty:检查栈是否为空。
    • 代码示例:

      cpp 复制代码
      #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:检查队列是否为空。
    • 代码示例:

      cpp 复制代码
      #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,然后依次弹出并打印。接着向队列中加入同样的三个整数,并依次从队列中移除并打印。

答案:

cpp 复制代码
#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

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

目录
第二十九课 冒泡排序和选择排序

相关推荐
奇妙方程式17 分钟前
2026年第九届GXCPC广西大学生程序设计大赛(热身赛)题解
c++·编程比赛·编程竞赛·gxcpc
Tian_Hang1 小时前
C++原型模式(Protype)
开发语言·c++·算法
一切皆是因缘际会1 小时前
LLM轻量化联邦微调机理
数据结构·人工智能·数学建模·ai
FL16238631292 小时前
[cmake]基于C++使用纯opencv部署ppocrv5v6的onnx模型
开发语言·c++·opencv
玖玥拾2 小时前
C/C++ 数据结构(六)链表迭代器与底层
c语言·数据结构·c++·链表·stl库
牛油果子哥q2 小时前
AVL平衡树与红黑树深度精讲对比,平衡因子、四大旋转原理、着色规则、平衡策略、性能差异与面试手撕全解
数据结构·c++·面试
汉克老师3 小时前
GESP7级C++考试语法知识(二、指数函数(3、综合练习)
c++·算法·数学建模·指数函数·gesp7级·复利
C++ 老炮儿的技术栈3 小时前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
Irissgwe3 小时前
map/set/multimap/multiset 的底层逻辑与实现
数据结构·c++·算法·二叉树·stl·c·红黑树
IronMurphy3 小时前
【算法五十八】23. 合并 K 个升序链表
数据结构·算法·链表