| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构——栈(概念讲解、代码实现及应用) -> 正文阅读 |
|
[数据结构与算法]数据结构——栈(概念讲解、代码实现及应用) |
? 一、栈的定义和特征 ? ? ? ? 栈是n个元素的有限序列,且只能在一端插入和删除的线性表,当n为0时,栈为空栈 ? ? ? ? 下面我们来简单的分析一下栈的特征:假设我们向空栈中依次插入元素a1到an,那么由定义可知,删除这些元素的顺序只能是从an到a1,这说明栈具有后进先出(先进后出)的特征,也可以称为“first in last out”。 二、栈的某些术语和常用运算函数 ????????栈顶:指的是插入和删除元素的一侧,也称为top。 ? ? ? ? 栈底:栈的另一端,也叫bottom ? ? ? ? 入栈:也叫压栈,指的是向栈中插入元素 ? ? ? ? 出栈:也叫弹栈,指的是从栈顶删除元素 ???????? ????????以上仅仅是对于栈的抽象描述,但在实际解决问题中,我们需要通过实现栈来完成一些需要用到的运算,则需要定义好有关栈的函数。在实际编写中,我们需要写一个C++的类来抽象出栈,即class stack,在stack内部进行基本运算,也就是内部成员函数的编写。对于栈的实现,有链式储存和顺序储存两种方式。在此讨论顺序储存。那么大家知道,顺序存储的本质其实就是通过数组开辟连续的一串储存空间,因此需要在stack的私有成员中定义cnt作为计量当前栈中元素个数的变量,定义数组data[maxlen]储存栈中元素。其基本运算如下: ? ? ? ? 初始化:即所谓的构造函数,需要将栈设置为空,也就是cnt为0 ? ? ? ?判断栈空和满:作为bool型函数,判空则仅需判断cnt是否为0,判满仅需判断cnt是否等于manlen-1 ? ? ? ?取栈顶: 在取栈顶元素时,首先应该判断栈是否为空,不为空才能取,否则应给出相应标识 ? ? ? ?入栈:将元素放入栈中的前提是栈不满,因此需先进行判断 ? ? ? ?出栈:将栈顶删除的前提是栈不为空,因此也需先进行判断
? 三、栈的常见应用 ? ? ? ? 例1:算法完成将十进制转换为八进制 ? ? ? ? 解:首先我们需要了解的知识是,将十进制转化为八进制所采用的的方法是“除取余数法”,即每次用8除以十进制数N所得的余数作为八进制数的各位,将相除所得的商的整数部分作为新的N重复计算直到N为0. ? ?于是根据栈后入先出的特征,可得如下代码:
栈在表达式计算中的应用 ????????其基本思想如下: ? ? ? ? 1、用两个栈分别保存操作数和运算符,不妨称之为操作数栈和运算符栈 ? ? ? ? 2、依次扫描表达式中的各基本符号(每个操作数和运算符均看做一个基本符号),并对扫描结果进行处理 ? ? ? ? (1)如果扫描的基本符号是操作数,则将此操作数直接放入到操作数栈中,然后继续扫描其后续符号 ? ? ? ? (2)如果扫描的基本符号是运算符,如果栈顶运算符的优先级低于当前所扫描的运算符的优先级,则栈顶运算符不能进行运算,将当前扫描的运算符入栈,然后继续扫描后续符号。如果栈顶运算符的优先级高于当前所扫描的运算符的优先级,此时取出操作数栈顶的两个元素进行局部运算,之后将结果再进入到此栈中。 ? ? ? ? 3.如果此时运算符栈不空,需要继续以栈顶运算符对当前运算符重复上述操作。 基本思路图解如下: ? ? ?????????这样就可以通过栈来实现计算器的基本功能,如果你还想要一个漂亮的可视化界面,则还需要用到Qt等相关知识,相关博客链接:https://blog.csdn.net/sjl20021006/article/details/117400261?spm=1001.2014.3001.5502 ? ? ? ? ? 以上就是我对栈的基本理解和一些解释啦,希望对读者能有帮助。 ? ? ? ? 希望大家点个赞,你们的赞是我创作的动力! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 17:34:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |