一、源起
算法处理的(这一组)数据,存在内存里的格式是什么?乱七八糟,随意摆放还是整整齐齐?
数据结构化 方便读取 (该组数据)
所以 数据结构出现了 (和算法相辅相成),目的是为了更加规整,高效的读取数据。
二、主要的数据结构介绍
(一)数组/列表/向量
1.字符串是特殊的数组,由字母 数字 标点符号等组成。
2.数组排序函数 为数组排序 排序算法不特别用。
3.二维数组 -> 矩阵
(二)结构体
1.结构体是将多个变量打包在一起 (有关系的变量)
2.结构体数组:一个数组,里面放很多结构体
(三)链表
1.源起
结构体与数组的限制
创建时就有固定大小,不能动态增加;数组在内存中按顺序存储,在中间插入值困难
应用结构体创造更复杂的数据结构,消除这些限制。
2.介绍
(1)链表由节点组成,每个节点都是一个存有变量和指针的结构体,因此可以看做一个结构体数组
(2)链表是一种灵活的数据结构,灵活性通过每个节点指向下一个节点实现。
(由于有指针的指向,所以数据可以跳跃连接,这就是不同于数组和正常结构体的灵活性)
(3)链表与数组的优缺点:数组查找方便,插入删除等较困难,需要做大量的搬移操作;链表可以通过节点中指针的指向来插入或者删除数据,但查找困难。
(四)队列和栈:
1.队列
(1)特点:先进先出
(2)出队与入队
· 出队:准备一个链表走队列,另外准备一个指针变量p,每次走一个结构体就把其中的next(结构体指针)赋给p,该结构体出队,next连接的下一个结构体排上来,接着操作,把它的next赋给p,出队,下一个排上来......
· 入队:遍历整个链表到结尾,然后把结尾的next指向新人。
2.栈
(1)特点:先进后出 后进先出(形如一摞书)
(2)出栈与入栈
(五)树与图
1.树
(1)特点:根到叶是单向的(指针的指向是有顺序的)
(2)介绍:
· 把节点改成 存一个变量,两个指针(nextleft nextright),想象 最高的节点为根节点,开两个叉,每个叉叫子节点,继续开两个叉。(第一个节点存放两个指针,每个指针又分别指向一个存放两个指针的结构体...)
· 每个子节点的直属上层节点,叫母节点
· 没有任何子节点的节点 也是 树结束的地方 叫做叶节点。(该节点的指针值为\0,也就是NULL)
· 在这些例子中,节点最多有两个子节点(每个节点中有两个指针变量),因此又叫二叉树
2.图:数据随意连接,指针随意指向,包括循环