数据结构附录A 样卷一
一、判断题:(10 分)正确在括号内打√,错误打×
(×) 1.在单链表中,头结点是必不可少的。
(×)2.如果一个二叉树中没有度为1的结点,则必为满二叉树。
(√) 3. 循环链表的结点结构与单链表的结点结构完全相同,只是结点间的连接方式不同。(×) 4. 顺序存储结构只能用来存放线性结构;链式存储结构只能用来存放非线性结构。(√) 5. 在一个大根堆中,最小元素不一定在最后。
(√) 6. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和。
(√)7. 在采用线性探测法处理冲突的散列表中,所有同义词在表中相邻。
(√)8. 内部排序是指排序过程在内存中进行的排序。
(×)9. 拓扑排序是指结点的值是有序排列。
(×)10. AOE网所表示的工程至少所需的时间等于从源点到汇点的最长路径的长度。
二、选择题(30分, 每题1.5分)
1.有一个含头结点的单链表,头指针为head, 则判断其是否为空的条件为:___B___
A. head==NULL B. Head->next==NULL C.head->next==head D. Head!=NULL 2.非空的循环单链表head的尾指针p满足___C____。
A.p->next=NULL
B.p==NULL
C.P->next==head
D. p==head 3.链表不具有的特点是 A 。
A、可随机访问任一个元素
B、插入删除不需要移动元素
C、不必事先估计存储空间
D、所需空间与线性表的长度成正比
4.若某链表中最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用 D 存储方式最节省运算时间。
A、单链表
B、双链表
C、单循环链表
D、带头结点的双循环链表5.若线性表最常用的操作是存取第i个元素及其前驱的值,则采用D存储方式节省时间。
A、单链表
B、双链表
C、单循环链表
D、顺序表
6.设一个栈的输入序列为A,B,C,D,则借助一个栈所得到的输出序列不可能的是 D 。
A、 A,B,C,D
B、D,C,B,A
C、 A,C,D,B
D、D,A,B,C
7.一个队列的入队序列是1,2,3,4,则队列的输出序列是 B 。
A、4,3,2,1
B、1,2,3,4
C、1,4,3,2
D、3,2,4,1 8.设循环队列中数组的下标范围是1~n,其头尾指针分别为f,r,若队列中元素个数
为 D 。
A、r-f B 、r-f+1 C、(r-f+1)mod n D、(r-f+n)mod n 9.串是 D 。
A、不少于一个字母的序列
B、任意个字母的序列
C、不少于一个字符的序列
D、有限个字符的序列
10.数组A[1..5,1..6]的每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续内存单元中,则A[5,5]的地址是 A 。
A、1140
B、1145
C、1120
D、1125
11.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点编号为1,则编号为49的结点的左孩子的编号为 A 。
A、98
B、99
C、50
D、48
12.对二叉树从1开始编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用 C 实现编号。
A、先序遍历
B、中序遍历
C、后序遍历
D、从根开始进行层次遍历
13.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是 B 的二叉树。
A、空或只有一个结点
B、高度等于其结点数
C、任一结点无左孩子
D、任一结点无右孩子
14.在有n个叶子结点的哈夫曼树中,其结点总数为 C 。
A、不确定
B、2n
C、2n+1
D、2n-1
15.一个有n个顶点的无向图最多有 C 条边。
A、n
B、n(n-1)
C、n(n-1)/2
D、2n
16.任何一个无向连通图的最小生成树 B 。
A、只有一棵
B、有一棵或多棵
C、一定有多棵
D、可能不存在
17.一组记录的关键字为(46,79,56,38,40,84),利用快速排序的方法,以第一个
记录为基准得到的一次划分结果为 C 。
A、38,40,46,56,79,84
B、40,38,46,79,56,84
C、40,38,46,56,79,84
D、40,38,46,84,56,79
18.已知数据表A中每个元素距其最终位置不远,则采用 B 排序算法最节省时间。
A、堆排序
B、插入排序
C、快速排序
D、直接选择排序
19.下列排序算法中,C 算法可能会出现下面情况:初始数据有序时,花费时间反而最多。
A、堆排序
B、冒泡排序
C、快速排序
D、SHELL 排序
20.对于键值序列(12,13,11,18,60,15,7,18,25,100),用筛选法建堆,必须
从键值为 B 的结点开始。
A、100
B、60
C、12
D、15
三、填空题(40分)
1 在顺序表(即顺序存储结构的线性表)中插入一个元素,需要平均动表长的一半个元素.
2.快速排序的最坏情况,其待排序的初始排列是排好序列.
4. 一个栈的输入序列为123,写出不可能是栈的输出序列312。
5. N个结点的二叉树,采用二叉链表存放,空链域的个数为N+1.
6. 要在一个单链表中p所指结点之后插入s所指结点时,
应执行S->next=P->next 和P->next=S的操作.
7.Dijkstra算法是按路径递增的次序产生一点到其余各顶点最短路径的算法.
8.在N个结点完全二叉树中,其深度是Log(2)(N).
9.对二叉排序树进行中序遍历, 可得到结点的有序排列.
10.设一哈希表表长M为100 ,用除留余数法构造哈希函数,即H(K)=K MOD P(P〈=M〉, 为使函数具有较好性能,P应选97
11.单链表与多重链表的区别是链域个数不同
12.深度为6(根层次为1)的二叉树至多有 63 个结点。
13.已知二维数组A[0..20][0..10]采用行序为主方式存储,每个元素占4个存储单元,并且A[0][0]的存储地址是1016, 则A[10][5]的存储地址是1476
14.循环单链表La中,指针P所指结点为表尾结点的条件是P->next=head
15.在查找方法中,平均查找长度与结点个数无关的查找方法是散列查找。
16.队列的特性是先进先出
17.具有3个结点的二叉树有 5
种
18.已知一棵二叉树的前序序列为ABDFCE ,中序序列为DFBACE ,后序序列为 FDBECA
19.已知一个图的邻接矩阵表示,要删除所有从第i 个结点出发的边,在邻接矩阵运算是 将矩阵第i 行全部置0 四、构造题:(30 分)
1.已知关键字序列为:(75, 33, 52, 41, 12, 88, 66, 27)哈希表长为10,哈希函数为:
H(k)=K MOD 7, 解决冲突用线性探测再散列法,构造哈希表,求等概率下查找成功的平均查找长度。 答:
计算函数值
1)
哈希表(4分,每对1个0.5分)
index 0 1 2 3 4 5 6 7 8 9 key
27
52
88
75
33
41
12
66
ASL=(1+2+1+2+4+1+7+5)/8=23/8
2.已知无向图如图1所示, (1)给出图的邻接表。
(2)从A 开始,给出一棵广度优先生成树。
key 75 33 52 41 12 88 66 27 计算函数值
Key%7
5
5
3
6
5
4
3
6
比较次数
Cmp
1
2
1
2
4
1
7
5
3.给定叶结点权值:(1,3,5,6,7,8),构造哈夫曼树,并计算其带权路径长度
30
17 13
9 8 6 7
4 5
1 3
WPL=1*4+3*4+5*3+6*2+7*2+8*2=73
4.从空树开始,逐个读入并插入下列关键字,构造一棵二叉排序树:
(24,88,42,97,22,15,7,13)。
24
22 88
15 42 97
7
13
5.对长度为8的有序表,给出折半查找的判定树,给出等概率情况下的平均查找长度。
ASL=(1+2*2+4*3+1*4)/8=21/8=2.62
6.已知一棵树如图2所示,要求将该树转化为二叉树。
1 A B C D
2 B A C F
3 C A B D E F
4 D A C F
5 E B C F
6 F D C E
3
1
7
5
6
2 4
A B
C
E D F
I G
J H K
五、算法设计题(40分)
[算法题可用类PASCAL 或类C 语言,每题20分]
1.已知一棵二叉树采用二叉链表存放,写一算法,要求统计出二叉树中叶子结点个数并输
出二叉树中非终端结点(输出无顺序要求)。 struct Btree { int data; struct Btree *left; struct Btree *right; }; int count(Btree *T) { Btree *st[50]; int top= -1; Btree *p; int sum=0; if(T!=NULL) { top++; st[top]=T; while(top>-1) { p=st[top];
top--; if(p->right!=NULL) { top++; st[top]=p->right; } if(p->left!=NULL) { top++; st[top]=p->left; } if(p->left==NULL&&p->right==NULL) { sum++; } } return sum; } } 2.编写算法,判断带头结点的双循环链表L 是否对称。
对称是指:设各元素值a 1,a 2,...,a n , 则有a i =a n-i+1 即指:a 1= a n ,a 2= a n-1 。。。。。。 结点结构为
数据结构 附录B 样卷二
一、简答题(15分,每小题3分) 1.简要说明算法与程序的区别。
算法是解决特定问题的操作序列,可以用多种方式描述。程序是算法在计算机中的实现,与具体的计算机语言有关。
2.在哈希表中,发生冲突的可能性与哪些因素有关?为什么?
主要与哈希函数、装填因子α有关。如果用哈希函数计算的地址分布均匀,则冲突的可能性较小,如果装填因子α较小,则哈希表较稀疏,发生冲突的可能性较小。
3.说明在图的遍历中,设置访问标志数组的作用。
图中结点可能有多个前驱,设置访问标志数组主要是为了避免重复访问同一个结点。
4.说明以下三个概念的关系:头指针,头结点,首元素结点。
头指针指向头结点,头结点的后继域指向首元素结点。
5.在一般的顺序队列中,什么是假溢出?怎样解决假溢出问题?
当队尾到达数组最后一个单元时,就认为队满,但此时数组前面可能还有空单元,因此叫假溢出。解决的方法是采用循环队列,即令最后一个单元的后继是第一个单元。
二、判断题(10分,每小题1分)
正确在括号内打√,错误打×
(√)(1)广义表((( a ), b), c ) 的表头是(( a ), b),表尾是( c )。
(×)(2)在哈夫曼树中,权值最小的结点离根结点最近。
(×)(3)基数排序是高位优先排序法。
(√)(4)在平衡二叉树中,任意结点左右子树的高度差(绝对值)不超过1。
(×)(5)在单链表中,给定任一结点的地址p,则可用下述语句将新结点s插入结点p 的后面:p->next = s; s->next = p->next;
(√)(6)抽象数据类型(ADT)包括定义和实现两方面,其中定义是独立于实现的,定义仅给出一个ADT的逻辑特性,不必考虑如何在计算机中实现。
(×)(7)数组元素的下标值越大,存取时间越长。
(√)(8)用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。
(×)(9)拓扑排序是按AOE网中每个结点事件的最早发生时间对结点进行排序。
(×)(10)长度为1的串等价于一个字符型常量。
三、单项选择题(10分, 每小题1分)
1.排序时扫描待排序记录序列,顺次比较相邻的两个元素的大小,逆序时就交换位置。这是哪种排序方法的基本思想?D
A、堆排序
B、直接插入排序
C、快速排序
D、冒泡排序
2.已知一个有向图的邻接矩阵表示,要删除所有从第i个结点发出的边,应该:B
A)将邻接矩阵的第i行删除 B)将邻接矩阵的第i行元素全部置为0
C)将邻接矩阵的第i列删除 D)将邻接矩阵的第i列元素全部置为0
3.有一个含头结点的双向循环链表,头指针为head, 则其为空的条件是:C
A.head->priro==NULL
B. head->next==NULL
C.head->next==head
D. head->next-> priro==NULL
4. 在顺序表 ( 3, 6, 8, 10, 12, 15, 16, 18, 21, 25, 30 ) 中,用折半法查找关键码值11,所需的关键码比较次数为:C
A) 2 B) 3 C) 4 D) 5
5. 以下哪一个不是队列的基本运算?B
A)从队尾插入一个新元素 B)从队列中删除第i个元素
C)判断一个队列是否为空 D)读取队头元素的值
i个位置上插入一个元素(1≤ i ≤n+1),元素的移动次数为:
– i C) i D) i – 1
7:C
A) 顺序表 B) 用头指针表示的循环单链表
C) 用尾指针表示的循环单链表 D) 单链表
8.对包含n个元素的哈希表进行查找,平均查找长度为:D
A) O(log2n) B) O(n) C) O(nlog2n) D) 不直接依赖于n
9.将一棵有100个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点编号为1,则编号最大的非叶结点的编号为:C
A、48
B、49
C、50
D、51
10.某二叉树结点的中序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E,则其左子树中结点数目为:C
A)3 B)2 C)4 D)5
四、填空题(10分,每空1分)
1.填空完成下面一趟快速排序算法:
int QKPass ( RecordType r [ ], int low, int high)
{ x = r [ low ];
while ( low < high )
{
while ( low < high && r [ high ]. key >= x.key )
high - -;
if ( low < high )
{ r [ low ] = r [ high ]; low++; }
while ( low < high && r [ low ]. key < x. key )
low++;
if ( low < high )
{ r [ high ] = r [ low ]; high--; }
}
r [ low ] = x; return low ;
}
2. 假设用循环单链表实现队列,若队列非空,且队尾指针为R, 则将新结点S加入队列时,需执行下面语句: S->next=R->next ; R->next=S ; R=S;
3.通常是以算法执行所耗费的时间和所占用的空间来判断一个算法的优劣。4.已知一个3行、4列的二维数组A(各维下标均从1开始),如果按“以列为主”的顺序存储,则排在第8个位置的元素是:A[2, 3]
5.高度为h的完全二叉树最少有 2h-1个结点。
五、构造题(20 分)
1.(4分)已知数据结构DS的定义如下,请给出其逻辑结构图示。
DS = (D, R)
D = { a, b, c, d, e, f, g }
R = { T }
2.(6分)对以下关键字序列建立哈希表:(SUN, MON, TUE, WED, THU, FRI, SAT),哈希函数为H(K) =(K中最后一个字母在字母表中的序号)MOD 7。用线性探测法处理冲突,要求构造一个装填因子为0.7的哈希表,并计算出在等概率情况下查找成功的平均查找长度。
解:装填因子=元素个数/表长,得哈希表长度=7/0.7=10
各关键字第一个字母的序号分别为:19(S),13(M),20(T),23(W),6(F)
key SUN MON TUE WED THU FRI SAT
计算函数值Key%7 5 6 6 2 6 6 5
比较次数Cmp 1 1 2 1 3 4 6
index 0 1 2 3 4 5 6 7 8 9
key SAT WED SUN MON TUE THU FRI
ASL=(6+1+1+1+2+3+4)18/7
3.(6分)将关键字序列(3,26,12,61,38,40,97,75,53, 87)调整为大根堆。
4.(4分)已知权值集合为:{ 5,7,2,3,6,9 },要求给出哈夫曼树,并计算其带权路径长度WPL。
WPL = 2×( 9 + 6 + 7 ) + 3×5 + 4×( 2 + 3 ) = 79
六、算法分析题(10分)
阅读下面程序,并回答有关问题。其中BSTree为用二叉链表表示的二叉排序树类型。(1)简要说明程序功能。(5分)
(2)n个结点的满二叉树的深度h是多少?(3分)
(3)假设二叉排序树*bst是有n个结点的满二叉树,给出算法的时间复杂度。(2分)int Proc (BSTree *bst, KeyType K)
{ BSTree f, q, s;
s=(BSTree)malloc(sizeof(BSTNode));
s-> key = K; s-> lchild = NULL; s-> rchild = NULL;
if ( *bst == NULL ) { *bst = s; return 1; }
f = NULL; q = *bst;
while( q != NULL )
{ if ( K < q -> key )
{ f = q; q = q -> lchild; }
else
{ f = q; q = q -> rchild; }
}
if ( K < f -> key ) f -> lchild = s;
else f -> rchild = s;
return 1;
}
解:
(1) 在二叉排序树中插入关键字为K的结点
(2) h = log2 ( n+1 ) 或 h = [ log2 n ] + 1 (方括号表示向下取整)
(3) O ( log2 ( n+1 ) ) 或 O ( log2 n )
七、算法设计题(25分)
1.已知一个带头结点的整数单链表L,要求将其拆分为一个正整数单链表L1和一个负整数单链表L2。(9分)
LinkList *q;
q=L->head;
while(q)
{
if(q->data>0)
{
q->next=L1->head->next;
L1->head=q;
}
else
{
q->next=L2>head->next;
L2->head=q;
}
q++;
}
2.无向图采用邻接表存储结构,编写算法输出图中各连通分量的结点序列。(8分)
3.编写一个建立二叉树的算法,要求采用二叉链表存储结构。(8分)
Void GreateBiTree(BiTree *bt)
{ char ch;
ch=getchar( );
if(ch= =’.’)*bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt) data=ch;
GreatBiTree(&((*bt) LChild));
GreatBiTree(&((*bt) RChild));
}
}
《数据结构》期末考试试题及答案 (2003-2004学年第2学期) 单项选择题1、C 2、D 3、A 4、D 5、C 6、D 7、A 8、B 9、C 10、C 、 1. 对于一个算法,当输入非法数据时,也要能作出相应的处理,这种要求称为 (c )。 (A)、正确性但).可行性(C).健壮性 2 ?设S为C语言的语句,计算机执行下面算法时, for(i=n-1 ; i>=0; i--) for(j=0 ; jvi; j++) (A)、n2(B). O(nlgn) 3?折半查找法适用于( a (D). 输入性 算法的时间复杂度为(d S; (C). O(n) (D). )。 O(n2) (A)、有序顺序表(B)、有序单链表 (C)、有序顺序表和有序单链表都可以 4 .顺序存储结构的优势是( d )。 (A)、利于插入操作(B)、利于删除操作 (C)、利于顺序访问(D)、利于随机访问 5. 深度为k的完全二叉树,其叶子结点必在第 (A)、k-1 ( B)、k (C)、k-1 和 6. 具有60个结点的二叉树,其叶子结点有 (A)、11 ( B)、13 ( C)、48 (D)、无限制 c )层上。 (D)、1 至 k 12个,则度过1 (D)、37 k 的结点数为( 7 .图的Depth-First Search(DFS) 遍历思想实际上是二叉树( 法的推广。 (A)、先序(B)、中序(C)、后序(D)、层序 8.在下列链队列Q中,元素a出队的操作序列为( a )遍历方 front (A )、 (B )、 (C)、 (D )、p=Q.front->next; p->next= Q.front->next; p=Q.front->next; Q.front->next=p->next; p=Q.rear->next; p->next= Q.rear->next; p=Q->next; Q->next=p->next; 9. Huffman树的带权路径长度WPL等于( (A)、除根结点之外的所有结点权值之和(C)、各叶子结点的带权路径长度之和(B) 、 ) 所有结点权值之和 根结点的值 b ■
绪论第1章 √(2)×(3)2.(1)×C )C(3(1)A(2)3. 的语句频度5.计算下列程序中x=x+1for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) x=x+1; 的语句频度为:【解答】x=x+1=n(n+1)(n+2)/6 )+……+(1+2+……+n)T(n)=1+(1+2)+(1+2+3 并确定算法中每一),p(xx+ax+a+…….+ax的值6.编写算法,求一元多项式p(x)=a n20nn20n1规定算法中不能使用要求时间复杂度尽可能小,语句的执行次数和整个算法的时间复杂度,算法的输入和输出)。n,输出为P(x求幂函数。注意:本题中的输入为a(i=0,1,…n)、x和0in采用下列方法1)通过参数表中的参数显式传递()通过全局变量隐式传递。讨论两种方法的优缺点,并在算法中以你认为较好的一种实(2 现输入输出。【解答】1)通过参数表中的参数显式传递(优点:当没有调用函数时,不占用存,调用结束后形参被释放,实参维持,函数通用 性强,移置性强。缺点:形参须与实参对应,且返回值数量有限。 )通过全局变量隐式传递(2 优点:减少实参与形参的个数,从而减少存空间以及传递数据时的时间消耗 缺点:函数通用性降低,移植性差 算法如下:通过全局变量隐式传递参数PolyValue() { int i,n; float x,a[],p; nn=”);printf(“\ scanf(“%f”,&n); nx=”);printf(“\ scanf(“%f”,&x); for(i=0;i 北京师范大学2011~2012学年第 1 学期期末考试试卷(A 卷) 课程名称: 数据结构 任课教师姓名: 刘玉铭 卷面总分: 100 分 考试时长: 100 分钟 考试类别:闭卷 院(系): 数学科学学院 专 业: 年级: 2010 姓 名: 学 号: 阅卷教师(签字): 一、 单项选择题(每题2分,共10题20分) 1.以下那一个术语与数据的存储结构无关? 。 A .栈 B .哈希表 C .线索树 D .双向链表 2.链表不具有的特点是 。 A .插入、删除不需要移动元素 B .可随机访问任一元素 C .不必事先估计存储空间 D .所需空间与线性表长度成正比 3.算术表达式a+b*(c+d/e )转为后缀表达式后为 。 A .ab+cde/* B .abcde/+*+ C .abcde/*++ D .abcde*/++ 4.二维数组A[10][20]采用列优先的存储方法,若每个元素占2个存储单元,设A[0][0]的地址为100,则元素A[7][6]的存储地址为 。 A .232 B .234 C .390 D .392 装 订 线 5.若一棵二叉树具有10 个度为2 的结点,5 个度为1 的结点,则度为0 的结点个数是。 A.9 B.11 C.15 D.不确定 6.一棵二叉树中序序列为FEABDC,后序序列为FBADCE,则层序序列为。 A. ABCDEF B. EFCDBA C. FECDAB D. EFCDAB 7.在有向图G 的拓扑序列中,若顶点Vi 在顶点Vj 之前,则下列情形不可能出现的是。 A.G 中有弧 2017年数据结构期末考试题及答案 一、选择题(共计50分,每题2分,共25题) 1 ?在数据结构中,从逻辑上可以把数据结构分为 C 。 A. 动态结构和静态结构B?紧凑结构和非紧凑结构 C.线性结构和非线性结构 D .内部结构和外部结构 2?数据结构在计算机内存中的表示是指 A ° A. 数据的存储结构 B.数据结构 C.数据的逻辑结构 D .数据元 素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A. 逻辑B?存储 C.逻辑和存储 D.物理 4 .在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C ° A.数据的处理方法B?数据元素的类型 C.数据元素之间的关系 D.数据的存储方法 5. 在决定选取何种存储结构时,一般不考虑 A ° A.各结点的值如何B?结点个数的多少 C?对数据有哪些运算 D.所用的编程语言实现这种结构是否方便。 6. 以下说法正确的是D ° A. 数据项是数据的基本单位 B. 数据元素是数据的最小单位 C. 数据结构是带结构的数据项的集合 D. —些表面上很不相同的数据可以有相同的逻辑结构 7. 在以下的叙述中,正确的是B ° A. 线性表的顺序存储结构优于链表存储结构 B. 二维数组是其数据元素为线性表的线性表 C?栈的操作方式是先进先出 D.队列的操作方式是先进后出 8. 通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着 A. 数据元素具有同一特点 B. 不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致 C. 每个数据元素都一样 D. 数据元素所包含的数据项的个数要相等 9 ?链表不具备的特点是 A 。 A.可随机访问任一结点 B.插入删除不需要移动元素 C?不必事先估计存储空间 D.所需空间与其长度成正比 10. 若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一 个结点,则采用 D 存储方式最节省运算时间。 A.单链表B ?给出表头指针的单循环链表 C.双链表D ?带头结点 的双循环链表 11. 需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 B 。 A.单链表B .静态链表 C.线性链表 D .顺序存储结构 12 .非空的循环单链表head的尾结点(由p所指向)满足C 。 A. p—>next 一NULL B. p — NULL C. p—>next == head D. p = = head 13 .在循环双链表的p所指的结点之前插入s所指结点的操作是 D 。 A .p—> prior-> prior=s B .p—> prior-> n ext=s C.s —> prior—> n ext = s D.s —> prior—> prior = s 14 .栈和队列的共同点是C 。 A.都是先进后出 B .都是先进先出 C.只允许在端点处插入和删除元素 D .没有共同点 第一章答案 1.3计算下列程序中x=x+1的语句频度 for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) x=x+1; 【解答】x=x+1的语句频度为: T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/6 1.4试编写算法,求p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执 行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。 【解答】 (1)通过参数表中的参数显式传递 优点:当没有调用函数时,不占用存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。 缺点:形参须与实参对应,且返回值数量有限。 (2)通过全局变量隐式传递 优点:减少实参与形参的个数,从而减少存空间以及传递数据时的时间消耗 缺点:函数通用性降低,移植性差 算法如下:通过全局变量隐式传递参数 PolyValue() { int i,n; float x,a[],p; printf(“\nn=”); scanf(“%f”,&n); printf(“\nx=”); scanf(“%f”,&x); for(i=0;i 东华理工大学2015 —2016学年第 一 学期考试 模拟试卷 A 一、 填空题(50分) 1、数据结构是一门研究非数值计算的程序设计问题中的 数据元素 以及它们之间 关系 和运算等的科学。(2分) 2、数据结构的类型通常分为: 集合、线性结构、树形结构、图状结构或网状结构 ;从逻辑上可以把它们分成: 线性结构和非线性结构 。 3、数据的 逻辑结构 只抽象反映数据元素的 逻辑关系 ;数据的 存储(物理)结构 是数据的逻辑结构 在计算机存储器中的实现 。 4、算法分析的目的是分析算法的 效率以求改进 ,算法分析的两个主要方面是 空间复杂度和时间复杂度 。 A 5、计算机算法是解决问题的 有限运算序列 ,它必须具备 输入、输出、确定性、有穷性和稳定性 等5个方面的特性。 6、线性结构中元素之间的关系存在 一对一 关系,树形结构中元素之间的关系存在 一对多 关系,图形结构中元素之间的关系存在 多对多 关系。 7、试写出以下算法的时间复杂度 i=s=0 while (s i = i*2 O(log2n) 8、抽象数据类型的定义由三元组来定义:(D,S,P)其中,D是数据对象, S是D上的关系集,P是对D的基本操作集。 9、写出抽象数据类型线性表的定义 ADT List{ 数据对象:D={ai | ai ∈Elemset, i=1,2,…,n,n≥0} 数据关系:R={< ai-1 , ai> | ai-1 , ai ∈D, i=2,…,n} 基本操作: InitList(&L) //构造一个空的线性表L DestroyList(&L) //消毁线性表L ListLength(L) //返回L中数据元素的个数 ListInsert(&L,i,e) // 1 ≤ i ≤ ListLength(L)+1,在L中第i个位置之前插入数据元素e,L长度加1 ListDelete(&L,i,&e) // 1 ≤ i ≤ ListLength(L),删除L中的第i个元素,并用e 返回 ListTraverse(L,visit()) //依次对L的每个元素调用函数visit() ………… } ADT List 10、指出线性表顺序存储、链式存储结构的优缺点。 答:顺序存储优点:逻辑上相邻,物理位置也相邻,可以随机存取表中任一元素;缺点:插入和删除元素时需要移动大量元素。 链式存储结构优点:插入、删除元素时不需要移动元素;缺点:逻辑上相邻,物理位置不一定相邻,不能随机存取表中元素,需要依次查找,求线性表的长度时不如顺序存储结构方便,需要逐个结点搜索计算,或设置带头结点的线性链表。 11、完成下列在单链表中删除元素算法 Status ListDelete_L(LinkList &L, int i, ElemType &e){ //删除第i个元素e p = L; j =0; //p指向头结点 while(p->next && j 第一章习题答案 2、××√ 3、(1)包含改变量定义的最小范围 (2)数据抽象、信息隐蔽 (3)数据对象、对象间的关系、一组处理数据的操作 (4)指针类型 (5)集合结构、线性结构、树形结构、图状结构 (6)顺序存储、非顺序存储 (7)一对一、一对多、多对多 (8)一系列的操作 (9)有限性、输入、可行性 4、(1)A(2)C(3)C 5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n) 第二章习题答案 1、(1)一半,插入、删除的位置 (2)顺序和链式,显示,隐式 (3)一定,不一定 (4)头指针,头结点的指针域,其前驱的指针域 2、(1)A(2)A:E、A B:H、L、I、E、A C:F、M D:L、J、A、G或J、A、G (3)D(4)D(5)C(6)A、C 3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。 头结点:为了操作方便,可以在单链表的第一个结点之前附设一个结点,该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。 首元素结点:线性表中的第一个结点成为首元素结点。 4、算法如下: int Linser(SeqList *L,int X) { int i=0,k; if(L->last>=MAXSIZE-1) { printf(“表已满无法插入”); return(0); } while(i<=L->last&&L->elem[i] L->last++; return(1); } 5、算法如下: #define OK 1 #define ERROR 0 Int LDel(Seqlist *L,int i,int k) { int j; if(i<1||(i+k)>(L->last+2)) { printf(“输入的i,k值不合法”); return ERROR; } if((i+k)==(L->last+2)) { L->last=i-2; ruturn OK; } else {for(j=i+k-1;j<=L->last;j++) elem[j-k]=elem[j]; L->last=L->last-k; return OK; } } 6、算法如下: #define OK 1 #define ERROR 0 Int Delet(LInkList L,int mink,int maxk) { Node *p,*q; p=L; while(p->next!=NULL) p=p->next; if(mink 注意事项: 1、下面关于串的叙述中,哪一个是不正确的?( ) A .串是字符的有限序列 B .空串是由空格构成的串 C .模式匹配是串的一种重要运算 D .串既可以采用顺序存储,也可以采用链式存储 2、设无向图的顶点个数为n ,则该图最多有( )条边。 A .n-1 B .n(n-1)/2 C . n(n+1)/2 D .0 3、以下数据结构中,( )是非线性数据结构。 A .树 B .字符串 C .队列 D .栈 4、下面关于线性表的叙述中,错误的是哪一个?( ) A .线性表采用顺序存储,必须占用一片连续的存储单元。 B .线性表采用顺序存储,便于进行插入和删除操作。 C .线性表采用链接存储,不必占用一片连续的存储单元。 D .线性表采用链接存储,便于插入和删除操作。 5、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front 和rear ,则当前队列中的元素个数为( )。 A .(rear-front+m)%m B .rear-front+1 C .(front-rear+m)%m D .(rear-front)%m 6、在单链表指针为p 的结点之后插入指针为s 的结点,正确的操作是( )。 A .p->next=s; s->next=p->next; B .s->next=p->next; p->next=s; C .p->next=s; p->next=s->next; D .p->next=s->next; p->next=s; 7、设栈的输入序列是1,2,3,4,则( )不可能是其出栈序列。 A .1,2,4,3 B .2,1,3,4 C .1,4,3,2 D .4,3,1,2, 8、广义表(a,(b,c),d,e )的表头和表尾分别为( )。 A .a 和(b,c),d,e B .(a )和(b,c),d,e C .a 和 ((b,c),d,e) D .(a) 和((b,c),d,e) 9、栈和队都是( ) A .顺序存储的线性结构 B .链式存储的非线性结构 C .限制存取点的线性结构 D .限制存取点的非线性结构 10、从逻辑上可以把数据结构分为( )两大类。 A .动态结构、静态结构 B .顺序结构、链式结构 C .线性结构、非线性结构 D .初等结构、构造型结构 11、下列四个序列中,哪一个是堆( )。 A .75,65,30,15,25,45,20,10 B .75,65,45,10,30,25,20,15 C .75,45,65,30,15,25,20,10 D .75,45,65,10,25,30,20,15 12、在下述结论中,正确的是( ) ①只有一个结点的二叉树的度为0; ②二叉树的度为2; ③二叉树的左右子树可任意交换; ④深度为K 的完全二叉树结点个数小于或等于深度相同的满二叉树。 A .①②③ B .②③④ C .②④ D .①④ 13、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( ) A .9 B .11 C .15 D .不确定 14、设森林F 中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。 与森林F 对应的二叉树根结点的右子树上的结点个数是( )。 A .M1 B .M1+M2 C .M3 D .M2+M3 15、在下面的程序段中,对x 的赋值语句的频度为( )。 FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A . O(2n) B .O(n) C .O(n 2) D .O(log2n) 16、一个n 个顶点的连通无向图,其边的个数至少为( )。 A .n-1 B .n C .n+1 D .nlogn ; 17、二叉树的第I 层上最多含有结点数为( ) A .2I B . 2I-1-1 C . 2I-1 D .2I -1 18、下列排序算法中( )排序在一趟结束后不一定能选出一个元素放在其最终位置上。 A .选择 B .冒泡 C .归并 D .堆 19、二维数组A 的元素都是6个字符组成的串,行下标i 的范围从0到8,列下标j 的范围从1到10。若A 按行存放,元素A[8,5]的起始地址与A 按列存放时的元素( )的起始地址一致。 A .A[8,5] B . A[3,10] C . A[5,8] D . A[0,9] 20、散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址,因为散列函数是一对一的关系,则选择好的( )方法是散列文件的关键。 A .散列函数 B .除余法中的质数 C .冲突处理 D .散列函数和冲突处理 期末考试《数据结构》A 卷 一、单项选择题(请将正确答案的字母填写在每题对应的括号内,每小题1分,共20分) 姓名:________ 学号:__________ 年级:______________ 专业:_____________ …….……………………….密…………………封…………………线………………………… .栈通常采用的两种存储结构是______________________ .用链表表示线性表的优点是_______________________ 8.在单链表中,增加头结点的目的是___________________ 9.循环链表的主要优点是________________________- 12.线性表的顺序存储结构和线性表的链式存储结构分别是__________________________ 13.树是结点的集合,它的根结点数目是_____________________ 14.在深度为5的满二叉树中,叶子结点的个数为_______________ 15.具有3个结点的二叉树有(_____________________ 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为____________________ 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是____________________________ 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为______________________ 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是_______________________ 20.数据库保护分为:安全性控制、完整性控制、并发性控制和数据的恢复。 在计算机中,算法是指_______________________ 算法一般都可以用哪几种控制结构组合而成_____________________ .算法的时间复杂度是指______________________ 5. 算法的空间复杂度是指__________________________ 6. 算法分析的目的是__________________________ 2005年-2006学年第二学期“数据结构”考试试题(A) 姓名学号(序号)_ 答案隐藏班号 要求:所有的题目的解答均写在答题纸上(每张答题纸上要写清楚姓名、班号和学号),需写清楚题目的序号。每张答题纸都要写上姓名和序号。 一、单项选择题(每小题2分,共20分) 1.数据的运算a 。 A.效率与采用何种存储结构有关 B.是根据存储结构来定义的 C.有算术运算和关系运算两大类 D.必须用程序设计语言来描述 答:A。 2. 链表不具备的特点是 a 。 A.可随机访问任一结点 B.插入删除不需要移动元素 C.不必事先估计存储空间 D.所需空间与其长度成正比 答:参见本节要点3。本题答案为:A。 3. 在顺序表中删除一个元素的时间复杂度为 c 。 A.O(1) B.O(log2n) C.O(n) D.O(n2) 答:C。 4.以下线性表的存储结构中具有随机存取功能的是 d 。 A. 不带头结点的单链表 B. 带头结点的单链表 C. 循环双链表 D. 顺序表 解 D。 5. 一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是 c 。 A.edcba B.decba C.dceab D.abcde 答:C。 6. 循环队列qu的队空条件是 d 。 A. (qu.rear+1)%MaxSize==(qu.front+1)%MaxSize B. (qu.rear+1)%MaxSize==qu.front+1 C.(qu.rear+1)%MaxSize==qu.front D.qu.rear==qu.front 答:D。 7. 两个串相等必有串长度相等且 b 。 A.串的各位置字符任意 B.串中各位置字符均对应相等 C.两个串含有相同的字符 D.两个所含字符任意 答:B。 8. 用直接插入排序对下面四个序列进行递增排序,元素比较次数最少的是c 。 A.94,32,40,90,80,46,21,69 B.32,40,21,46,69,94,90, 80 C.21,32,46,40,80,69,90,94 D.90,69,80,46,21,32,94, 40 答:C。 9. 以下序列不是堆(大根或小根)的是 d 。 A.{100,85,98,77,80,60,82,40,20,10,66} B.{100,98,85,82,80, 77,66,60,40,20,10} C.{10,20,40,60,66,77,80,82,85,98,100} D.{100,85,40,77,80, 60,66,98,82,10,20} 第一章绪论 1.数据:人们利用文字符号、数字符号及其他规定的符号对现实世界的事物及其活动的描述。凡是能被计算机输入、存储、处理和输出的一切信息都叫数据。 2.数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据元素的组成:一个数据元素通常由一个或若干数据项组成。 数据项:指具有独立含义的最小标识单位。 3.数据对象:性质相同的数据元素的集合,是数据的一个子集。 4.数据结构:研究的是数据的逻辑结构和物理结构,以及它们之间的相互关系和所定义的算法在计算机上运行的学科。 5.算法:是对待定问题求解步骤的一种描述,是指令的有限序列。算法应满足以下性质: 1)输入性:具有零个或若干个输入量; 2)输出性:至少产生一个输出; 3)有穷性:每条指令的执行次数是有限的; 4)确定性:每条指令的含义明确,无二义性; 5)可行性:每条指令都应在有限的时间内完成。 6.评价算法优劣的主要指标: 1)执行算法后,计算机运行所消耗的时间,即所需的机器时间; 2)执行算法时,计算机所占存储量的大小,即所需的存储空间; 3)所设计的算法是否易读、易懂,是否容易转换成其他可运行的程序语言。 7.会估算某一算法的总执行时间和时间复杂度。 8.熟悉习题P32:3(5)-(9)、4(2)(3) 第二章线性表 1.线性表(P7):是性质相同的一组数据元素序列。 线性表的特性: 1)数据元素在线性表中是连续的,表中数据元素的个数可以增加或减少,但调整后数据元素仍必须是连续的,即线性表是一种线性结构。 2)数据元素在线性表中的位置仅取决于自己在表中的序号,并由该元素数据项中的关键字(key)加以标识。 3)线性表中所有数据元素的同一数据项,其属性是相同的,数据类型也是一致的。 线性表的主要运算有:插入、删除、查找、存取、长度、排序、复制、合并。 线性表的顺序存储结构及特点(就是把表中相邻的数据元素存放在内存邻接的存储单元,这种存储方法叫做顺序分配,又称顺序映像。其特点:逻辑上相邻的数据元素, 它们的物理次序也是相邻的。),存储地址的计算方式(Loc(a i )=Loc(a )+i*s)。 2.线性表的查找、插入和删除 熟悉线性表的查找算法(P38)、插入算法(P39)和删除算法(P40)。 3.理解线性表的顺序存储结构的优缺点。 4.熟悉线性链表的存储结构(P43) 线性链表(由若干结点链接而成的一种存储结构。)、结点(由存放数据元素值的部分—数据域和存放另一元素存储地址的部分—指针域或链域两部分信息组成的存储结构。)、单链表(线性链表)的概念。 5.熟悉线性链表的建立(P45-47)、查找(P47-48)、插入(P49-50)和删除(P50-51)的算法; 6.明了什么是循环链表(链表中最后一个结点指针域回指向链表的第一个结点,使得整个链表通过链指针成为一个环形,这种形式的链表称为循环链表。)? 7.明了双向链表的结构(链表中的每个结点有两个指针域,一个是向前链接的左指针(Lnext或prior),另一个是向后链接的右指针(Rnext或next),同时还有一个数据域(Data)。);了解双向链表的插入和删除的算法。 8.理解链表的优缺点(P48)。 9.熟悉习题P68:1、2 第三章限定性线性表----栈和队列 1.栈和队列 明确什么是栈及其特点(只允许在一端进行插入和删除的线性表。允许插入和删除 学期样卷一 二、1.B 2.D 3.C 4.D 5.D 6.(2^h-1) 7.B 8.B 9.B 10.D 三、1.(n-1)(n-2)/2 2.p->next=la 3. 6 4.矩阵的第i个结点所在行全置为0. 5.冒泡排序 6.top[1]+1=top[2] 7. 4 2 8. 1308 9. 97 四、wpl=16*2+8*3+9*3+(4+5)*4+12*3+26*2=32+51+36+36+52=207 2. 4棵树 3. 6 1 1 1 2 3 4 ASLsucc=(1+1+2+1+3+4+6)/7=18/7 ASLunsucc=(2+1+2+1+1+7+6)/7=20/7 五、1.按层遍历二叉树 2.n次 3 O(n) 六、1 void split(LinkList*la,LinkList*&lb,LinkList*&lc) { LinkList *p=la->next,*q; lc=(LinkList*)malloc(Sizeof(LinkList)); lb=la; while(p!=NULL) { if(p->data>0) { q=p; p=p->next; q->next=lb->next; lb->next=p; } else { q=p; p=p->next; q->next=lc->next; lc->next=p; } } } 2略 参考教材:统计并输出叶子结点数目P168 分析:统计二叉树中非终端结点的数目并无次序要求,可用三种遍历算法中的任何一种完成,只需将访问操作具体变为判断是否为非终端结点及统计操作即可。 以先序遍历的算法如下: //count为保存统计非终端结点数目的全局变量,调用前初始化为0 void CounUntleaf(BiTree root) { if(root!=NULL) { if(root->lchild!=NULL)||(root->rchild!=NULL) { Count++; printf(root->data); } CountUnleaf(root->lchild); CountUnleaf(root->rchild); } } 学期样卷二 二、1D 2A 3D 4C 5A 6C 7C 8C 9B 10A 三、1 s->next=p->next p->next=s 2 2^(h-1)+1 2^h-1 3 入4 简单选择排序 5 1344 6 q->rchild q=q->rchild pre 四、1 《数据结构》试题(100分) (供2005级信息管理与信息系统本科专业使用) 学号: 姓名: 座号: 系别: 年级: 专业: 总分合计人: 复核人: 说明:本试卷分为两部分,第I 卷(选择题和判断题)必须在“答题卡”上按规定要求填、涂;第II 卷直接在试卷上作答。不按规定答题、填涂,一律无效。 第I 卷 一、试题类型:单项选择题(每小题2分,共40分) (类型说明:在每小题列出的四个选项中只有一个选项是符合题目要求的,请选出正确选项并在“答题卡”的相应位置上涂黑。多涂、少涂、错误均无分。) 1. 算法分析的两个主要方面是: ( ) (A) 空间复杂性和时间复杂性 (B) 正确性和简明性 (C) 可读性和文档性 (D) 数据复杂性和程序复杂性 2. 计算机算法指的是: ( ) (A) 计算方法 (B) 排序方法 (C) 解决问题的有限运算序列 (D) 调度方法 3. 数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称为:( ) (A )存储结构 (B )逻辑结构 (C )顺序存储结构 (D )链式存储结构 4.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是 。 ( ) (A )110 (B )108 (C )100 (D )120 5. 链接存储的存储结构所占存储空间: ( ) (A )分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 (B )只有一部分,存放结点值 (C ) 只有一部分,存储表示结点间关系的指针 (D ) 分两部分,一部分存放结点值,另一部分存放结点所占单元数 6. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址: ( ) (A )必须是连续的 (B )部分地址必须是连续的 (C )一定是不连续的 (D )连续或不连续都可以 第1章绪论 1.4 试编写算法,求一元多项式P n(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入a i(i=0,1,…,n),x和n,输出为P n(x0)。通常算法的输入和输出可采用下列两种方式之一: (1)通过参数表中的参数显式传递。 (2)通过全局变量隐式传递。 试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方式实现输入和输出。void polyvalue() { int n,p,i,x,xp,sum; float a[]; float *p=a; printf("Input number of terms:"); scanf("%d",&n); printf("Input the %d coefficients from a0 to a%d:\n",n,n); for(i=0;i<=n;i++) scanf("%f",p++); printf("Input value of x:"); scanf("%f",&x); p=a;xp=1;sum=0; //xp用于存放x的i次方 for(i=0;i<=n;i++) { sum+=xp*(*p++); xp*=x; } printf("Value is:%f",sum); }//polyvalue 第二章线性表 2.4设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。 Status Insert_SqList(SqList &va,int x)//把x插入递增有序表va中 { if(va.length+1>va.listsize) return ERROR; va.length++; for(i=va.length-1;va.elem[i]>x&&i>=0;i--) va.elem[i+1]=va.elem[i]; va.elem[i+1]=x; return OK; }//Insert_SqList 2.6已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。 习题二 ⒉1描述以下四个概念的区别:头指针变量,头指针,头结点,首结点(第一个结点)。解:头指针变量和头指针是指向链表中第一个结点(头结点或首结点)的指针;在首结点之前附设一个结点称为头结点;首结点是指链表中存储线性表中第一个数据元素的结点。若单链表中附设头结点,则不管线性表是否为空,头指针均不为空,否则表示空表的链表的头指针为空。 2.2简述线性表的两种存储结构有哪些主要优缺点及各自使用的场合。 解:顺序存储是按索引直接存储数据元素,方便灵活,效率高,但插入、删除操作将引起元素移动,降低了效率;而链式存储的元素存储采用动态分配,利用率高,但须增设表示结点之间有序关系的指针域,存取数据元素不如顺序存储方便,但结点的插入和删除十分简单。顺序存储适用于线性表中元素数量基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素的情况;而链式存储适用于频繁进行元素动态插入或删除操作的场合。 2.3 在头结点为h的单链表中,把值为b的结点s插入到值为a的结点之前,若不存在a,就把结点s插入到表尾。 Void insert(Lnode *h,int a,int b) {Lnode *p,*q,*s; s=(Lnode*)malloc(sizeof(Lnode)); s->data=b; p=h->next; while(p->data!=a&&p->next!=NULL) {q=p; p=p->next; } if (p->data==a) {q->next=s; s->next=p;} else {p->next=s; s->next=NULL; } } 2.4 设计一个算法将一个带头结点的单链表A分解成两个带头结点的单链表A和B,使A中含有原链表中序号为奇数的元素,而B中含有原链表中序号为偶数的元素,并且保持元素原有的相对顺序。 Lnode *cf(Lnode *ha) {Lnode *p,*q,*s,*hb; int t; p=ha->next; q=ha; t=0; hb=(Lnode*)malloc(sizeof(Lnode)); s=hb; while(p->next!=NULL) {if (t==0) {q=p;p=p->next;t=1;} else {q->next=p->next; p->next=s->next; s->next=p; s=p; p=p->next; t=0; } } s->next=NULL; return (hb); } 贵州大学理学院数学系信息与计算科学专业 《数据结构》期末考试试题及答案 (2003-2004学年第2学期) 一、单项选择题 1.对于一个算法,当输入非法数据时,也要能作出相应的处理,这种要求称为()。 (A)、正确性(B). 可行性(C). 健壮性(D). 输入性 2.设S为C语言的语句,计算机执行下面算法时,算法的时间复杂度为()。 for(i=n-1;i>=0;i--) for(j=0;jnext; Q.front->next=p->next; (C)、p=Q.rear->next; p->next= Q.rear->next; (D)、p=Q->next; Q->next=p->next; 9. Huffman树的带权路径长度WPL等于() (A)、除根结点之外的所有结点权值之和(B)、所有结点权值之和 (C)、各叶子结点的带权路径长度之和(D)、根结点的值 10.线索二叉链表是利用()域存储后继结点的地址。数据结构试卷-A+答案
2017年数据结构期末考试题及答案A
耿国华数据结构习题答案完整版
数据结构试卷及答案90325
(完整版)数据结构---C语言描述-(耿国华)-课后习题答案
数据结构试卷及答案
经典数据结构面试题(含答案)
数据结构期末考试试题含答案
《数据结构(C语言-耿国华版)》复习大纲
数据结构学期样卷答案
数据结构期末考试试题答案详解
数据结构部分答案耿国华2
数据结构上机例题及答案
数据结构期末考试试题及答案资料