一、单选题(每题 2 分,共20分)
1. 栈和队列的共同特点是( A )。
A.只允许在端点处插入和删除元素
B.都是先进后出
C.都是先进先出
D.没有共同点
2. 用链接方式存储的队列,在进行插入运算时( C )
A. 仅修改头指针 B. 头、尾指针都要修改
C. 仅修改尾指针 D.头、尾指针可能都要修改
3. 以下数据结构中哪一个是非线性结构?( D )
A. 队列 B. 栈 C. 线性表 D. 二叉树
4. 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置?脚注(10)表示用10进制表示。( C )
A.688 B.678 C.692 D.696
5. 树最适合用来表示( C )。
A.有序数据元素 B.无序数据元素
C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据
6. 二叉树的第k层的结点数最多为( D ).
A.2k-1 B.2K+1 C.2K-1 D. 2k-1
7. 若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( D )
A. 1,2,3 B. 9,5,2,3
C. 9,5,3 D. 9,4,2,3
二、填空题(每空1分,共26分)
1. 通常从四个方面评价算法的质量:____正确性_____、____可读性_____、____健壮性____和____低存储量____。
2. 一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为___O(n)___。
3. 若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指针。在这种存储结构中,n个结点的二叉树共有____2n____个指针域,其中有____n-1____个指针域是存放了地址,有____n+1____个指针是空指针。
三、编程题
1、先序创建如下二叉树,并对其进行先序、中序和后序遍历,并求出二叉树的总结点数。
2、自己手动创建顺序表,假设顺序表L中的元素为有序递增的,试写一算法,将数据元素X插入到顺序表L中,以保持该顺序表的有序性。
3、试写一个算法,在带头节点的单链表L的元素前插入一个节点Y.
4、试写一个算法,统计带头指针的单链表L的元素个数。
5、建立企业员工信息链表,实现员工信息的输入、删除、查询、和统计员工人数的功能。
提示:链表结构定义如下:
struct stud_node {int num; /*工号*/char name[20]; /*姓名*/int score; /*绩效*/struct stud_node *next; /*指向下个结点的指针*/
};
单向链表的头尾指针保存在全局变量head和tail中。
输入若干个员工信息(工号、姓名、绩效),当输入工号为0时,输入结束。
6、要求实现一个合并两个链表的简单函数,两个链表自行创建填充,合并后,将新链表内容输出即可
7、定义一个栈,实现栈的基本操作。比如栈的删除和插入。