【408数据结构与算法】—栈的抽象数据类型定义(十)

简介: 由于栈本身就是线性表,于是栈也有顺序存储和链式存储两种实现方式

一、栈的抽象数据类型的定义

2345_image_file_copy_207.jpg

2345_image_file_copy_208.jpg

二、栈的表示和实现

由于栈本身就是线性表,于是栈也有顺序存储和链式存储两种实现方式

  • 栈的顺序存储—顺序栈
  • 栈的链式存储—链式栈

存储方式:同一般线性表的顺序存储结构完全相同,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,栈底一般在低地址端。

  • 附设top指针:指示栈顶元素在顺序栈中的位置
  • 另设base指针、指示栈底元素在顺序栈中的位置
  • 另外,用stacksize表示栈可使用最大的容量

空栈:base==top是栈空标志

栈满:top-base==stacksize

2345_image_file_copy_209.jpg

栈满时的处理方法:

  • 报错,返回操作系统
  • 分配更大的空间,作为栈的存储空间,将原栈的内容移入新栈

2345_image_file_copy_210.jpg

使用数组作为顺序存储方式的特点:简单、方便、但易产生溢出(数组大小固定)

  • 上溢(overflow):栈已经满,又要压入元素
  • 下溢(underflow):栈已空,还要弹出元素

🧨上溢是一种错误,使问题的处理无法解决,而下溢一般认为是一种结束条件,即问题处理结束

三、顺序栈的表示和实现

2345_image_file_copy_211.jpg

2345_image_file_copy_212.jpg

2345_image_file_copy_213.jpg

四、顺序栈的初始化

2345_image_file_copy_214.jpg

2345_image_file_copy_215.jpg

五、判断顺序栈是否为空

2345_image_file_copy_216.jpg

2345_image_file_copy_217.jpg

六、求顺序栈的长度

2345_image_file_copy_218.jpg

七、清空顺序栈

2345_image_file_copy_219.jpg

八、销毁顺序栈

2345_image_file_copy_220.jpg

九、顺序栈的入栈

  • 判断是否栈满,若满则出错(上溢)
  • 元素 e压入栈顶
  • 栈顶指针加1

2345_image_file_copy_221.jpg

代码实现:

2345_image_file_copy_222.jpg

十、顺序栈的出栈

  • 判断是否栈空,若空则出错(下溢)
  • 获取栈顶元素e
  • 栈顶指针减1

2345_image_file_copy_223.jpg

代码实现:

2345_image_file_copy_224.jpg


相关文章
|
4月前
|
存储 安全 C语言
C语言抽象数据类型栈的定义讲解
C语言抽象数据类型栈的定义讲解
51 0
|
10月前
|
存储 编译器
初阶数据结构(五) 栈的介绍与实现
初阶数据结构(五) 栈的介绍与实现
65 0
|
12天前
|
存储 C语言
数据结构基础详解(C语言): 栈与队列的详解附完整代码
栈是一种仅允许在一端进行插入和删除操作的线性表,常用于解决括号匹配、函数调用等问题。栈分为顺序栈和链栈,顺序栈使用数组存储,链栈基于单链表实现。栈的主要操作包括初始化、销毁、入栈、出栈等。栈的应用广泛,如表达式求值、递归等场景。栈的顺序存储结构由数组和栈顶指针构成,链栈则基于单链表的头插法实现。
|
3月前
数据结构初阶 栈
数据结构初阶 栈
25 1
|
3月前
|
算法
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
26 0
|
4月前
|
存储 算法
【408数据结构与算法】—栈的抽象数据类型定义(十)
【408数据结构与算法】—栈的抽象数据类型定义(十)
|
算法
数据结构第六章分讲、栈之逆波兰表达式
(ReverseNotation,RPN,或逆波兰记法),也叫(将写在之后)。
109 0
|
C语言 计算机视觉
栈的概念及结构(C语言实现栈)
栈的概念及结构(C语言实现栈)
102 0
|
存储
<栈>的概念&结构&实现【C语言版】
<栈>的概念&结构&实现【C语言版】
73 0
|
缓存
初阶数据结构 栈
初阶数据结构 栈
65 0
初阶数据结构 栈