A.O(m2)B.O(n2)
C.O(m*n)D.0(m+n)
2.在二维数组中,每个数组元素同时处于()个向量中。
A.0B.1
C.2D.n
3.设有两个串t和P,求P在t中首次出现的位置的运算叫做()。
A.求子串B.模式匹配
C.串替换D.串连接
4.利用双向链表作线性表的存储结构的优点是()。
A.便于单向进行插入和删除的操作
B.便于双向进行插入和删除的操作
C.节省空间
D.便于销毁结构释放空问
5.设链式栈中结点的结构为(data,link),且top是指向栈顶的指针。
若想在链式栈的栈顶插入一个由指针s所指的结点,则应执行()操作。
A.top一>link=S;
B.s一>link=top一>link;top一>link=S;
C.S-->link=top;top—S;
D.s一>link=top;top—top一>link;
6.一棵具有35个结点的完全二叉树的高度为()。
假定空树的高度为一l。
A.5B.6
C.7D.8
7.向具有n个结点的堆中插入一个新元素的时间复杂度为()。
A.O
(1)B.0(n)
C.O(log2n)D.O(nlog2n)
8.在一棵AVL树中,每个结点的平衡因子的取值范围是()。
A.一l~1B.一2~2
C.1~2D.O~1
9.一个有n个顶点和n条边的无向图一定是()的。
A.连通B.不连通
C.无回路D.有回路
二、填空题,在横线处填写合适的内容(每小题2分,共l4分)
1.数据结构包括()、存储结构和对数据的运算这三个方面。
2.一维数组所占用的空间是连续的。
但数组元素不一定顺序存取,通常是按元素的()存取的。
3.将一个n阶对称矩阵的上三角部分或下三角部分压缩存放于一个一维数组中,则该一
维数组需要至少具有()个元素。
4.对于一棵具有n个结点的树,该树中所有结点的度数之和为()。
5.在一棵高度为3的理想平衡二叉树中,最少含有()个结点,假定树根结点的高度为0。
6.假定对长度n=50的有序表进行折半搜索,则对应的判定树中最底层的结点数为()个。
7.用邻接矩阵存储图,占用的存储空间与图中的()数有关。
三、判断题。
在每小题前面打对号表示正确或打叉号表示错误(每小题2分。
共14分)
()1.算法和程序都应具有下面一些特征:
有输入,有输出,确定性,有穷性,有效性。
()2.用字符数组存储长度为n的字符串,数组长度至少为n+1。
()3.在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。
()4.邻接矩阵适用于稀疏图的表示,邻接表适用于稠密图的表示。
()5.对一个无向连通图进行一次深度优先搜索遍历时可以访问到图中的所有顶点。
()6.在索引顺序结构的搜索中,对索引表只可以采取顺序搜索,不可以采用折半搜索。
()7.图中各个顶点的编号是人为的,不是它本身固有的,因此可以根据需要进行改变。
四、运算题(每小题6分,共30分)
1.假定一棵二叉树广义表表示为a(b(c),d(e,f)),分别写出对它进行中序、后序、按层遍历的结果。
中序:
后序:
按层:
2.一个一维数组all2]中存储着有序表(15,26,34,39,45,56,58,63,74,76,80,86),根据折半搜索所对应的判定树,写出该判定树中度为1的结点个数,并求出在等概率情况下进行成功搜索时的平均搜索长度。
度为l的结点个数:
平均搜索长度:
3.假定一个线性序列为(38,42,55,15,23,44,30,74,48,26),根据此线性序列中元素的排列次序生成一棵二叉搜索树,求出该二叉搜索树中左子树为空的所有单支结点、右子树为空的所有单支结点和所有叶子结点,请按照结点值从小到大的次序写出。
左子树为空的所有单支结点:
右子树为空的所有单支结点:
所有叶子结点:
4.已知一个图的顶点集V和边集G分别为:
V={1,2,3,4,5,6};
E={<1,2>,<1,3>,<2,4>,<2,5>,<3,4>,<4,5>,<4,6>,<5,1>,
<5,3>,<6,5>};
假定该图采用邻接表表示,每个顶点邻接表中的边结点都是按照终点序号从小到大的次
序链接的,试写出:
(1)从顶点l出发进行深度优先搜索所得到的顶点序列;
(2)9,N点1出发进行广度优先搜索所得到的顶点序列。
(1):
(2):
5.已知一个数据序列为{16,45,27,23,41,15,56,64},请把它调整为一个最大堆。
最大堆:
五、算法分析题(每小题6分。
共12分)
1·下面算法的功能为:
将两个有序单链表合并成一个有序单链表并返回其表头指针。
阅
读算法,在划有横线的上面填写合适的内容。
ListNode*Mergel(ListNode*.&pl,ListNode*&p2)
{
ListNode*p=newListNode,*f=p;
while(p1!
=NULL&&p2!
=NULL)
{
if(pl-->data<=p2-->data){
p-->link=pl;;
}
else{p->link=p2;p2=p2一>link;}
}
if(pl!
=NULL)p-->link=pl;elsep~>1ink=p2;
pl==p2==NULL;
returnf一>link:
2.已知二叉树中的结点类型BinTreeNode定义为:
structBinTreeNode{ElemTypedata;BinTreeNode*left,*right;};
其中data为结点值域,left和right分别为指向左、右子女结点的指针域。
根据下面算法的定义指出其功能。
算法中参数BT指向一棵二叉树。
BinTreeNode*BTreeSwopX(BinTreeNode*BT)
{
if(BT==NULL)returnNULL;
else{
BinTreeNode*pt=newBinTreeNode;
pt一>data—BT一>data;
pt一>right—BTreeSwopX(BT一>left);
pt一>left=BTreeSwopX(BT-->right);
returnpt;
}
}
算法功能:
六、算法设计题(每小题6分,共12分)
1.已知f为单链表的表头指针,单链表中的结点结构为(data,link),并假定每个结点的值均为大于0的整数。
根据下面函数声明写出递归算法,返回单链表中所有结点的最大值,若单链表为空则返回数值0。
intMax(LinkNode*f);
2.设Q是一个由其队尾指针和队列长度标识的循环队列,按照下面队列定义和函数声明
写出从此队列中删除一个元素的算法。
//循环队列定义
structCyclicQueue
{
ElemTypeelemEM];//M为已定义过的整型常量
intrear;//rear指向队尾元素的后一个位置
intlength:
//length指示队列中元素个数
}5
//若队列非空则删除队头元素并由引用参数x带回,同时返回true;否则若队列为空则返回false。
boolDelCQueue(CyclicQueueQ,ElemType&x);
试题答案及评分标准
一、单项选择题,翟括号内填写所选择的标号(每小题2分,共18分)
1.C2.C3.B4.B5.C6.A7.C8.A9.b
二、填空题。
在横线处填写合适内容(每小题2分,共14分)
1.逻辑结构2.下标(或顺序号)3.n(n+1)/24.n一15.86.197.顶点
三、判断题,在每小题前面打对号表示正确或打叉号表示错误(毒小题2分。
共14分)
1.错2.对3.对4.错
5.对6.错7.对7.对
四、运算题(每小题6分,共30分)
1.中序:
C,b,a,e,d,f
后序:
C,b,e,f,d,a
按层:
a,b,d,C,e,f
2.度为1的结点个数:
5
平均搜索长度:
37/12
3.左子树为空的所有单支结点:
l5,23,42,44
右子树为空的所有单支结点:
30
所有叶子结点:
26,48,74
4.(I)1,2,4,5,3,6//3分
(2)1,2,3,4,5,6//3分
5.最大堆:
{64,45,56,23,41,15,27,16}
五、算法分析题(每小题6分。
共12分)
1.pl2p1一>link、p=p一>link//每空3分
2.生成一棵新二叉树并返回树根指针,该二叉树是已知二叉树BT中所有结点的左、右
子树(或左、右孩子的值)交换的结果。
六、算法设计题(每小题6分。
共12分)
1.评分标准:
按注释酌情给分。
intMax(LinkNode*f)
{
if(f==NULL)return0:
if(f一>link==NULL)returnf一>data;
inttemp=Max(f-->link);
if(f一>data>temp)returnf一>data;
elsereturntemp;
}
2.评分标准:
按注释酌情给分:
boolDelCQueue(CyelieQueueQ,ElemType&x)
{
if(Q.1ength==O)returnfalse;
x—Q.elem[(Q.rear—Q.1ength-t-M)%M];
Q.1ength一一;
returntrue;
}
《数据结构》题库及答案二
一、单项选择题(每小题2分。
共30分)
1.链表所具备的特点是()。
A.可以随机访问任一结点
B.占用连续的存储空间
C.插入删除元素的操作不需要移动元素结点
D.可以通过下标对链表进行直接访问
2.线性结构中数据元素的位置之间存在()的关系。
A.一对一
B.一对多
C.多对多
D。
每一个元素都有一个直接前驱和一个直接后继
3.算法的时间复杂度与()有关。
7
A.所使用的计算机B.与计算机的操作系统
C.与算法本身D.与数据结构
4.在一个单链表中,p、q分别指向表中两个相邻的结点,且q所指结点是P所指结点的直接后继,现要删除q所指结点,可用的语句是()。
A.p=q->nextB.p->next=q
C.p->next=q->nextD.q->next=NULL
5.在一个链队中,假设f和r分别为队头和队尾指针,则删除一个结点的运算为()。
A.r=f->next:
B.r=r->next:
C.f=f一>next;
D.f=r一>next:
6.元素3,6,9按顺序依次进栈,则该栈的不可能输出序列是()(进栈出栈可以交替进行)。
A.9,6,3
B.9,3