1.描述一下线性结构的特点(4分)
2.下方是一个带头结点的线性链表head,设计算法删除5的整数倍数据(10分,每空2分)
typedef int datatype;typedef struct node{datatype data;struct node ___(1)___;}linklist;void deleteOdd(linklist *head){Linklist *p,*temp;___(2)___;while(p→next){if(___(3)___){temp = p→next;___(4)___;free(temp);}else{___(5)___;}}} 第二题有一个二叉树,先序遍历为ABDFCEGH,中序遍历为BFDAGEHC。
1.写出该二叉树后序遍历并画出树(5分);
2.将二叉树转化为森林(4分);
3.中序线索二叉树采用加线索的二叉链表存储
typedef struct node{datatype data;//数据域int ltag,rtag;//标记域struct node *lchild,*rchild;}bithptr;设计在中序线索二叉树中寻找指针t所指节点(该节点有右子树)的后继节点(6分,每空3分)
bithptr *INORDERNEXT(bithptr *t){bithptr *p;_________;while(p->ltag == 0)_________;return(p);} 第三题已知6个顶点(顶点为a、b、c、d、e、f)的有向带权图G,其邻接矩阵为三角矩阵,按行为主序(行优先)保存在一纬数组中:{4,6,∞,∞,∞,5,∞,∞,∞,4,3,∞,∞,3,3}
1.写出图G的邻接矩阵;(5分)
2.写出图G的邻接表(出边表);(5分)
3.画出有向带权图G;(5)
第四题将一无序数据序列建成一个大根堆或小根堆,是堆排序首要问题。
1.判断下面的两个数据序列是否为大根堆,如果不是大根堆,请按建立大根堆的数据交换规则把它调成大根堆。(只要写出调整后的堆序列)(6分)
(la)100,90,80,60,85,75,20,25,10,70,65,50;
(lb)100,70,50,20,90,75,60,25,10,85,65,80;
2.设计算法,判断一个有n个数据的数据序列(下标从0开始)是否构成一个大根堆。如果是大根堆返回1,否则返回0。(9分)
int ISMAXHEAP(int R[],int n){ int i; for(i=0;i