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

  • Post author:
  • Post category:其他




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



版权声明:本文为qq_43546676原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。