策略

设计一个顺序栈,附设的top指针有两种策略:

  • 指向当前栈顶元素
  • 指向栈顶上方空位

借助一篇文章深入分析二者的异同。

top指向栈顶

首先令top指向当前栈顶元素,这样进来一个新的元素时,新元素不能占据当前top指向的位置,需要把top指针挪一挪,一般是top++,但不排除题目中设计的是top–,不管怎样,都是把top指针往栈外拓展一个空位,虚位以待新成员。
出去一个新元素时,取出当前栈顶元素,也就是top值不能先变化,因为top表示的就是栈顶元数,取栈顶元素必须借助于top。

再看特殊情况:空栈时top值是什么?
这个很容易倒推:栈中有一个元素时,top = 0,那么栈空时,top = -1。
所以top = -1也是栈空的标识。

简单说,策略就是:进栈时top先动以拓展位置,出去时先取数据再动top。这样的策略就可以锁定:top指向的是栈顶结点了。

top指向栈顶上方空位

这种方式下,我们看一般情况下的插入:因为top指向的是当前栈顶的上方空位置,进来新朋友时,不必先拓展位置,因为早就未雨绸缪准备好了,直接放上来即可!top这个位置进来新的元素后,它就不能再招待这个新朋友了,它还需要准备下一次的未雨绸缪呢!因此,是先进数据,再更新top值。

而出栈元素的时候,就该明确,top并没有指向栈顶元素,栈顶元素必须借助top才能抓住,因此,top先收缩,可能是++,也可能是–,这不是核心。

那么空栈时候,top = 0,表示指向-1位置的上方。
简单说:进栈时,数据先进后调节top指针,出栈时先调节top指针,再取数据,便是:top指向的是栈顶外部的策略了!

应当看出这里的pattern,进出的指针更改顺序都是相反的。即:进来先改出去后改,反之亦然。
但是背后的逻辑也是很值得思考的。

在组成原理中的运用

以上是在数据结构中的分析,下面对应的例题是在组成原理中的运用。

堆栈寻址中,设A是累加器,SP是堆栈指示器,MspM_{sp}是SP指示的栈顶单元。如果进栈操作是:(A)−>Msp,(SP)−1−>SP(A) -> M_{sp}, (SP) - 1 -> SP ,那么出栈的动作应该是:(SP)+1−>SP,(Msp)−>A(SP) + 1 -> SP,(M_{sp}) -> A。

有了上面的铺垫,这个几乎不用多说。但是请看题中有一句话很有错误的引导作用,让你相信了SP指向的是栈顶单元!
MspM_{sp}是SP指示的栈顶单元
但是一分析,进栈时候,数据先进,位置后动,表示的是SP指向的是栈顶上方的空位。
所以,出栈时必须是先收缩SP,这里的外推是(SP)−1(SP)-1,那么自然收缩就是相反的(SP)+1(SP)+1,再把数据交给MspM_{sp}.

以上。

