模拟 2得分一.选择题(本大题共15 题,每题 1 分,共15 分 )1.数据在计算机内存中的表示是指A. 数据的存储结构C. 数据的逻辑结构。
B. 数据结构D. 数据元素之间的关系2. 对线性表,在下列情况下应当采用链表表示的是A. 经常需要随机地存取元素B. 经常需要进行插入和删除操作C. 表中元素需要占据一片连续的存储空间D. 表中的元素个数不变。
3.与单链表相比,双链表的优点之一是A.插入、删除操作更加简单。
B.可随机访问。
C.可以省略表头指针或表尾指针D.访问前驱结点更加方便4.如果最常用的操作是取第i 个结点及前驱,则采用A.顺序表B.双链表存储方式最节省时间。
C.单循环链表D.单链表5.可以用带表头附加结点的链表表示线性表,也可以用不带表头附加结点的链表表示线性表,前者最主要的好处是。
A.可以加快对表的遍历C.节省存储空间6. 一个队列的入队序列是1,2,3,4,B. 使空表和非空表的处理统一D. 可以提高存取表元素的速度则队列的输出序列是。
A. 4,3,2,1B. 1,2,3,4C. 1,4,3,2D. 3,2,4,17.栈和队列的共同点是。
A.都是先进先出B.都是先进后出C.属于非线性结构D.只允许在端点处插入和删除元素8.以下不是栈的基本运算的是。
A.删除栈顶元素C.判断栈是否为空B. 删除栈底元素D. 将栈置为空栈9.一个递归的定义可以用递归过程求解,也可以用非递归过程求解,若从运行时间来看,通常__________ 。
A.非递归算法比递归算法快B.非递归算法比递归算法慢10.C.非递归算法与递归算法时间一样D.非递归算法与递归算法时间不一定在一个非空二叉数的中序遍历序列中,根结点的右边。
A. 只有右子树上的所有结点B.只有右子树上的部分结点C. 只有左子树上的部分结点D.只有左子树上的所有结点11. 有关树和二叉树的叙述错误的有。
A. 树中的最大度数没有限制,而二叉树结点的最大度数为2;B.树的结点无左右之分,而二叉树的结点有左右之分;C.树的每个结点的孩子数为 0 到多个 , 而二叉树每个结点均有两个孩子;D.树和二叉树均为树形结构。
12.深度为 k 的完全二叉树至少有个结点,至多有个结点。
A. (2k-1, 2k-1)B. (2k-1, 2k)C. (2k-1, 2k)D. (2k-1-1, 2k-1)13. 具有 4 个顶点的无向完全图,有条边。
A. 3B. 6C. 12D. 1614.一个具有 n 个顶点的无向图,要确保是一个连通图,至少需要条边。
A. n-1B. nC. n+1D. n/215.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。
A. 4B. 2C. 1D. 1/2得分二.填空题(本大题共10 个空,每个空 2 分,共20 分)1. 数据的逻辑结构被分为集合、、、图形结构四种。
2. 数据的存储结构主要分为和两种。
3.不同形式的时间复杂度 O(logn) 、 O(nlogn) 、 O(n)、O(n2)、 O(2n),随着 n 的增长,其增长速度关系为(按从小到大排列)。
4.在单链表中,要删除某一指定的结点,必须找到该结点的。
5. 在一个长度为 n 的顺序表中删除表中的第i 个元素( 0≤ i ≤ n-1)时,需向前移动元素。
6. 已知某无向图的二元组表示为DS=(K, R), K={a, b, c, d, e} , R={r} ,r={(a,b),(a,c),(a,d),(b,e),(d,e),(c,d),<c,b>} ,则顶点 b 的度为。
7. 已知一棵树用广义表表示为a(b, c(d(e(f), g, h), i), j),则此树的度为,深度为。
得分三.解答题 ( 本大题共 3 题,每题 6 分,共 18 分 )3a*b4/- 的操作步骤。
例如 : ABC 变BCA,1.设有字符串3*a-b/ 4 ,试利用栈写出将此次序改变为操作步骤为Push; Push; Pop; Push; Pop; Pop。
2.已知一棵二叉树的中序遍历序列是 abcdjefhgi ,前序遍历序列是 eadcbjfghi,请画出这棵二叉树,并写出这棵二叉树的后序遍历序列。
3. 设有向图 G=(V,E), V={V1,V2,V3,V4,V5,V6}, G 的邻接矩阵如下:0 1 1 0 0 00 0 0 0 1 10 0 0 1 0 01 0 0 0 0 00 0 0 0 0 00 0 0 1 1 0①请画出图G 的强连通分量 ;② 请根据邻接矩阵存储结构有向图的广度优先遍历算法,写出从顶点V1 出发所得到的顶点序列。
得分四.程序阅读题(本大题共 2 题,每题 5 分,共10 分)1. 设 head 为非递减有序的单链表的头指针,单链表中各结点的值依次为( 2, 3, 3, 3, 4, 7, 8, 8, 9,10,10) ,阅读下列算法,写出运行该算法后单链表中各结点的值。
void fun1(LNode* &head ){LNode *p=head, *q;while ( p != NULL && p-> next != NULL ) {if ( p->data == p->next->data) {q = p->next;p->next = q->next;free(q);}else p = p->next;}}2.阅读下列程序,说明该算法的功能。
ElemType fun2(Queue q){ElemType x;Queue temp;InitQueue(temp);while (!QueueEmpty(q)) {x=OutQueue(q);EnQueue(temp, x);}while (!QueueEmpty(temp)) {x=OutQueue(temp);EnQueue(q, x);}return x;}得分五.程序填空题(本大题共 6 个空,每空 2 分,共12 分 ) 阅读下列程序,在空白处填入适当的语句,使算法完整。
1.设有一个顺序表L,其元素为整型数据,下列算法将L 中所有小于大于 0 的整数放在后半部分。
提示:从L 的两端查找,前端找大于0 数据,然后将两位置的数据交换。
顺序表结构定义如下:0 的整数放在前半部分,的数据,后端找小于0 的struct List{ElemType *list; int size; // 动态存储空间的基地址,指针// 线性表当前实际长度int MaxSize; // 当前动态数组分配的长度};算法如下:void Move(List &L){int i=0, j=L.size-1, temp;while(i<j){while (i<j && L.list[i]<0) while (i<j && L.list[j]>0) if (②) { i++;①;temp=L.list[i];L.list[i]= L.list[j];③;}}}2. 下列算法用于输出邻接表表示的无向图中序号为num邻接表结构定义如下:typedef struct node{int adjvex;struct node *next;的顶点的所有邻接点。
} edgenode;typedef edgenode *adjlist[MaxVertexNum];算法如下:void OutAdjVex(adjlist GL, int num){edgenode *p;p =④while (cout<< ⑤⑥;) {;p =p->next;}}得分六.程序设计题(本大题共 2 题,第 1 题 10 分,第 2 题15 分,共25 分 )1.根据下列函数声明编写求二叉树 BT 中所有结点数和叶子结点数的递归算法,其值分别由引用参数 C1 和 C2 带回, C1 和 C2 的初值均为 0。
函数声明为: void Count(BTreeNode *BT , int &C1, int &C2)结点结构定义如下:struct BTreeNode {ElemType data;BTreeNode *left;BTreeNode *right;};2. 设用顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点,请写出双向栈的顺序存储类型定义,以及入栈Push(Stack, i, item) 和出栈Pop(Stack, i) 算法,其中i 为 1 或 2,分别表示在数组两端的两个栈。