【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


相关文章
|
6月前
|
存储 安全 C语言
C语言抽象数据类型栈的定义讲解
C语言抽象数据类型栈的定义讲解
60 0
|
12月前
|
存储 编译器
初阶数据结构(五) 栈的介绍与实现
初阶数据结构(五) 栈的介绍与实现
73 0
|
2月前
|
存储 C语言
数据结构基础详解(C语言): 栈与队列的详解附完整代码
栈是一种仅允许在一端进行插入和删除操作的线性表,常用于解决括号匹配、函数调用等问题。栈分为顺序栈和链栈,顺序栈使用数组存储,链栈基于单链表实现。栈的主要操作包括初始化、销毁、入栈、出栈等。栈的应用广泛,如表达式求值、递归等场景。栈的顺序存储结构由数组和栈顶指针构成,链栈则基于单链表的头插法实现。
331 3
|
5月前
数据结构初阶 栈
数据结构初阶 栈
27 1
|
5月前
|
算法
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
31 0
数据结构入门(C语言版)线性表中顺序表介绍及接口实现(下)
在顺序表中,头插相对于尾插来说就不是那么简单了,这里主要是让顺序表整体向后移动,再在头部插入数据。
|
6月前
|
存储 算法
【408数据结构与算法】—栈的抽象数据类型定义(十)
【408数据结构与算法】—栈的抽象数据类型定义(十)
|
算法
数据结构第六章分讲、栈之逆波兰表达式
(ReverseNotation,RPN,或逆波兰记法),也叫(将写在之后)。
128 0
|
存储 机器学习/深度学习 算法
数据结构入门(C语言版)线性表中顺序表介绍及接口实现(上)
不论在程序员的工作上,还是在学习或是考研上,数据结构都是一门非常重要且值得我们一直研究探索的学科,可以说数据结构和算法就是编程的核心。OK,接下来我们来到数据结构的入门第一步就是学习线性表,接下来由作者来详细介绍数据结构第一章线性表。
|
存储 C语言
C语言之 数据结构入门——顺序表的构造
C语言之 数据结构入门——顺序表的构造
224 0