栈--进栈,出栈指针修改的顺序问题相关推荐

  1. C语言 数据结构 顺序栈的实现 进栈 出栈 初始化

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.代码实现 前言 顺序栈是栈的顺序实现.顺序栈是指利用顺序存储结构实现的栈.采用地址连续的存储空间(数组)依次存储栈 ...

  2. c语言出栈入栈指针的管理,设计顺序栈有关入栈和出栈的操作算法

    问题描述: 设有两个栈s1.s2都釆用顺序栈方式,并且共享一个存储区[0, -, maxsize-1],为了尽量利用空间,减少溢出的可能,可釆用栈顶相向.迎面增长的存储方式.试设计s1.s2 有关入栈 ...

  3. c语言堆栈基本代码入栈出栈_c语言的简单的进栈出栈

    这个代码运行时只能输入4个以内的数有输出4个以上就没有输出了求大神看看#include#include#defineStack_Size50typedefstructSeqstack{intelem[ ...

  4. 【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )

    文章目录 一.不同类型矩阵变换先后顺序 二.渲染前不设置单位阵 三.矩阵的压栈和出栈原理分析 四.矩阵的压栈和出栈代码示例 五.相关资源 一.不同类型矩阵变换先后顺序 对 OpenGL 中的 模型视图 ...

  5. 【C++】【数据结构】顺序栈的基本操作(初始化、入栈、出栈、取栈顶元素、遍历输出栈)的算法实现附全代码

    C++实现顺序栈的算法+步骤(附全代码): 使用c++完成数据结构顺序栈的基本操作,包括(初始化.入栈.出栈.取栈顶元素.遍历输出栈等),可直接编译运行. 顺序栈的定义如下: #define MAXS ...

  6. java顺序栈_顺序栈的基本操作(入栈和出栈)

    顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...

  7. 数据结构:顺序栈基本操作(入栈和出栈)C语言详解(转载)by解学武

    本文为解学武教程的免费章节 什么是顺序栈 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如 ...

  8. 顺序栈基本操作(入栈和出栈)C语言详解

    #include <stdio.h> #include <stdlib.h> /*顺序栈基本操作(入栈和出栈)C语言详解栈的具体实现(1)顺序栈(2)链栈栈的应用(1)回退 ( ...

  9. 栈的入栈和出栈的顺序规律

    栈的入栈和出栈的顺序规律是先进后出,所以出栈的可能数目跟入栈的可能排列数目是一致的.a的出入有2中可能,b的出入有2种可能,c的出入有2种可能,d只需要关系入,只有一种可能.所以出栈方式数为2*2*2 ...

最新文章

  1. BOS中常用方法和类
  2. 树莓派python编程小车_python3实现网页版raspberry pi(树莓派)小车控制
  3. Flickr 的开发者的 Web 应用优化技巧(转)
  4. 语音跟踪:信号分解、锁相、鸡尾酒会效应、基于PR的信号分离
  5. 前后落差大用什么词语_语文考题一共有五类:汉字类、词语类、句子类、阅读类、作文类,如果基础扎实,答题技巧弄懂了,哪一类都能拿高分!...
  6. 4.云计算和大数据时代网络揭秘-安全的网络通道-网络加密
  7. 又到一年“粽子节”,快来测测你包的粽子颜值几分
  8. 1013.clion配置快捷提示模板
  9. 9.2. FreeSWITCH
  10. 格式化Mac硬盘---DoYourData Super Eraser安全、快速
  11. Atitit 面试流程法 艾提拉总结 增加企业黑名单制度,出去前核对黑名单 免得白跑 增加白名单制度,统计分析号面试的企业,垃圾企业 中等分类 1.面试提前给指导人参考 具体分析企业性质 产
  12. 在Android系统中,F2FS 文件系统问题分析步骤
  13. 2020版PS基础入门视频教程全集
  14. 离线数仓03-数仓分层业务逻辑
  15. android 自定义相机 黑屏,Android自定义照相机Camera出现黑屏的解决方法
  16. java 不登录购物车_java-没有用户登录时存储购物车(playframework疑问)
  17. 人工智能 —— 人工智能发展大事件
  18. 模块度计算python代码_转:模块度(Modularity)与Fast Newman算法讲解与代码实现
  19. 欧拉-伯努利梁横向振动2
  20. Win10应用商店不能更新软件怎么办?

热门文章

  1. Labview生成三维曲面 | 花瓶
  2. 树莓派模拟电路_基于树莓派的热电偶测量模块 MCC 134
  3. wordpress 字符串翻译日期_WordPress强大搜索功能如何实现?安装Ivory Search插件
  4. 2021计算机科学调剂,2021北京科技大学计算机科学与技术专业接收调剂研究生的通知...
  5. linux path_lookup,Linux虚拟文件系统(4)-- 路径名查找
  6. OpenCV-Python实战(番外篇)——OpenCV实现图像卡通化
  7. 试用期java_Java试用资源
  8. jqueryui时间插件_jQueryUI工具提示插件
  9. android数据绑定_Android数据绑定
  10. 文件io(一)--unix环境高级编程读书笔记