数据结构3-栈的知识点整理

1. 栈的定义和基本操作

1.1 栈的定义

  1. 栈(Stack):是只允许在一端进行插入或删除操作的线性表。也就是栈是一种特殊的线性表。
  2. 栈的特点:后进先出LIFO(last in first out)
  3. 栈的一些相关名词:栈顶、栈底、空栈。
    在这里插入图片描述

1.2 栈的基本操作

在这里插入图片描述

1.3 栈的分类

* 物理结构的不同使得栈的种类不同
	1. 顺序结构
		1. 静态顺序栈
		2. 动态顺序栈
	2. 链式结构
		1. 静态链栈
		2. 动态链栈

1.4 栈的两种实现

  1. 栈顶指针指向栈顶元素。
  2. 栈顶指针指向栈顶元素的下一个位置。

在这里插入图片描述
一般top指向当前栈顶元素的实现方式更常见。

注意:这两种方式在进行增、删、查的时候,操作也不一样。注意是++top还是top++的问题。

1.5 小结

在这里插入图片描述

2. 静态顺序栈

2.1 基本操作

2.1.1 初始化操作以及判断栈是否为空

在这里插入图片描述

注意:由于使用的是静态数组,所以,销毁栈的操作不需要我们手动进行销毁,交给程序销毁。

2.1.2 进栈操作

在这里插入图片描述

2.1.3 出栈操作

在这里插入图片描述

2.1.4 读取栈顶元素

在这里插入图片描述

2.2 共享栈

共享栈就是两个栈共用同一块内存空间,这块空间的两端分别是两个栈的栈底,如下图所示:
在这里插入图片描述

2.3 小结

在这里插入图片描述

3. 动态链栈

3.1 基本操作

3.1.1 初始化操作

在这里插入图片描述
和链表的定义一模一样,实际上,链栈就是限制链表只能在一头进行增加和删除元素。通常,我们取头部的那一端,也就是在头节点的后面进行添加和删除操作,这样就形成了链栈。

3.1.2 往链栈顶添加元素

在这里插入图片描述
实际上,链栈就是限制链表只能在一头进行增加和删除元素。通常,我们取头部的那一端,也就是在头节点的后面进行添加和删除操作,这样就形成了链栈。
代码描述如下:
在这里插入图片描述

注意:这里链栈的举例使用的是带头结点。

3.1.3 链栈顶弹出元素

链栈弹出顶部元素过程图:
在这里插入图片描述
代码描述:
在这里插入图片描述

3.1.4 查看栈顶元素

在这里插入图片描述

3.2 两种实现方式

一种是带头结点,一种是不带头结点:
在这里插入图片描述
我们知道链表一般带头节点,是为了在头指针后面添加或删除元素与其他位置统一。但是,在链栈中,不会在其他地方插入或删除元素,所以,我们一般采用不带头结点的方式去实现链栈,这样删除、添加操作更加简单,并且更加节省空间。

3.3 小结

在这里插入图片描述

4. 栈的代码实现(C语言)

https://blog.csdn.net/qq_43546676/article/details/105974182

猜你喜欢

转载自blog.csdn.net/qq_43546676/article/details/105876415