elseif(r[i]>b)b=r[i];
printf("a=%d,b=%d。
n",a,b);
}
(1)给出该算法的功能;
(2)给出该算法的时间复杂度。
五、算法设计题(本题10分)
34.二叉树的存储结构类型定义如下
typedefstructnode{
intdata;
structnode*lchild,*rchild;
}BinNode;
typedefBinNode*BinTree;
编写递归算法,求只有一个孩子结点的结点总数,并计算这些结点的数据值的和。
函数的原型为:
voidf34(BinTreeT,int*count,int*sum)
*count和*sum的初值为0。
2012年1月高等教育自学考试全国统一命题考试
数据结构试题
课程代码:
02331
考生答题注意事项:
1.本卷所有试卷必须在答题卡上作答。
答在试卷和草稿纸上的无效。
2.第一部分为选择题。
必须对应试卷上的题号使用2B铅笔将“答题卡”的相应代码涂黑。
3.第二部分为非选择题。
必须注明大、小题号,使用0.5毫米黑色字迹笔作答。
4.合理安排答题空间,超出答题区域无效。
一、单项选择题(本大题共15小题,每小题2分,共30分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.每个结点有且仅有一个直接前趋和多个(或无)直接后继(第一个结点除外)的数据结构称为
A.树状结构 B.网状结构
C.线性结构 D.层次结构
2.某线性表中最常用的操作是在最后一个元素之后插入元素和删除第一个元素,则最节省运算时间的存储结构是
A.单链表 B.双链表
C.仅有头指针的单循环链表 D.仅有尾指针的单循环链表
3.已知一个栈的入栈序列是1,2,3,…,n,其输出序列为pl,p2,p3….,pn,若p1是n,则pi是
A.i B.n-i
C.n-i+l D.不确定
4.下面关于串的叙述中,正确的是
A.串是一种特殊的线性表 B.串中元素只能是字母
C.空串就是空白串 D.串的长度必须大于零
5.无向完全图G有n个结点,则它的边的总数为
A.n2 B.n(n-1)
C.n(n-1)/2 D.(n-1)
6.若一棵二叉树有10个度为2的结点,5个度为1的结点,则度为0的结点数是
A.9 B.11
C.15 D.不确定
7.如图所示,在下面的4个序列中,不符合深度优先遍历的序列是
A.acfdeb
B.aebdfc
C.aedfbc
D.aefdbc
8.无论待排序列是否有序,排序算法时间复杂度都是O(n2)的排序方法是
A.快速排序 B.归并排序
C.冒泡排序 D.直接选择排序
9.已知二叉排序树G,要输出其结点的有序序列,则采用的遍历方法是
A.按层遍历 B.前序遍历
C.中序遍历 D.后序遍历
10.用ISAM和VSAM组织的文件都属于
A.散列文件 B.索引顺序文件
C.索引非顺序文件 D.多关键字文件
11.对序列(15,9,7,8,20,-1,4)进行排序,第一趟排序后的序列变为(4,9,-1,8,20,7,15),则采用的排序方法是
A.选择 B.快速
C.希尔 D.冒泡
12.当采用分块查找时,数据的组织方式为
A.数据分成若干块,每块内数据有序
B.数据分成若干块,每块中数据个数必须相同
C.数据分成若干块,每块内数据有序,块间是否有序均可
D.数据分成若干块,每块内数据不必有序,但块间必须有序
13.下述编码中不是前缀码的是
A.(00,01,10,11) B.(0,1,00,11)
C.(0,10,110,111) D.(1,01,000,001)
14.若一个栈以向量V[1..n]存储,初始栈顶指针top为n+l,则x进栈的正确操作是
A.top=top-1;V[top]=x B.V[top]=x;top=top+1
C.top=top+1;V[top]=x D.V[top]=x;top=top-1
15.在一个以head为头结点指针的非空单循环链表中,指针p指向链尾结点的条件是
A.p->data=-1 B.p->next=NULL
C.p->next->next=head D.p->next=head
二、填空题(本大题共10小题,每小题2分,若有两个空格,每个空格1分,共20分)请在每个空格中填上正确答案。
错填、不填均无分。
16.在数据的逻辑结构和存储结构中,与计算机无关的是______。
17.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是______。
18.设循环队列的容量为50(序号从0到49),现经过一系列的入队和出队运算后,有①front=11,rear=29;②front=29,rear=11;在这两种情况下,循环队列中的元素个数分别是______和______。
19.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为______。
20.已知三对角矩阵A[10][10]的每个元素占2个单元,现将其三条对角线上的元素逐行存储在起始地址为1000的连续的内存单元中,则元素A[6][7]的地址为______。
21.若以(4,5,6,7,8)作为叶子结点的权值构造哈夫曼树,则其带权路径长度是______。
22.有向图G如图所示,它的两个拓扑排序序列分别为______和______。
23.一组记录的关键字为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为______。
24.已知广义表A=(x,((a,b),c,)),函数head(head(tail(A)))的运算结果是______。
25.索引顺序文件既可以顺序存取,也可以______。
三、解答题(本大题共4小题,每小题5分,共20分)
26.对关键字序列(26,18,60,14,7,45,13,32)进行降序的堆排序,写出构建的初始堆(小根堆)及前两趟重建堆之后序列状态。
初始堆:
第一趟:
第二趟:
27.设散列函数为H(key)=key%11,散列地址空间为0··10,对关键字序列(27,13,55,32,18,49,24,38,43)用线性探查法解决冲突,构建散列表。
现已有前4个关键字构建的散列表如下所示,请将剩余5个关键字填入表中相应的位置。
28.已知一棵二叉树的前序遍历和中序遍历序列分别为:
ABCDEFG和CBDAEGF,请画出此二叉树,并给出后序遍历序列。
29.已知如图所示的带权无向图,请画出用普里姆算法从顶点1开始的最小生成树的构造过程。
四、算法阅读题(本大题共4小题,每小题5分,共20分)
30.阅读下列算法,并回答下列问题:
(1)简述该算法的功能;
(2)写出分别输入字符串:
"abcba"和"abcbde",调用算法函数的返回值。
intsymmetry(void)
{inti=0,j,k;.
charstr[80];
SeqStacks;
InitStack(&s);
gets(str);
while(str[i]!
='\0')i++;
for(j=0;j
push(&s,str[j]);
if(i%2!
=0)k=i/2+1;
elsek=i/2;
for(j=k;j
if(str[j]!
=pop(&s))
return0;
return1;
}
(1)
(2)
31.下列算法是利用二分查找方法在递减有序表R中插入元素x,并保持表R的有序性。
请在空缺处填入适当的内容,使其成为一个完整的算法。
typedefstruct{
KeyTypekey;
InfoTyepotherinfo;
}RecType;
typedefRecTypeSeqList[Maxlen]
voidBinInsert(SeqListR,int*n,RecTypex)
{intlow=1,high=*n;
intmid,i;
while(low<=high)
{mid=(low+high)/2;
if(x.key>R[mid].key)
(1);
else
(2);
}
for(i=*n;i>=low;i--)
R[i+1]=R[i];
(3);
++(*n);
}
(1)
(2)
(3)
32.阅读下列算法,并回答下列问题:
(1)简述该算法中标号s1所指示的循环语句的功能;
(2)简述该算法中标号s2所指示的循环语句的功能。
LinkListInsertmnode(LinkListhead,charx,intm)
{
LinkNode*p,*q,*s;
inti;charch;
p=head->next;
s1:
while(p&&p->data!
=x)
p=p->next;
if(p==NULL)printf("error\n");
else{
q=p->next;
s2:
for(i=1;i<=m;i++)
{
s=(LinkNode*)malloc(sizeof(LinkNode));
scanf("%c",&ch);
s->data=ch;
p->next=s;
p=s;
}
p->next=q;
}
returnhead;
}
(1)
(2)
33.阅读下列算法,并回答下列问题:
(1)该算法采用的是何种排序方法?
(2)算法中的R[n+1]的作用是什么?
typedefstruct{
KeyTypekey;
InfoTypeotherinfo;
}RecType;
typedefRecTypeSeqList[MaxLen];
voidsort(SeqListR,intn)
{//nintk,i;
for(k=n-1;k>=1;k--)
if(R[k].key>R[k+l].key)
{
R[n+1]=R[k];
for(i=k+1;R[i].keyR[i-1]=R[i];
R[i-l]=R[n+1];
}
}
(1)
(2)
五、算法设计题(本题10分)
34.假设以单链表表示线性表,单链表的类型定义如下:
typedefstructnode{
DataTypedata;
Structnode*next;
}LinkNode,*LinkList;
编写算法,在一个头指针为head且带头结点的单链表中,删除所有结点数据域值为x的结点。
函数原型为:
LinkListdelnode(LinkListhead,DataTypex)
全国2011年10月高等教育自学考试
数据结构试题
课程代码:
02331
一、单项选择题(本大题共15小题,每小题2分,共30分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1、在数据的逻辑结构中,树结构和图结构都是()
A.非线性结构 B.线性结构
C.动态结构 D.静态结构
2.在一个长度为n的顺序表中插入一个元素的算法的时间复杂度为()
A.O
(1) B.O(logn)
C.O(n) D.O(n2)
3.指针p1和p2分别指向两个无头结点的非空单循环链表中的尾结点,要将两个链表链接成一个新的单循环链表,应执行的操作为()
A.p1->next=p2->next;p2->next=p1->next;
B.p2->next=p1->next;p1->next=p2->next;
C.p=p2->next;p1->next=p;p2->next=p1->next;
D.p=p1->next;p1->next=p2->next;p2->next=p;
4.设栈的初始状态为空,入栈序列为1,2,3,4,5,6,若出栈序列为2,4,3,6,5,1,则操作过程中栈中元素个数最多时为()
A.2个 B.3个
C.4个 D.6个
5.队列的特点是(