数据结构

一、选择题:(本题共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;
}
posted @ 2024-12-26 09:20  CYHMS  阅读(62)  评论(0)    收藏  举报