十天学完基础数据结构-第五天(栈(Stack)和队列(Queue))

在这里插入图片描述

栈的定义和特点

是一种线性数据结构,它遵循后进先出(LIFO)原则。栈具有以下基本概念和特点:

  • 栈顶:栈的顶部元素,是唯一可访问的元素。

  • 入栈:将元素添加到栈顶。

  • 出栈:从栈顶移除元素。

栈常常用于跟踪函数调用、表达式求值等场景。

队列的定义和特点

队列是一种线性数据结构,它遵循先进先出(FIFO)原则。队列具有以下基本概念和特点:

  • 队列前端:队列的第一个元素,是唯一可访问的元素。

  • 队尾:队列的最后一个元素,用于添加新元素。

  • 入队:将元素添加到队尾。

  • 出队:从队列前端移除元素。

队列常常用于任务调度、缓冲数据等场景。

栈和队列的常见操作

栈和队列支持以下常见操作:

  1. 入栈:将元素添加到栈顶。

  2. 出栈:从栈顶移除元素。

  3. 获取栈顶元素:查看但不移除栈顶元素。

队列

  1. 入队:将元素添加到队尾。

  2. 出队:从队列前端移除元素。

  3. 获取队列前端元素:查看但不移除队列前端元素。

下面是一个简单的C++示例,使用栈和队列:

#include <iostream>
#include <stack>
#include <queue>

int main() {
    
    
    // 使用栈
    std::stack<int> myStack;
    
    // 入栈
    myStack.push(1);
    myStack.push(2);
    
    // 出栈
    int topElement = myStack.top();
    myStack.pop();

    // 使用队列
    std::queue<int> myQueue;
    
    // 入队
    myQueue.push(1);
    myQueue.push(2);
    
    // 出队
    int frontElement = myQueue.front();
    myQueue.pop();

    return 0;
}

练习题:

  1. 栈和队列的主要区别是什么?给出一个现实生活中的例子,说明何时使用栈和何时使用队列。

  2. 在栈中,最后一个入栈的元素是什么?在队列中,最后一个入队的元素是什么?

  3. 描述一种情况,其中栈可以用于解决问题。

  4. 描述一种情况,其中队列可以用于解决问题。

栈和队列的主要区别是什么?给出一个现实生活中的例子,说明何时使用栈和何时使用队列。

  • 主要区别:主要区别在于数据的访问顺序。栈遵循后进先出(LIFO)原则,最后进入的元素最先被访问。队列遵循先进先出(FIFO)原则,最早进入的元素最先被访问。

  • 示例:考虑以下示例,你在超市排队结账。队列的应用是很明显的,因为先来的顾客应该先结账,即最早进入队列的人最先付款。现实生活中的这种情况适合使用队列。

在栈中,最后一个入栈的元素是什么?在队列中,最后一个入队的元素是什么?

  • :在栈中,最后一个入栈的元素成为栈顶元素。栈顶元素是唯一可访问的元素,而且最后一个入栈的元素将成为新的栈顶元素。

  • 队列:在队列中,最后一个入队的元素仍然位于队列的队尾,而第一个入队的元素位于队列的队头。队尾元素等待其他元素出队后才能被访问。

描述一种情况,其中栈可以用于解决问题。

  • 情况示例:计算器应用中的表达式求值。当用户输入一个数或运算符时,可以使用栈来存储操作数和运算符。当遇到运算符时,从栈中弹出操作数,执行运算,然后将结果入栈。这样,栈可以帮助跟踪表达式的计算顺序。

注意:确保栈的操作符和操作数的顺序遵循运算符的优先级和结合性规则。

描述一种情况,其中队列可以用于解决问题。

  • 情况示例:任务调度。假设有多个任务需要执行,这些任务按照不同的优先级到达,可以使用队列来调度它们的执行顺序。高优先级任务入队时排在队列前端,低优先级任务排在队列后端。这样,队列可以确保按照优先级顺序执行任务。

注意:确保在任务执行时适时更新队列,以便根据新的任务到达情况进行调度。

在使用栈和队列时,要特别注意遵循它们的特点和规则,以确保正确的数据访问顺序和操作顺序。

猜你喜欢

转载自blog.csdn.net/m0_53918860/article/details/133554546