博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小菜一步一步学数据结构之(五)顺序栈
阅读量:6820 次
发布时间:2019-06-26

本文共 995 字,大约阅读时间需要 3 分钟。

定义

只能在表的一端(栈顶)进行插入和删除运算的线性表

逻辑结构

一对一关系

存储结构

用顺序栈或链栈存储均可,但以顺序栈更常见

栈示意图

运算规则

只能从栈顶运算,且访问结点时依照后进先出(LIFO)或后进后出(FILO)的原则

实现方法

关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同

基本操作

  • 入栈
  • 出栈
  • 读栈顶元素值
  • 建栈
  • 判断栈满
  • 栈空

栈与一般线性表的区别

栈是一种特殊的线性表,它只能在表的一端(栈顶)进行插入或删除运算

** 一般线性 表
逻辑结构 一对一 一对一
存储结构 顺序表、链表 顺序栈、链栈
运算规则 随机、顺序存储 后进先出

它们之间在于运算规则不同

栈顶栈底

我们在平常的程序设计中,如果需要按照保存数据时相反的顺序来使用数据,可以利用栈来实现。

顺序栈的表示

#define MAXSIZE 100typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;

stacksize 指示栈的最大容量;base为栈底指针,它始终指向栈底位置,若base的值为NULL,则表明栈结构不存在;top为栈顶指针,其初值指向栈底,即top=base可作为栈空的标记。每当插入新的栈顶元素时,指针top增加1;删除栈顶元素时,指针top减1.因此,非空栈中的栈顶指针始终在栈顶元素的下一个位置上。

base == top 是栈空的重要标志

栈满时的处理方法

  1. 报错,返回操作系统。

  2. 分更大的空间,作为栈的存储空间,将原栈的内容移入新栈。

初始化

顺序栈

(1)分配空间并检查空间是否分配失败,若失败则返回错误

(2)设置栈底和栈顶指针

S.top = S.base;

(3)设置栈大小

【算法描述】

Status InitStack(SqStack &S){S.base=new SElemType[MAXSIZE];if(!S.base) return OVERFLOW;S.top=S.base;S.stackSize=MAXSIZE;return OK;}

判断顺序栈是否为空

bool StackEmpty(SqStack S){if(S.top == S.base) return true; elsereturn false;}

求顺序栈的长度

int StackLength(SqStack
你可能感兴趣的文章
Vim+cscope+ctags+tags阅读源代码
查看>>
VM虚拟机中Linux扩展磁盘空间的方法
查看>>
微信支付v2开发(11) Native支付
查看>>
localStorage,sessionStorage那些事儿
查看>>
自定义Xadmin
查看>>
jsp页面表单的遍历要怎么写
查看>>
循环引用,看我就对了
查看>>
uwp通用应用重写列表面板控件
查看>>
软件工程——第一周作业
查看>>
浅谈 Python 的 with 语句
查看>>
与Web设计师约会的十个好处
查看>>
PHP实例——判断字符串是否为UTF-8编码
查看>>
jQuery笔记——jQuery选择器实例应用
查看>>
Number Sequence 无算法,靠思想 数学题
查看>>
iPhone6和iPhone6 plus的iOS8设计尺寸参考指南
查看>>
MySQL大表优化方案
查看>>
HDU 3395 Special Fish 费用流(可KM匹配)
查看>>
线性模型(1) —— 多元线性回归
查看>>
ubuntu 系统目录结构
查看>>
【转】Linux/Unix笔记本
查看>>