【数据结构】栈和队列----栈的知识学习

发布于:2022-10-19 ⋅ 阅读:(842) ⋅ 点赞:(0)

脚踏实地海让路,持之以恒山能移

 

栈的知识学习

一、栈的基本概念 

二、栈的顺序存储及基本操作

       1.栈的顺序存储结构

       2.顺序栈的操作

                 初始化

                 入栈操作

                 出栈操作

                 取栈顶元素

                 判断栈是否为空

                 判断栈是否为满

三、栈的链式存储及基本操作

         1.栈的链式存储结构

          2.链栈的操作

                 初始化

                 入栈操作

                 出栈操作

                 取栈顶元素

                 判断栈是否为空

                 链栈的销毁

一、栈的基本概念 

栈是只能在一端进行插入和删除的线性表。允许插入、删除的一端称为栈顶,另一端称为栈底。当栈中没有元素时称为空栈。

栈主要有两个操作:插入和删除。栈的插入操作称为入栈(压栈),栈的删除操作称为出栈(弹栈)。栈的主要特点是”后进先出“,即出栈元素只能是位于栈顶的元素,而入栈元素也只能放在栈顶的位置。因此,栈是一种操作受限的线性表。

如图,栈中的元素按照a1、a2......an的顺序入栈,出栈顺序按照an......a2、a1的顺序出栈

 

二、栈的顺序存储及基本操作

1.栈的顺序存储结构

利用顺序存储方式实现的栈又称为顺序栈。由于栈顶位置会随着入栈和出栈而变化,因此可用一个整型变量来表示当前栈顶的位置,通常称该整型变量为栈顶指针。

顺序栈的类型定义如下:

 ps :我把难懂的英文也注释出来了,这样便于读者朋友们的阅读和理解

栈空时,栈顶指针 top = -1;栈满时,栈顶指针 top = MAXSIZE -1。入栈前,栈顶指针加1;出栈后,栈顶指针减1。

 

2.顺序栈的操作

(1) 初始化

初始化栈就是要构造一个空栈,算法如下:

 (2)  入栈操作

在栈顶插入一个新元素 x,使 x 成为新的栈顶元素,同时栈顶指针发生变化。算法如下:

  (2)  出栈操作

将栈顶元素从栈中删除,同时栈顶指针发生变化。算法如下:

 (4)取栈顶元素

将栈顶元素作为结果返回,栈顶指针不变化。算法如下:

(5) 判断栈是否为空

算法如下:

 (6) 判断栈是否为满

算法如下:

 三、栈的链式存储及基本操作

 1.栈的链式存储结构

利用链式存储方式实现的栈又称为链栈。链栈中的结点采用Node结点类型。由于栈是操作受限的线性表,对栈中元素的插入和删除只能在栈顶进行,因此实现链栈的单链表不需要带头结点。

如图,栈顶指针top就是单链表的头指针。

 链栈的类型定义如下:

 可以用LinkStack定义指针,该指针就代表了一个链栈,如:LinkStack;

2.链栈的操作

(1)初始化

建立一个无头结点的单链表,算法如下:

 (2)入栈操作

在无头结点的单链表中进行表头插入,算法如下:

 (3)出栈操作

在单链表中进行表头结点的删除,算法如下:

 

 

 (4)取栈顶元素

返回栈顶指针所指向结点的数据域,算法如下:

 (5)判断栈是否为空

 (6)链栈的销毁

类似于单链表的销毁函数,需要释放链栈所占用的空间


小结

以上就是最近关于栈的知识学习总结,下期我会出栈的其他运用以及队列的相关知识。希望各位批评指正,我会努力改进完善!

本文含有隐藏内容,请 开通VIP 后查看