一、栈的顺序存储结构

1.基本概念

栈顶就是表尾。

栈顶是栈插入和删除的地方。

栈就是只允许在表尾进行添加或删除,是顺序存储结构线性表的特例或者说简化。

为什么说是简化呢?相对于顺序存储结构来说栈只允许在表尾插入和删除,而顺序存储结构线性表是可以在任何位置插入和删除的。所以简化了,我固定位置了。

栈或者队列是固定插入和删除的位置的顺序存储结构的线性表。

具体区分:

栈是固定一端的位置进行插入和删除的顺序存储结构的线性表。

队列是将插入和删除分在两端的顺序存储结构的线性表。

队列:在一端添加,在另一端删除。

2.栈的生长方向

假如栈的长度为n,则数组下标范围为0 ~(n-1)

向上生长:入栈时,栈顶元素下标递增,栈底是数组元素0。空栈的判断一般是栈顶指针是否为-1,当然也有另一种栈的实现方法就是以0为空栈的判断依据。

向下生长:入栈时,栈顶元素下标递减,栈底是数组元素n-1。空栈的判断一般是栈顶指针是否为n,当然也有另外一种栈的,实现方法是以n-1为空栈的判断依据。

因为向上生长的栈,入栈1个元素时,栈顶是元素0,空栈时-1;

而向下生长的栈,入栈1个元素时,栈顶为元素n-1,那空栈时就是n了。

第一,向上生长方向,入栈时是递增方向,出栈时是递减。即递增入栈,递减出栈。

(1)向上生长方向的第1种实现方法。——栈顶本身指向有出栈入栈的数据,它是出栈入栈的最后一个数据指向,本身指向出栈入栈的数据。

以栈顶指向-1为空栈,以栈顶指向n-1为栈满。

它入栈push思路:先判断是否栈满(栈顶为n-1),满的话就返回错误。栈没满,栈顶先自增1,再把数据写入栈里。

它出栈pop思路:先判断是否空栈(栈顶为-1),空栈了就没啥可出了,返回错误。否则,先把栈顶内容读出,栈顶指针再自减1。

(2)向上生长方向的第2种实现方法。——数据在栈顶下面,每次入栈出栈栈顶指向事屋顶一样,屋顶下面才是入栈出栈的数据,栈顶本身的指向只是个界限。

以栈顶指向0为空栈,以栈顶指向n为栈满。

它入栈push思路:先判断是否栈满(栈顶为n),满的话就返回错误。栈没满,先把数据写入栈里,之后栈顶才自增1。

它出栈pop思路:先判断是否空栈(栈顶为n),空栈了就没啥可出了,返回错误。否则,栈顶指针先自减1,再把栈顶内容读出。

第二向下生长方向n-0。递减入栈,递增出栈。

以栈顶指向n为空栈,以栈顶指向0为栈满。 它入栈push思路:先判断是否栈满(栈顶为0),满的话就返回错误。栈没满,栈顶先自减1往下移,再把数据写入栈里。 它出栈pop思路:先判断是否空栈(栈顶为0),空栈了就没啥可出了,返回错误。否则,先把栈顶内容读出,栈顶指针再自增1。

以上情况如下图。

当然,还有下面这种情况:

三、链栈

链栈不需要头结点的。

栈顶在链表表头,也就是链表的第一个节点。

3.1有个问题

问题:形参linkstack *S,这个传入之前肯定要定义一个栈顶节点,这个就固定不变了,之更新栈顶top指针就完事了,假如是linkstack a,那么传入push(&a,3),在传入之前是不是要初始化a?

答:要初始化为0。比如

linkstack a={0,0};

push(&a,3);

再问:为啥?linkstack 是个结构体,里面有个链表节点的指针的,这个链表节点的指针变量要赋为0?那这个链表节点指针为零,那它又是个结构体内部有数据域和指针域,也需要全赋为0吧?

答:只是一个指针,地址。指针是一个存储单元,4个字节

答:我明白了,

linkstack a={0,0};

虽然linkstack是个结构体,但是里面就是2个元素:一个是地址变量(指针),一个计数(普通变量)。

定义a的目的是保存链栈的栈顶指针,也就是固定这个a来保存链栈的头结点,那么初始化为0,是指链栈的栈顶的指针为空,就是目前这个链栈为空么,没有链表,所以栈顶指向为空。——还是指针没学好。

3.2顺序栈和链栈

顺序栈和链栈的出栈入栈的时间复杂度都为O(1),因为没有循环。

在空间上,若空间确定就用顺序栈,若不确定就用链栈。

如果使用过程中元素变化不可预料,有时很小,有时非常大,那么最好是用链擒,反之,如果它的变化在可控范围内,建议使用顺序棋会更好一些。

