数据结构0401

Posted summervan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构0401相关的知识,希望对你有一定的参考价值。

栈的定义:栈是限定仅在表尾进行插入和删除操作的线性表

允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈,栈又称为后进先出(last in first out)的线性表简称lifo结构(好比子弹弹匣,后装填的先打出去)

注意事项:栈元素具有线性关系,因为栈是一个特殊的线性表,定义里说的表尾是指栈顶不是栈底,删除和插入操作只能在栈顶,栈底是固定的,最先进栈的只能在栈底

栈的插入操作叫进栈也叫压栈,入栈(push)。 栈的删除操作叫出栈(pop)

进栈出栈的变化

并不是所有最先进栈的元素都只能是最后出栈,在不是所有元素都进栈的情况下,先进去的元素也可以出栈,只要保证是栈顶元素就行

例:有三个整形数字1 2 3 依次进栈

1 1 2 3依次进栈,然后321出栈 出栈次序321

2 1进1出2进2出3进3出 进一个出一个 出栈次序123

3 1进 2进 2出 1出 3进3出 出栈次序213

4 1进 1出 2进 3进 3出 2出 出栈次序132

5 1进2 进 2出 3进 3出 1出 出栈次序231 

当然312这样的出栈次序是不可能的

栈的顺序存储结构——进栈操作

栈满返回异常,栈顶指针加一,将新元素赋值给栈顶空间

栈的顺序存储结构——出栈操作

栈顶指针-1,将要删除的栈顶元素返回

一个栈的缺陷:必须事先确定数组存储空间大小,万一不够用了,就需要编程手段来扩展数组容量,但对于两个相同类型的栈。可以做到最大限度地利用先开辟出来的空间进行操作

数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的起始端,下标0处,另一个栈为数组的末端,下标为数组长度n-1处,如果两个栈增加元素就是两端点向中间延伸,只要两个栈的栈顶不见面就可以一直使用 

top1 + 1 == top2时则栈满(top为栈下标)

一般只有当两个栈的空间需求有相反关系是,也就是一个栈增长时另一个在缩短(切记相同类型的)

以上是关于数据结构0401的主要内容,如果未能解决你的问题,请参考以下文章

VC++ 错误:错误 C1083:无法打开源文件:'=0x0401':没有这样的文件或目录

pylint 误报 E0401 在使用 venv 时在 vscode 中导入错误

程序员面试金典-0401-节点间通路

0401-阅读《构建之法》第4章

0401《构建之法》第四章读后感

LeetCode 0401. 二进制手表 - 两种方法详解