IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 程序员“修炼成神”的必经之路——数据结构(第3章 栈和队列) -> 正文阅读

[数据结构与算法]程序员“修炼成神”的必经之路——数据结构(第3章 栈和队列)

目录

前言

一、栈

1.栈的定义及其运算

? ? 1)栈的定义

? ? 2)栈的运算

2.栈的存储表示

? ? 1)栈的顺序存储结构

? ? 2)栈的链式存储结构

二、队列

1.队列的定义及其运算

? ? 1)队列的定义

? ? 2)队列的运算

2.顺序循环队列

3.链队列

小结


前言

? ? ? ?本篇文章给小伙伴们分享数据结构的第3章——栈和队列,本文主要介绍栈和队列的基本概念,不会涉及复杂的算法和代码。栈和队列是非常重要的两种线性结构,应用也非常广,所以建议小伙伴们最好要掌握这部分内容。


一、栈

1.栈的定义及其运算

? ? 1)栈的定义

???????栈是限定在表的一端进行插入和删除运算的线性表,通常将插入、删除的一端称为栈顶(top),另一端称为栈底(bottom)。

???????根据栈的上述定义,栈的元素只能按照后进先出的原则修改。因此,栈又称为后进先出的线性表,简称LIFO表。

? ? 2)栈的运算

? ? 栈的运算主要有以下几种:

  1. 置空栈 InitStack(&S):构造一个空栈S。
  2. 判栈空 StackEmpty(S):若栈S为空栈,则返回TRUE,否则返回FALSE。
  3. 判栈满 StackFull(S):若栈S为满栈,则返回TRUE,否则返回FALSE。
  4. 进栈(又称入栈或插入)Push(&S,x):将元素 x 插入S栈的栈顶。
  5. 退栈(又称出栈或删除)Pop(&S):若栈S为非空,则将S的栈顶元素删除,并返回栈顶元素。
  6. 取栈顶元素 GetTop(S):若S栈为非空,则返回栈顶元素,但不改变栈的状态。

2.栈的存储表示

? ? 1)栈的顺序存储结构

???????栈的顺序存储结构称为顺序栈。由于栈是运算受限的线性表,因此线性表的存储结构对栈也适用。类似于顺序表的定义,顺序栈也是用数组实现的。因为栈底位置是固定不变的,故可以将栈底位置设置在数组的最低端(即下标为0);栈顶位置是随着进栈和退栈操作而变化的,故需用一个栈顶指针top来指示当前栈顶位置。

???????由于顺序栈必须预先分配存储空间,因此可能会产生溢出和空间浪费的问题。为解决这个问题,我们可以让多个栈共享存储空间,这样可以相互调节,既节约了空间,又可以降低发生溢出的频率。

???????怎样使多个栈共享存储空间呢?当程序中同时使用两个栈时,可以将两个栈的栈底分别设在顺序存储空间两端,让两个栈顶各自向中间延伸。当一个栈中元素较多进而使用空间超过共享空间一半时,只要另一个栈元素不多,就可以占用另一个栈的部分存储空间。只有当整个共享空间被两个栈占满时(即两栈顶相遇),才会产生溢出。

? ? 2)栈的链式存储结构

???????栈的链式存储结构称为链栈,它是运算受限的单链表,其插入和删除操作仅限制在表头位置上(栈顶)进行,因此不必设置头结点,将单链表的头指针head改为栈顶指针top即可。


二、队列

1.队列的定义及其运算

? ? 1)队列的定义

???????队列也是一种操作受限的线性表,它只允许在表的一端进行元素插入,而在另一端进行元素删除。允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。

???????在队列中,通常元素插入称为入队,元素删除称为出队。队列的概念与现实生活中的排队相似,新来的成员总是加入队尾,排在队列最前面的总是最先离开队列,即先进先出,因此又称队列为先进先出(FIFO)表。

? ? 2)队列的运算

? ? 队列的操作运算与栈类似,主要有以下几种:

  1. 置空队列 InitQueue(Q),构造一个空队列Q。
  2. 判队空 QueueEmpty(Q),若Q为空队列,则返回TRUE,否则返回FALSE。
  3. 入队列 EnQueue(Q, x),若队列不满,则将数据 x 插入到Q的队尾。
  4. 出队列 DeQueue(Q),若队列不空,则删除队头元素,并返回该元素。
  5. 取队头 GetFront(Q),若队列不空,则返回队头元素。

2.顺序循环队列

???????队列的顺序存储结构称为顺序队列。它也是利用一块连续的存储单元存放队列中的元素。由于队头和队尾位置是变化的,因此需要设置两个指针 front 和 rear 分别指示队头和队尾元素在表中的位置。

???????为了充分利用数组空间,克服上溢,可将数组空间想象为一个环状空间,并称这种环状数组表示的队列循环队列。循环队列中,出队元素的空间可以重新被利用。所以,一般情况下真正实用的顺序队列是循环队列。

???????判断循环队列是“空”还是“满”,常用方法一般有三种:

  • 另设一个标志位,以区别队列是“空”还是“满”。
  • 设置一个计数器记录队列中元素个数。
  • 少用一个元素空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等则认为队列满,即尾指针Q.rear所指向的单元始终为空。

3.链队列

???????队列的链式存储结构称为链队列。它是一种限制在表头删除和表尾插入操作的单链表。显然,仅有单链表的头指针不便在表尾作插入操作,为此再增加一个尾指针,使其指向链表上的最后一个结点。一个链队列由一个头指针和一个尾指针唯一确定


小结

???????栈和队列是两种十分重要的线性结构,它们的逻辑结构和前面介绍的线性表完全相同,只是对其操作运算有一定的限制,故又称它们为操作受限的线性表。栈和队列结构在各种程序设计中被广泛应用。

ps:博主创作不易,喜欢这篇文章的老铁们点个赞吧!(#^.^#)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:53:24  更:2021-10-16 19:53:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:26:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码