数据结构
一、选择题:(本题共10小题,每小题2分,共20分)
1.下列关于算法的说法错误的是( D )。
A.常用伪代码描述
B.自然语言可以描述算法
C.算法是求解问题的有限序列
D.算法不存在时间复杂度
2.长度为n的顺序表在第i个元素后面插入一个新元素的时间复杂度为( C )。
A.0(0)
B.0(1)
C.0(n)
D.0(n²)
3.数据的结构类型,从逻辑上可分为( C )。
A.动态结构和静态结构
B.紧凑结构和非紧凑结构
C.线性结构和非线性结构
D.内部结构和外部结构
4.链式存储的存储结构所占空间( D )。
A.只有一部分,存放结点值
B.只有一部分,存放表示结点之间关系的指针
C.分两部分,一部分存放结点值,另一部分存放结点所占单元数
D.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
5.带有头结点的单链表,有头指针为head,则表示单链表为空的选项是( C )。
A.head==NULL
B.head!=NULL
C.head->next==NULL
D.head->next==head
6.四个元素1、2、3、4依次入栈,第一个出栈元素为4,则第3个出栈元素为( B )。
A.1
B.2
C.3
D.4
7.二叉树第3层的结点个数最多有( B )个。
A.1
B.4
C.8
D.16
8.在单链表中,要将s所指向结点插入到p所指结点之后,其语句应为( D )。
A.s->next=p+1;p->next=s;
B.s->next=p->next;p->next=s->next:
C.(*p).next=s;(·s).next=(*p).next;
D.s->next=p->next;p->next=s;
9.通过折半查找对关键字序列{12,18,21,35,45,55,66}查找21,需要查找( B )次。
A.4
B.3
C.2
D.1
10.串"abcd"的长度为( D )。
A.5
B.2
C.6
D.4
|
得分 |
|
二、判断题:(本题共5小题,每小题2分,共10分)
11.栈和队列没有共同点。( X )
12.串是一种特殊的线性表。( √ )
13.一个算法的空间复杂度越大,其时间复杂度也一定越大。( X )
14.在线性表L=(a1,a2,a3,...,an)中的每个元素都有一个直接前驱和直接后继。( X )
15.满二叉树是完全二叉树的特殊情形。( √ )
|
得分 |
|
- 填空题:(本题共2小题,每小题5分,共10分)
16.串的两种基本存储为顺序存储和 链式存储 。
17.广义表(a,(b,c),d,e,((i,j),k))的长度是 5 。
|
得分 |
|
四、简答题:(本题共2小题,每小题5分,共10分)
18.什么是数据项?什么是抽象数据类型?
答:数据项是数据的不可分割的最小单位,是对客观事物某一方面特性的数据描述。抽象数据类型是指一个数学模型以及定义在该模型上的一组操作,它不考虑数据的具体存储结构和实现细节,只关心数据的逻辑结构和所支持的操作。
19.什么是有向图?什么是有向图的度?
答:有向图是由顶点集V和有向边集E组成的图,其中有向边是由两个顶点组成的有序对,表示从一个顶点指向另一个顶点的方向。有向图中顶点的度是指以为起点的有向边的数目(出度)与以u为终点的有向边的数目(入度)之和。
|
得分 |
|
五、计算题:(本题共2小题,每小题10分,共20分)
20.分析下列程序:
#include<stdio.h>
int sub(int n);
void main()
{
int i=6;
printf("%d\n",sub(i));
printf("%d\n",i);
{
int sub(int n)
}
int a;
if(n==1)return 1:a=n+sub(n-1);return a;
}
程序运行结束后:
(1)输出结果的第一行是什么?
(2)输出结果的第二行是什么?
答:(1) 程序运行结束后,输出结果的第一行是 21。
(2) 输出结果的第二行是 6。
21.分析下列程序:
#include<stdio.h>
void main()
{
int score[6]={78,80,95,53,84,69},i,n=0;
float average,sum=0;
for(i=0;i<6;i++)
{
if(score[i]<60)
continue;
sum+=score[i];
n=n+1;
}
average=sum/n;printf("%.2f\n",average);
}
程序运行结束后:
(1)n的值是多少?
(2)输出结果是多少?
答:(1)n的值是 5
(2) 输出结果是 81.20。
|
得分 |
|
六、应用题:(本题共2小题,每小题15分,共30分)
22.给定如图1所示的无向图。
(1)以结点编号1为起点、用深度优先搜索遍历图1。如果同一个顶点有多个邻接点,则按结点编号的升序依次访问。请写出遍历顶点的访问序列。
(2)画出图1的最小生成树,并写出你得到此结果所用的算法名称。
答: (1)深度优先搜索遍历顶点的访问序列为:1、2、4、8、5、6、3、7。
(2)图 1 的最小生成树如下(使用 Prim 算法或 Kruskal 算法均可得到):
1
/ \
11 2 - 4
| |
5 3
| |
3 - 6
| |
7 6
| |
3 - 5 - 7
23.某课程老师需要在一个一维数组中输入全班30个学生的成绩,且成绩由小到大排序输出。请运用选择排序法编程实现以上功能。
#include <stdio.h>
void selectionSort(int arr[], int n) {
int i, j, minIndex, temp;
for (i = 0; i < n - 1; i++) {
minIndex = i;
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex!= i) {
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
int main() {
int scores[30];
int i;
printf("请输入30个学生的成绩:\n");
for (i = 0; i < 30; i++) {
scanf("%d", &scores[i]);
}
selectionSort(scores, 30);
printf("成绩由小到大排序为:\n");
for (i = 0; i < 30; i++) {
printf("%d ", scores[i]);
}
return 0;
}

浙公网安备 33010602011771号