数据结构

第一章绪论

逻辑结构就是数据元素间的逻辑关系,而不是数据元素内部的数据项之间的关系。数据元素包括数据项,数据元素就是一行信息,数据项就是这一行中的一列信息。

第二章线性表

](https://img-blog.csdnimg.cn/20200223205335283.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1F2UVdhbmdYaWFvQmFv,size_16,color_FFFFFF,t_70)

逻辑结构:集合、线性、树形、图形
物理结构:顺序、链式

随机存取(直接存取,Random Access)

随机存取指的是当存储器中的数据被读取或写入时,所需要的时间与该数据所在的物理地址无关。

顺序存取(Sequential Access)

顺序存取(Sequential Access)是一种按记录的逻辑顺序进行读、写操作的存取方法,所需要的时间与该数据所在的物理地址有关。顺序存取表现为:在存取第N个数据时,必须先访问前(N-1)个数据。

更全面的讲解:
引用别人的笔记

章节测试知识点:
在单链表中,增加一个头结点的目的是为了方便运算的实现。
将长度为n的单链表链接在长度为m的单链表后面,其算法的时间复杂度为O(m) 。
存储空间利用率:顺序存储只存放数据,链式存储还要再多出一个存放地址。所以顺序存储存储空间利用率高,链式较低(50%)
在这里插入图片描述

注:

线性表的顺序存储结构是一种随机存取的存储结构。单链表也是线性表,但单链表是顺序存取的存储结构。尝试这样理解: 顺序存储结构是一种随机存取的存储结构,链式存储结构是一种顺序存取的存储结构,注意抠字眼。

第三章栈与队列

1.已知循环队列存储在一维数组A[0-n]中,且队列非空时front和rear分别指向队首元素和队尾元素。若初始队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别时( 0,n-1
解答:因为当添加入一个元素时,队尾rear=rear+1,front为第一个元素位置0,因为是循环队列,所以这时rear也指到0.

2.在链队列中,即使不设置尾指针,也能进行入队操作吗?
3.循环顺序队列和循环链队列都存在空间溢出问题吗?
2.3解答:错误,3循环链队列不存在空间溢出问题。2 若使用不设置尾指针的链表作为链队列的存储结构(例单链表),在进行入队操作的时候需要遍历整个链队列至队尾,然后在进行插入。这当然是可行的,只是效率有所下降。 如果只使用一个指针又要保持效率的话,可以使用只带尾指针的循环单链表作为存储结构,这样出队和入队的开销都是O(1)。

第四章二叉树

术语:
结点:树中的一个元素。
结点的度:当前结点拥有的子树数目。
叶子结点:度为0的结点。
分支结点:度不为0的结点。
结点的层次:根节点是1层,以此类推。
树的度:把整个树中度最大的树的度作为整个树的度。
有序树:子树之间存在确定的次序关系。(可通过交换某个孩子来判断是否有序)
无序树:子树之间不存在确定的次序关系。
满二叉树:所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上。
完全二叉树:一种叶子结点只能出现在最下层和次下层且最下层的叶子结点集中在树的左边的特殊二叉树。
森林:是m(m>=0)棵互不相交的树的集合。

一个含有n个结点的树,有(n-1)个连线。
解:根节点没有往上的连线。
二叉树的性质:

1.完全二叉树中,如果有度为1的结点,只可能有一个,且该结点只有左孩子。
2.深度为k的完全二叉树,在k-1层上一定是满二叉树。

*性质1:一棵非空二叉树的第 i 层上至多有 2i-1个结点(i >= 1)。
证明:当i=1时,只有根结点,2i-1=20=1。
假设对所有j,i>j1,命题成立,即第j层上至多有2j-1 个结点。
由归纳假设第i-1 层上至多有 2i-2个结点。
二叉树的每个结点的度至多为2,故在第i层上的最大结点数为第i-1层上的最大结点数的2倍,即2
2i-2= 2i-1。

*性质2:一棵深度为k的二叉树中,最多具有2k-1个结点。
证明:性质1可见,深度为k的二叉树的最大结点数为
在这里插入图片描述
性质3:对于一棵非空的二叉树,如果叶子结点数为n0,度数为2的结点数为n2,则有: n0=n2+1。
证明: n = n0 + n1 + n2 ①
e = n – 1 = 2n2 + n1 ② e代表边,实际上还应该加上0✖n0=0
因此,2n2 + n1 = n0 + n1 + n2 - 1
n0 = n2 + 1
同理:三叉:n0=n2+2
n3+1
性质4:具有n个结点的完全二叉树的深度k为 ⌊ log2n ⌋+1。
证明:设完全二叉树的深度为 h,则根据性质2和完全二叉树的定义有
2h-1 ≤ n < 2h
对不等式取对数,有
h-1 ≤ log2n < h
即:log2n<h≤log2n+1
又h是整数因此有 h = ⌊log2(n)⌋+1
性质5:对于具有n个结点的完全二叉树,如果按照从上至下和从左到右的顺序对二叉树中的所有结点从1开始顺序编号,则对于任意的序号为i的结点,有:
1)如果i>1,则序号为i的结点的父结点的序号为 ⌊i/2⌋;如果i=1,则该结点是根结点,无父结点。(判断父结点)
(2)如果2i≤n,则序号为i的结点的左子结点的序号为2i;如果2i>n,则序号为i的结点无左子结点。(判断子结点)
(3)如果2i+1≤n,则序号为i的结点的右子结点的序号为2i+1;如果2i+1>n,则序号为i的结点无右子结点。(判断子结点)

二叉树顺序存储:从上到下,从左到右,但在某些情况下利用率很低。

树与二叉树的关系
1、由树与二叉树的对应关系,可以看出,按先根顺序遍历树正好等同于按前序法遍历对应的二叉树,按后根顺序遍历树正好等同于按中序法遍历对应的二叉树。

2、利用二叉链表存储树时,根节点的右指针是空。(因为存储的是”树“,其转化为二叉树,右指针就为空)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值