什么是数据结构
研究数据的存储方式。
目的:
方便后期对数据再利用
数据结构的核心内容:
数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好的方式来存储数据
-
变量可以理解为数据结构的一种,但是如果数据很多并且数据之间是有关联的为每一个数据声明一个变量就十分的浪费存储空间。
-
针对此类数据,数据结构中提供有专门的
树结构
来存储这类数据。
-
-
导航功能有很多的地图,显然不是使用变量或数组这些类型进行存储的
-
针对此类数据,数据结构提供了
图存储结构
,专门用于存储这类数据。
-
数据结构的核心概念:
如何存储具有复杂关系的数据更有助于后期对数据的再利用
数据结构的几种大分类
线性表
树存储结构--->重点
图存储结构
线性表
线性表存储结构的特点:
-
各元素依次排列,每个元素的前面和后边有且仅有一个元素与之相邻(除首元素和尾元素)
线性表种类:
顺序存储结构--->顺序表
链式存储结构--->链表
顺序表
底层实现:
通过数组的方式实现,所以可以约等于是数组(顺序表是数据结构,数组是基本数据类型。所以是约等于)
特点:
-
提前申请一定大小的存储空间
-
存储空间的物理地址是连续的
数据表存储数据的内存分配模型:
链表
特点:
-
地址随用随申请
-
数据的存储位置是相互分离的
-
数据的存储位置是随机的
依次排列关系的建立:
-
给每一个数据块增设一个指针
-
每个数据块的指针都指向下一个数据块(最后一个数据块的指针指向 NULL)
这样就形成了链表
链表存储在内存当中的模型:
栈和队列
特点:
-
栈和队列隶属于线性表,是特殊的线性表
-
栈和队列对线性表中元素的进出做了明确的要求
-
栈空间:栈中的元素只能从线性表的一端进出(另一端封死),要遵循“先入后出”的原则,即先进栈的元素后出栈。--->先入后出
-
队列空间:队列中的元素只能从线性表的一端进,从另一端出,要遵循“先入先出”的特点,即先进队列的元素也要先出队列。--->先入先出
-
栈空间示例图:
分析:
-
A先入栈,所以在栈底
-
C最后入栈,所以在栈顶
如何实现出栈、入栈?
-
通过栈指针指向最后入栈的元素,当栈指针往下移动的时候代表着元素出栈。
-
栈指针向上移动的时候代表着元素入栈。
-
一开始栈指针指向栈底
-
栈指针每次移动的距离大小一致
队列空间示例图:
分析:
-
A最先如队列,所以最先出队列
-
C最后如队列,所以最后出队列
队列就像一个通道channel
一样,如果队列出得不顺畅会导致阻塞。Go语言中的chan
就是使用了队列的思想。Go中的Gorountine可以实现协程间的通信
队列中通常用于任务的形式,里面会有资源。通常资源会上锁。当锁资源被释放的时候下一个任务获得该资源锁并且进入队列--->生产者、消费者模型
树存储结构
特点:
-
适合存储具有“一对多”关系的数据
图存储结构
特点:
-
适合存储具有“多对多”关系的数据