数据结构部分
一、填空题
1、L是单向循环链表的指向头结点的指针,判断链表是否为空的条件是______
2、一颗排序二叉树有n个结点,深度为d,则插入一个结点的时间复杂度为____
3、链队列的入队的时间复杂度是_____
4、
二、判断题
1、哈夫曼树是一颗平衡二叉树
2、在拓扑排序中,如果Vi在Vj之前,说明存在一条从Vi到Vj的路径。
3、
三、选择题
1、给出了一种结构
typedef struct {
……
}LNode, *List
问定义一个这种类型的指针的语句是?
A、LNode L B、List L C、List *L D、都不对
2、适合存储边稠密图的结构是
A、邻接表 B、邻接矩阵 C、逆邻接表 D、都不对
四、简答题
1、给出了一个静态链表SAPCE[MAXSIZE],大概这样
(1)画出对应的链表。(应该是这么问的,我就把静态链表看成链式存储结构画了出来)
(2)画出从静态链表中删除H后的SPACE[MAXSIZE];
(3)定义了静态链表结点类型,请写出删除函数void free( position k)
typedef int position;
typedef struct{
elemtype data;
position k;
}SPACE[MAXSIZE];
(4)和顺序表相比,静态链表的主要优点是?
(5)和链式存储结构相比 ,静态链表的主要优点是?
2、给了一种表达式树,A*(B+C*D)的表达式树如图
(1)写出前序、中序、后序遍历的序列
(2)写出A*(B+C*D)的后缀表达式
(3)构造表达式树需要一个栈和后缀表达式,问栈的元素的类型是什么?简要说说构造表达式树的方法。
(4)按照上述方法,画出构造表达式树时栈内元素的变化情况。
3、
(1)说明希尔排序为什么比直接插入排序效率高
(2)给了一个包含10个数的序列,增量序列分别是5、3、1,写出每一趟排序后的结果。
(3)给了希尔排序的算法的代码,要求补全。
(4)若要排序大块文件的话,希尔排序的效率特别低,请设计一种方法,使得每次只需要移动一趟。(这题我也记得很模糊,具体问法参考一下其他的回忆试题)
五、算法题
1、定义循环队列的结构
typedef struct {
int MAXSIZE;
int front; //指向队头元素
int num; //指出队内元素个数
elemtype * Elems;// 指向存储队列区域的指针。
}*Queue;
(1)写出建立一个队列的函数Queue CreateQueue(int MAXSIZE)
(2)写出删除队列的函数void DeleteQueue(Queue Q);
(3)写出将一个元素入队的函数 void EnQueue(Queue Q, elemtype k)
(4)写出返回队头元素并将其删除的函数elemtype DeQueue(Queue Q)
3、有向无权图的顶点用数字表示。现要计算从源点S到其他顶点的最短路径。LAST[MAXSIZE]是一个数组,LAST[w]=v表明从S到点w的最短路径的最后一条弧是。LAST[w]=0表示w是源点S或者没有从S到w的最短路径。给出了一个表格。
(1)找出源点S是哪一点。
(2)写出从源点到其他各点的最短路径
(3)补全利用BFS寻找源点到其他各点最短路径的代码。(不难)