NoteDeep
trie树
红黑树
伸展树
字典
跳表


  • 动态规划
计算复杂性

到南大官网去看数据结构课件,里面的例题会作为考点,比如约瑟夫问题

平均次数要会计算


  • 单链表加头节点的好处:统一插入和删除操作
为什么加头节点可以统一插入和删除操作?
插入:
没添加头节点时,如果在空链表中插入,要为first重新分配空间;如果在非空表中插入,则需要移动current到插入位置的前一个位置再插入;两种情形操作不统一,因为空链表中插入位置没有前驱节点
添加了头节点之后,无论是不是空链表,一律将current移动到插入位置的前一个位置再插入即可
删除:
没添加头节点时,删除第一个元素,需要直接对first进行删除操作;如果删除第一个以后的元素,则需要将current移动到删除的位置的前一个位置再删除;两种情形操作不统一,删除第一个元素时,第一个元素没有前驱节点
添加了头节点之后,在没有尾指针的情况下,所有元素都有前驱节点,可以统一删除操作
但是如果有尾指针,删除仅有一个元素的链表和不止一个元素的链表,或者对空链表进行插入和对非空链表进行插入,在尾指针的操作上是不一样的,在空与非空变化时,要对应修改rear为NULL或者new LinkNode。

  • 尾节点的作用呢?跟头节点类似吗?
添加额外节点的作用在于提供前驱而统一插入删除操作。对于单链表,如果尾节点没有起到提供前驱节点的作用,则没有期到统一操作的作用。双链表带尾节点可以统一插入删除操作。
但是,同时添加头尾节点之后,同时也规定了如果有尾指针,尾指针必定指向尾节点,这样便统一了带尾指针的空或非空链表中的插入删除操作。

  • 建立链表的方法:头插入和尾插入
  • 循环链表插入删除时头尾指针的变化
入队是队尾入队,rear=(rear+1)%max_size;出队是队头出队,front=(front+1)%max_size,注意下标一定是从0开始的,max_size也要将空置的检验位计入
  • 循环链表实现队列
  • 循环链表判断空链表的方法
空:front==rear,满:front==(rear+1)%max_size
  • 链式队列的插入和删除的特殊情况——空队列时
  • 栈的链表实现
P93(插入删除操作),P60(链表节点的定义)
  • 栈的应用——中缀表达式转化后缀表达式,栈内外运算符优先级和具体过程
  • 卡特兰数
  • 森林的先根遍历和后根遍历分别对应二叉树的什么遍历
森林的先根遍历序列对应着对应二叉树的先序遍历序列;森林的后根遍历序列对应着对应二叉树的中序遍历序列


  • 堆排序,堆调整算法,时间复杂度
堆有几种基本操作:
shiftdown:在保证左右子树都是堆的条件下,若本节点的值小于左右子节点中的最大值,则与最大的调换,递归调换到成堆或者到树底部
建堆:从下标为floor(n/2)-1个节点开始shiftdown,时间复杂度为O(n)
插入:在堆底插入然后向上调整
删除:删除堆顶元素,并将堆底元素放到堆顶,继而shiftdown
堆排序:先建堆,然后不断重复“删除-》插入-》shiftdown”操作,第一个步骤时间复杂度为O(n),第二个步骤时间复杂度为O(nlogn)

  • 散列的平均查找长度:成功情形和失败情形
线性探查法
m为不小于指定规模的最小素数
查找序列为H,H+1,H+2,...,H+(m-1)
查找平均搜索长度计算:对于成功和不成功的情形,直接按照查找序列计数对比次数即可,查到待查元素或者空位置或者查找序列用完,则停止,计算对比次数;注意,成功的次数分母为元素的个数,不成功的次数分母为m
二次探查法
m为4k+3形式的不小于制定规模的最小素数
查找序列为H,H+1,H-1,H+4,H-4,H+9,H-9,...,H+((m-1)/2)^2,H-((m-1)/2)^2
查找平均搜索长度计算:对于成功和不成功的情形,直接按照查找序列计数对比次数即可,查到待查元素或者空位置或者查找序列用完,则停止,计算对比次数;注意,成功的次数分母为元素的个数,不成功的次数分母为m




  • 二叉树的广义表表示
见课件例题
  • 稀疏矩阵的快速转置算法
见课件例题
  • KMP算法
见课件例题

广义表
















评论列表