| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 用数组模拟栈和队列 -> 正文阅读 |
|
[数据结构与算法]用数组模拟栈和队列 |
零 前言继上篇用数组模拟链表,本篇讲一讲如何用数组模拟栈和队列。 原因其实也类似,实现方便,可以避免内存泄漏而且方便调试。最重要的效率原因,如果用
一 栈栈(stack)是一种受到限制的线性表,元素的插入和删除只能在同一端进行。 允许插入和删除的称为栈顶(top),另一端叫做栈底(bottom)。向一个栈中插入新元素称为入栈(push),从一个栈中删除元素称为出栈(pop)。 我们可以想象一堆摞着的盘子,我们每次拿要先从最上面的一个拿起,放也要放到最上面,这样的操作特性可以概括为后进先出(LIFO last in first out)。 实现我们用一个 代码非常简单,为了便于理解,我还是画了张图:
栈的应用在计算机中到处可见,比如我们每天写代码调用函数都会用到程序调用栈,调用函数时我们会将下个指令的地址存在堆栈中,执行完后取出回到原来的程序。再比如表达式求值问题,二叉树的遍历,图的深度优先搜索,递归调用等等等等。 二 队列同栈一样,队列(queue)同样受到限制,只允许在表的一段进行插入,而在另一端删除元素。 允许插入的一端叫队尾(rear),允许删除的一端叫队头(front)。向队列中插入元素称为入队(enqueue),删除元素称为出队(dequeue)。 可以想象一个排队出门的场景,排在前面的人就是最先出去的人,新来的则需要在队尾排队,可以概括为先进先出(FIFO first in first out)。 实现用两个指针
队列其实就是生活中“先来后到”的理念,排队买东西,挂号系统等等都体现了队列的结构。计算机中常用于操作系统,在多用户环境下尤为重要。例如,多个用户同时申请打印机资源,但由于打印机一次只能打印一个文档,我们就需要一个队列来存储用户提交的打印作业。 三 总结栈知识点题库 - 力扣(LeetCode) (leetcode-cn.com) 队列知识点题库 - 力扣(LeetCode) (leetcode-cn.com) 栈和队列我们只要记住它们存储数据的特点为后进先出和先进先出。算法实现上,为了提高效率,采用数组模拟栈和队列的方式。 二叉树遍历和表达式求值一般用栈实现,而队列最常见的算法题便是滑动窗口,这两天会更新有关滑动窗口的内容。 都看到这里了,点个赞呗(疯狂暗示)😆 有任何问题都可以评论留言~ 可以互相关注交流 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:22:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |