到南大官网去看数据结构课件,里面的例题会作为考点,比如约瑟夫问题
没添加头节点时,如果在空链表中插入,要为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
栈的应用——中缀表达式转化后缀表达式,栈内外运算符优先级和具体过程
森林的先根遍历序列对应着对应二叉树的先序遍历序列;森林的后根遍历序列对应着对应二叉树的中序遍历序列
shiftdown:在保证左右子树都是堆的条件下,若本节点的值小于左右子节点中的最大值,则与最大的调换,递归调换到成堆或者到树底部
建堆:从下标为floor(n/2)-1个节点开始shiftdown,时间复杂度为O(n)
删除:删除堆顶元素,并将堆底元素放到堆顶,继而shiftdown
堆排序:先建堆,然后不断重复“删除-》插入-》shiftdown”操作,第一个步骤时间复杂度为O(n),第二个步骤时间复杂度为O(nlogn)
查找序列为H,H+1,H+2,...,H+(m-1)
查找平均搜索长度计算:对于成功和不成功的情形,直接按照查找序列计数对比次数即可,查到待查元素或者空位置或者查找序列用完,则停止,计算对比次数;注意,成功的次数分母为元素的个数,不成功的次数分母为m
查找序列为H,H+1,H-1,H+4,H-4,H+9,H-9,...,H+((m-1)/2)^2,H-((m-1)/2)^2
查找平均搜索长度计算:对于成功和不成功的情形,直接按照查找序列计数对比次数即可,查到待查元素或者空位置或者查找序列用完,则停止,计算对比次数;注意,成功的次数分母为元素的个数,不成功的次数分母为m