【数据结构与算法】线性表,堆栈和队列揭秘

作者:陈芝番

撰写时间:2020.4.20

目录

1.谈谈数据结构的意义

2.数据结构研究什么

3.数据结构中

4.数据的逻辑结构

5.链表元素的地址可以是不连续的

6.单链表的结构

7.插入数据元素代码(Insert)

8.结点结构图

9.插入

10.堆栈的定义

11.栈的存储结构

12.队列的定义

13.队列的存储结构

14.堆满和对空的条件是什么

感悟

数据结构与算法能够使我们更快地编写出更高效的程序,简而言之,合理的组织数据。建立合适的数据结构,借助于集成开发环境可以很快地生成程序。结合图例更好地理解数据结构与算法。

1.谈谈数据结构的意义

数据结构是计算机科学的基础课,是核心的课程,同时能够更好地解决实际问题。

算法+数据结构=程序                                         

2.数据结构研究什么

逻辑结构的简单理解

  • 线性结构:一对一的线性关系。
  • 树结构:一对多的层次关系。
  • 图结构:多对多的任意关系。

3.数据结构中

从逻辑上可以把数据分成线性结构和非线性结构。

4.数据的逻辑结构

线性结构:除第一个和最后一个数据元素外,每个数据元素只有一个前驱和一个后继数据元素。

树结构:除根结点外,每个数据元素只有一个前驱数据元素,可有0个或若干个后继数据元素。

图结构:每个数据元素可有0个或若干个前驱数据元素和0个或若干个后继数据元素

5.链表元素的地址可以是不连续的

什么是调皮的链表?链表不是地址连续的空间,的插入和删除不需要移动元素,它看到内存有空余地址就可以毫无顾忌地挤进去

6.单链表的结构

单链表中构成链表的结点只有一个指向直接后继结点的指针域。

其结构特点:逻辑上相邻的数据元素在物理上不一定相邻。

7.插入数据元素代码(Insert)

8.结点结构图

  • 数据域:存储元素,数值数据
  • Next:存储直接后继的存储地址

  • 首先要有一个定位过程,假设定位i的位置,一直从第一个节点往下找,不为空并且不大于它的时候,一直往下找

9.插入

然后真正的插入源代码,在i这个位置插入对象obj,首先要定位在定位在前一个元素,然后把这个新的节点,实际的个数要++,这就是插入。

把obj插入到i这个位置,所以插入到前一个位置,然后把ai这个元素赋值给新的这一个节点next的指针域,然后把整个节点赋值给current指针域。

  • 线性表的第一个元素没有直接前驱,最后一个元素没有直接后继。
  • 假设线性表中有n个元素,如果在第i个位置插入一个新的元素,需要后移动n-i+1个元素。

10.堆栈的定义

  • 特征是后进先出。
  • 用盘子实际操作理解更容易

  • 堆栈简称为栈,是限定只能在表的一端进行插入和删除操作的线性表。
  • 允许插入和删除的一端称作“栈顶”,另一端称作“栈底”。通常将元素插入栈顶的操作称为“入栈”(进栈或压栈),称删除栈顶元素的操作作为“出栈”。

11.栈的存储结构

两种存储结构

  • 顺序栈---采用顺序结构存储
  • 链栈---采用链式结构存储

12.队列的定义

  • 特征:先进先出
  • 队列简称为队,是限定只能在表的一端作插入运算,在另一端作删除运算的线性表
  • 允许插入的一端称作“队尾”允许删除的另一端称作“队首”或“队头”。

13.队列的存储结构

两种结构

  • 顺序队列---采用顺序结构存储。
  • 链式队列---采用链式结构存储。

14.堆满和对空的条件是什么

  • 对空:front == rear
  • 队满:rear == Maxsize-1
  • 循环队列为满的条件是:
  • Front == (rear+1)%Maxsize
  • 队头指针进1:front=(front+1)%Maxsize
  • 队尾指针进1:rear=(rear+1)%Maxsize

感悟

当然我们在学习或实现功能的过程中,会遇到问题。那么我们可能会惧怕它们,心态上我们必须不惧怕,我们需要解决它们,就需要硬着头皮,去查找问题的突破口。我们可以借助谷歌度娘帮助,查找类似的问题,从中获得启示。但不一定能够解决我们的问题,我们必须自己思考,亲自做一些尝试,说不定问题就被我们KO了,当然这种成就感只能自己体会!有些时候,多看几遍问题,多动手尝试,耐心地看完,突如其来,灵光一闪,就能体会到“山重水复疑无路,柳暗花明又一村。”的喜悦感。路过的亲们,动动你的妙手点个赞,创作不易!你的支持就是我创作的源泉,感谢!!!

猜你喜欢

转载自blog.csdn.net/qq_44554890/article/details/105720602