大话数据结构第四章栈的基本概念与出栈入栈操作相关推荐

  1. 大话数据结构第四章栈的应用

    一.斐波契那数列 就是下一项的值等于相邻的上两项元素之和. 这个规律就是斐波契那数列.由此,我知道这个世界是少不了规律的.就算没有规律也要用规律来逼近描述无规律的现象. 迭代和递归的区别:迭代是循环, ...

  2. 大话数据结构 第七章 图(二) 最小生成树、最短路径、拓扑排序、关键路径算法

    大话数据结构 第七章 图(二) 最小生成树.最短路径.拓扑排序.关键路径算法 最小生成树 定义 Prim算法 Kruskal算法 最短路径 Dijkstra算法 Floyd算法 拓扑排序 AOV网 拓 ...

  3. 《大话数据结构》样章试读

    <大话数据结构>样章试读 各位童鞋,<大话数据结构>从写作到出版,虽然经历了一些坎坷,但终于还是在今天正式在一些网店发售了.现在提供两章的完整版试读PDF文件,希望能给您有所 ...

  4. 带父节点的平衡二叉树_学习数据结构--第四章:树与二叉树(平衡二叉树)

    第四章:树与二叉树(平衡二叉树) 1.平衡二叉树 平衡二叉树:AVL,任意结点的平衡因子的绝对值不超过一. 平衡因子:左子树高度 - 右子树高度 如上图二叉树,是否是平衡二叉树? 可以把所有结点的平衡 ...

  5. c#二叉树 取叶子节点个数_数据结构第四章:树与二叉树(二叉树的概念、性质、特殊二叉树)...

    第四章:树与二叉树(二叉树的逻辑结构) 1.二叉树 二叉树是树结构的一种,故二叉树也是逻辑结构. 二叉树:二叉树是n(n≥0)个结点的有限集合. · 1)n=0时,二叉树为空; · 2)n>0时 ...

  6. 广工anyview数据结构第四章(2021.12)

    广工anyview数据结构习题第四章, 在学习过程中部分题目参考了Giyn .戮漠.雁过留痕等大佬的代码,在此感谢. 题目解法不是最优解,但希望能给大家有所启发.同时也发了文档资源,需要可自取. 目录 ...

  7. 算法与数据结构 第四章 树与二叉树

    第四章树 一.选择题(20分) 1.在下述结论中,正确的是: (    ) ① 只有2个结点的树的度为1: ② 二叉树的度为2: ③ 二叉树的左右子树可任意交换: ④ 在最大堆(大顶堆)中,从根到任意 ...

  8. 大话数据结构 摘录 第一章 数据结构绪论

    文章目录 启示:数据结构 学习数据机构的重要性 数据结构引发的案例 数据结构的起源 程序设计=数据结构+算法 基础概念与术语 数据 数据元素 数据项 数据对象 数据结构 数据结构:是相互之间存在一种或 ...

  9. C语言数据结构-第四章 串-电大同步进度

    第四章 串 字符串是计算机处理的最基本的非数值数据.字符串是一种特定的线性表,其特殊性就在于组成线性表的每个元素就是一个单字符. 本章给出: l         串的基本概念 l         串的 ...

最新文章

  1. linux 查看ntp版本号_如何让Linux时间与internet时间同步(CentOS)?
  2. 神策数据李文浩:企业服务如何破局增长?
  3. 总结一下qsort()函数的使用与注意
  4. os模块:与操作系统交互的一个接口
  5. 洛谷 P1939 【模板】矩阵加速(数列)
  6. 嵌入式成长轨迹37 【Zigbee项目】【CC2430基础实验】【自动闪烁】
  7. 容斥原理---概念介绍
  8. idea抽取重复方法快捷键_使用 IDEA 几分钟就重构了同事800 行quot;又臭又长quot; 的类!真香!...
  9. c++学习笔记(八)- map
  10. 导弹拦截(NOIP2010 普及组第三题)
  11. 经济实惠:组建P2P电影服务器
  12. 高斯克吕格投影中有关带号与经度的关系
  13. java语言c语言表情包_c语言表情包 - c语言微信表情包 - c语言QQ表情包 - 发表情 fabiaoqing.com...
  14. 获取全国所有省份,市区县的中文名和英文名
  15. 酒店PMS变革之路:开放互联、模块化配置
  16. win10怎么快速锁定计算机,win10怎么快捷键锁定电脑_win10一键锁屏快捷键是什么-win7之家...
  17. 《Microduino实战》——1.3 开源软件
  18. 采用顺序结构存储串,设计实现求串S和串T的一个最长公共子串的算法。
  19. 离线地图二次开发(支持所有地图源)
  20. mathtype一步将word自带的公式编辑器的公式换成mathtype类型

热门文章

  1. 软考倒计时7天:题目书中的易混点
  2. Virtual Machine Manager 2012 R2利用服务模板部署DC
  3. Linux中安装.rpm、.tar和.tar.gz或.tgz包
  4. DataList的使用,Repeater
  5. Service Worker的应用
  6. android如何处理大图片大小,android-如何将图像大小减小到1MB
  7. openlayers之EPSG3857
  8. spark中dataframe解析_Spark 结构流处理介绍和入门教程
  9. 深度学习笔记(40) YOLO
  10. php foreach 循环 判断index 小于多少_Go 与 PHP 的语法对比