1概念
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
特定关系的集合

公式:数据结构=数据+结构(特定关系)
数据:用类型表示

结构:在任何问题中,数据元素都不是孤立存在的,它们之间都存在着某种关系,这种数据元素相互之间的关系称为结构。

元素之间,通常有以下四种基本结构:
集合
线性结构: 有序单向

树形结构: 八月十八上午日笔记,数据结构的初步学习

图或网状结构

八月十八上午日笔记,数据结构的初步学习

1.1逻辑结构&物理结构
前面分类中定义的关系,描述的是数据元素间的逻辑关系,因此又称为逻辑结构。
但是仅仅知道数据元素间的逻辑关系是不够的,因为我们得实现自己的数据结构。
因此,我们得关注数据结构在计算机底层是如何表示的?

数据结构在计算机中的表示,称为数据的物理结构,又称为存储结构或者映像。
物理结构: 数组 链表

数据的表示很简单。
结构的表示可以分为两种:顺序存储结构 (顺序映像) 和 链式存储结构 (非顺序映像)。
顺序映像:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。(数组)
非顺序映像:借助指示元素存储地址的”指针”,来表示数据元素的逻辑关系。(链表)

逻辑结构:
集合
线性结构:
树形结构:

1.2线性表
线性表:n个数据元素的有序序列。
首先,线性表中元素的个数是有限的。
其次,线性表中元素是有序的。

那这个”序”指的是什么呢? 更多的表示: 存储顺序
1,5,0, -1 - -1, 0 , 1, 5

如果以ai表示数据元素,则线性表可以记为 {a1, … , ai-1, ai, ai+1, … , an}
表中, ai-1在 ai 之前,同时ai+1 在 ai 之后,我们称ai-1是ai的直接前驱,ai+1是ai的直接后继。
除表头和表尾元素外,其它元素都有唯一前驱和唯一后继,其唯一前驱或唯一后继确定了该元素在线性表中的位置。
因此,线性表中,每个数据元素都有一个确定的位序,这个确定的位序我们称之为索引。
表头元素有唯一后继,无前驱,表尾元素有唯一前驱,无后继。
顺序映像 (ArrayList)
非顺序映像 (LinkedList)

1.3操作受限的线性表
1.3.1栈
栈是一种”操作受限”的线性表,体现在只能在一端插入删除数据,符合FILO的特性。
先进后出
八月十八上午日笔记,数据结构的初步学习

1.3.1.1栈的作用

函数调用栈:
八月十八上午日笔记,数据结构的初步学习

反序字符串
实现reNumber(str)方法,反转字符串
括号匹配问题
实现judgeBracket(str)方法来判断括号匹配

编译器利用栈实现表达式求值
浏览器的前进后退功能
利用栈实现 DFS: depth-first-search (深度优先遍历)

1.3.1.1.1表达式求值
前缀:
中缀: 1 + 32 - 5
后缀: 132
+5-

八月十八上午日笔记,数据结构的初步学习

八月十八上午日笔记,数据结构的初步学习

利用栈实现把中缀转化为后缀

1, 遇到操作数–> 输出
2, 遇到右括号
让栈元素弹出输出
知道弹出左括号为止
3, 遇到操作符
从栈中弹出元素, 直到遇到栈中更低优先级的操作符
弹出完成, 该操作符入栈
如果有右括号, 才弹出左括号
4, 栈中元素完全弹出
八月十八上午日笔记,数据结构的初步学习

1.3.1.2对应java实现
八月十八上午日笔记,数据结构的初步学习

1.3.2队列
还是一个线性表: 也是操作受限的
操作受限: 只能一段添加, 另一端删除
八月十八上午日笔记,数据结构的初步学习

队列也是一种”操作受限”的线性表,体现在一端插入数据在另一端删除数据,特性是FIFO。

队列

阻塞

生产者----消费者

生产者: 提交任务的方法
队列: 任务
消费者: 线程

相关文章:

  • 2021-06-10
  • 2022-02-04
  • 2021-08-05
  • 2021-06-18
  • 2021-06-28
  • 2021-12-15
  • 2021-12-05
  • 2021-04-01
猜你喜欢
  • 2021-10-31
  • 2021-08-27
  • 2022-12-23
  • 2021-04-21
  • 2022-12-23
  • 2022-12-23
  • 2021-04-06
相关资源
相似解决方案