1.带头结点与不带头节点单链表的区别
●
不带头节点:此时头指针指向第一个节点
h->a1->a2->a3->…… // 头指针存放的是第一个节点的地址,即h,也就是说(*h)表示的是第一个节点
带头结点:此时头指针指向头结点
h->headnode->a1->a2->a3->…… // 头指针存放的是头结点的地址,也就是说(*h)表示的是头结点
● 空表的比较
//不带头节点
h = NULL; // h 表示的是第一个节点的地址,h = NULL 表示第一个节点的地址为空,也就是空表
// 带头结点
h->next = NULL; // h 表示的是头结点的地址,h->next 就是头结点的下一个节点,即首元节点为空,也就是空表
链表节点结构为(data,next)。设有单循环链表,指针last指向链表尾部,现在要在链表首部插入节点s,则应该执行下面哪一种操作?[ ]
s.next=last.next; last.next=s;last=s;
3。
在下列排序算法中,如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用( 简单选择排序 )方法最快。当然冒泡排序最小上冒也可以
4.弄懂希尔排序
5.快速排序流程
一组记录的关键字为{46,79,56,38,40,84},则利用快速排序方法,以第一个记录为基准得到的第一次划分结果为( )。
答案
40,38,46,56,79,84
如果不会参考https://blog.csdn.net/adusts/article/details/80882649
6.题目:一个具有n个节点的完全二叉树,其叶子节点的个数为多少?
分析:
设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2
侧有
n0+n1+n2=n (1)
对于二叉树有:
n0=n2+1 (2)
由(1)(2) ==>
n0=(n+1-n1)/2 (3)
由完全二叉树的性质可知:n1=0 或 1
总结:
(a):当n1=0时(即度为1的节点为0个时,此时n为奇数)或者n为奇数时
n0= (n+1)/2;
(b):当n1=1时(即度为1的节点为1个时,此时n为偶数)或者n为偶数
n0= n/2;
综合(a)(b)可得:
(结论):一个具有n个节点的完全二叉树,其叶子节点的个数n0为: n/2 向上取整,或者(n+1)/2 向下取整
7.next【j】求法
已知模式串P为“abcaabc”,与模式串P对应的next[j]数组的值是-1,-1,-1,0,0,1,2
不懂或忘了参考https://blog.csdn.net/qq_41437694/article/details/89282224
一个二叉树按顺序方式存储在一个一维数组中, 如图
结点D的右孩子节点是____G__。
如图所示的一棵普通树,将其转换成二叉树,然后写出其二叉树的中序遍历结果是( )
答案: BEGFCDA(想一想为什么)
森林的先序和后序遍历即对应二叉树的先序和中序遍历。
10.二叉树的链式存储方式
画出图
11.1、森林转二叉树
(1)、把每棵树转换为二叉树
(2)、第一棵二叉树不动,从第二棵二叉树开始,一次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。
转换规则:兄弟相连,长兄为父,孩子靠左。 (参考https://www.cnblogs.com/zhanggui/p/4649114.html)
exp:
将森林 F 转换为对应的二叉树 T, F 中叶结点的个数等于( )
A.T 中叶结点的个数
B.T 中度为 1 的结点个数
C.T 中左孩子指针为空的结点个数
D.T 中右孩子指针为空的结点个数
答案:c