数据结构算法

算法与数据结构


1.数组(里面的点为空格)

数组类型存储地址运算
一维数组a[n]a[i]的存储地址为:a+i*len 例子:a[0] = a, a[1] = a + 1
二维数组a[m][n]a[i].[j]的存储地址(按行存储)为:a+(i * n + j) * len a[i][j]的存储地址(按列存储)为:a+(j * m + i) * len

已知5行5列的二维数组a中的各元素占两个字节,求元素a[2][3]按行优先存储的存储地址?

根据二维数组按行公式a+(i * n + j) * len:我们可求出a + (2 * 5 + 3) * len = a + 13 * 2. 其中:i 代表几行,n 代表总共几列, j 代表这列有几个元素,len 代表每个位置上所占用的字节数。


2.数据结构的定义

 从大体意义上来讲,图可以包含树,树可以包含线性结构的。


3.线性表的定义

图中:

  1. 顺序表就是开辟了连续的空间,依次存储的(就是采用了一位数组的方式)
  2. 链表就是磁盘上哪里空闲了开辟哪里的空间,连起来之后就形成了链表。

链表进一步可以分为 单链表、循环链表、双向链表

单链表:只有一套指针,指针挨个指过去,例如:头结点---1---2---3....

循环链表:把尾元素的指针指向了头结点,定位元素的时候可以继续往下走,不用重头结点开始。

双向链表:指针既可以往前有可以往后,不像单指针一样只往一个方向走。

单链表删除结点原理:假设a3的地址为x,那么a1的地址p —>next = x指向a3从而删除a2链接起来,
单我们看图中​q—>next指向a3,所以​​​​​​a1的地址p —>next = q—>next从而a2删除结点。


单链接插入结点原理:一个x值指针为s的数据插入先链接a2地址(p—>next)(尾),即s—>next = p—>next,接着链接a1地址(p—>next)(头),即p—>next = s—>next。


顺序存储与链式存储对比

释义:

空间性能等于1为所有空间都用在了数据存储上面,<1为有部分空间用在了存储地址上面,即66.6666%

查找运算顺序存储更优。

读运算:顺序存储直接读取,而链式存储的一个一个去比较地址读取。

插入运算:顺序存储插入前提下必须插入这个元素的后面所有元素往后移一下,而链式插入直接插入,为更优,删除用理。

队列与栈(重点):

习题:

如果只是认为c、b、a那我对栈的认识还比较肤浅,还可能有a、b、c,a进栈后直接出栈,同理b、c也是所得,还可以得到

b、c、a,a进栈,接着b进栈直接跳出,c也一样,左后a出栈,所以还有a、c、b       b、a、c      c、a、b.

树与二叉树

节点的度:每个节点有几个节点就是几度。

树的度:每个节点的分支最大值。图中是2度

叶子节点:像4、5、7、8都是叶子节点,因为它们都属于最下成,且没有结点

分支节点:有分支的节点。

内部节点:2、3、6,非叶子节点以及非根节点而夹在中间的节点。

父结点、子节点:例如针对2,针对2的父结点就是1,针对2的子结点就是4、5.

兄弟结点:4、5就是兄弟结点,属于一个父亲并且在同一级就是子宫底结点

层次:4层


几种比较特殊的二叉树:

最少有n个节点

深度为k最少有一个节点

这张图片讲的是最后两行的图解;


 

前序遍历:跟左右   1、2、4、5、7、8、3、6

中序遍历:左跟右   4、2、7、8、5、1、3、6

后序遍历:左右跟   4、8、7、5、2、6、3、1


根据前序性质跟左右以及中序性质左跟右推出结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值