栈的顺序结构,两栈共享空间与链式结构

  • A+

栈也是一种线性结构

它是一种受限的线性表

用于解决一些特殊的问题

如浏览器的回退功能

各种编辑软件的撤销功能等

它是一种后进先出的数据结构

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

允许插入和删除的一端叫做栈顶(Top),另一端就叫做栈底(bottom)

栈的插入操作叫做进栈,压栈,入栈

栈的删除操作叫做出栈,弹栈


栈的顺序存储结构

用一个数组用来保存栈的数据

用数组的尾部来存放栈顶

(如果用头部存放,那么每次出栈都需要移动数据)

定义一个top变量指向栈顶元素的数组下标


栈的顺序存储结构

初始化数组的大小(栈的大小)

这里没什么好说的


栈的顺序存储结构

入栈操作

①先判断数组(栈)是否已经满了

②如果没有满,则将栈顶指标向后移动一位,指向空位置

③在空位置上填入数据

④栈的长度+1,


栈的顺序存储结构

出栈操作

①判断栈是否为空

②用栈顶指标取出栈顶元素

③删除栈顶元素

④栈顶指标减1,指向下一个元素

⑤栈的长度减1


栈的顺序存储结构

上面这些看看就好了

不难,很容易理解



两栈共享空间

当有两个栈的空间需求有相反关系时,一个栈的增加

另一个栈就会减少

使用这样的数据结构就非常好

栈的顺序结构,两栈共享空间与链式结构


两栈共享空间

定义变量们


两栈共享空间

初始化两个空栈


两栈共享空间

可以参考上面栈的顺序存储结构的入栈操作

这里不同的是栈A是由数组头部向后一直添加

栈B是右数组尾部向前一直添加

两个指标相差一个就说明空间已满


两栈共享空间

同样的就不细说了

两个栈的的出栈方向就与入栈操作方向相反就行了


链式存储结构

定义栈顶为链表的头部

然后就只能在链表的头部进行插入和删除操作

这样就是栈的链式存储结构了

注意_top指向的是栈顶(链表的第一个结点,不是头结点了)

这里不需要头结点了

当_top为null是,则为空栈


链式存储结构

链式结构的进栈操作

①新建结点,赋值数值,记下一个结点为当前的栈顶

②设置当前栈顶为新加结点

③栈的长度+1


链式存储结构

出栈操作

①判断栈是否为空

②得到栈顶结点,取出栈顶的数值

③设置栈顶为当前栈顶的下一个结点

④栈的长度-1


链式存储结构

(请无视最后一条注释!!!)
自己看吧

就是不停的取出栈顶,然后删除

直到栈顶为空时


测试栈的顺序存储结构

结果
栈的顺序结构,两栈共享空间与链式结构


测试两栈共享空间

结果
栈的顺序结构,两栈共享空间与链式结构


测试栈的链式存储结构

结果
栈的顺序结构,两栈共享空间与链式结构

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: