中国大学算法与数据结构_10答案(慕课2023课后作业答案)

中国大学算法与数据结构_10答案(慕课2023课后作业答案)

第一周 数据结构概述(时长:24分42秒)

第1讲 什么是中国作业数据结构(时长:8分01秒)随堂测验

1、什么是大学答案答案数据结构?
A、一个计算过程,算法数据从一个初始状态和初始输入开始,结构停止于一个终态。慕课
B、课后计算机中存储、中国作业组织数据的大学答案答案方式。
C、算法数据程序设计
D、结构基本数据类型

第2讲 数据结构与抽象数据类型(时长:7分34秒)随堂测验

1、慕课基本的课后逻辑结构有哪些?
A、线性结构、中国作业树形结构、大学答案答案图形结构;
B、算法数据顺序结构、索引结构、链式结构;
C、抽象数据类型、运算集合。
D、散列结构

第3讲 算法与算法复杂度分析(时长:9分07秒)随堂测验

1、关于算法复杂度说法正确的是( )
A、算法复杂度指时间复杂度
B、算法复杂度指空间复杂度
C、算法复杂度包含时间复杂度、空间复杂度
D、算法复杂度通常与数据规模无关

单元测试

1、计算机算法指的是()
A、计算机程序
B、解决问题的有限运算序列
C、排序方法
D、检索方法

2、下面程序段的算法复杂度是() min=A[0]; for(i=1;i<n;i++) if( min>A[i]) min=A[i] 其中 n为正整数。
A、
B、
C、
D、

3、在数据结构中,数据的( )的结构是与计算机无关的。
A、物理
B、存储
C、逻辑
D、逻辑和存储

4、数据的最小单位是( )。
A、数据项
B、数据元素
C、结点
D、记录

5、数据结构是指( )的集合以及它们之间的关系。
A、数据
B、数据的逻辑结构
C、算法
D、数据元素

6、数据的逻辑结构可以分为() 。
A、内部结构和外部结构
B、链式结构和顺序结构
C、动态结构和静态结构
D、线性结构和非线性结构

7、数据结构在计算机内存中的表示是指( )。
A、数据元素之间的关系
B、顺序结构
C、数据的存储结构
D、数据的逻辑结构

8、算法分析的主要任务之一是分析( )。
A、算法的执行时间和问题规模之间的关系
B、算法的正确性
C、算法的可读性
D、算法的功能是否符合用户需求

9、若某算法的时间复杂度为O(n^2),则表明该算法的( )。
A、执行时间与n^2成正比
B、问题规模是n^2
C、问题规模与n^2成正比
D、执行时间等于n^2

10、下列函数中时间复杂度是O(n)的是()。
A、
B、T(n)=500n
C、
D、T(n)=2n^2

11、下面代码段的时间复杂度为()。 { int i=1; while (i<=n) i=i*2; }
A、O(1)
B、O(n)
C、
D、

12、下面代码段的时间复杂度为()。 { int i=0, s=0; while (i<n) { s=s+a[i];i=i+2;} }
A、O(1)
B、O(n)
C、
D、

13、以下说法正确的是()。
A、数据结构是带结构的各数据项的集合
B、一些表面上很不相同的数据可以有相同的逻辑结构
C、数据元素是数据的最小单位
D、数据项是数据的基本单位

14、通常要求同一逻辑结构中的所有数据元素具有相同的特性,这说明()。
A、每个数据元素所包含的数据项的个数要相等
B、每个数据元素都一样
C、数据元素具有同一特点
D、不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致

15、在决定选取何种存储结构时,一般不考虑()。
A、所用编程语言实现这种结构是否方便
B、结点个数的多少
C、各结点的具体值如何
D、对数据有哪些运算

16、下面的算法是判断n是否为素数,其算法时间复杂度为( )。 void prime(int n) { /* 判断n是否是素数 */ for (i=2; i<sqrt(n) && (n % i)!=0; i++) ; if (i>sqrt(n)) printf("%d is a prime number", n); else printf("%d is not a prime number", n); }
A、
B、
C、
D、

17、下面算法的时间复杂度为( )。 x=100; y=100; while(y>0) if(x>100) { x=x-10; y--;} else x++;
A、
B、
C、
D、

18、如下程序段: for(i=1;i<=n-1;i++) for(j=i+1;j<=n;j++) x=x+1; 其中语句x=x+1执行的语句频度为( )。
A、n*n
B、n*(n-1)
C、n*(n-1)/2
D、n*(n+1)/2

19、评价一个算法性能好坏的重要标准是( )。
A、算法是否易于理解
B、算法是否易于调试
C、算法的时间复杂度
D、算法的正确性

20、算法的时间复杂度取决于( )。
A、问题的规模
B、待处理数据的初态
C、实现算法所使用的的语言
D、数据采用的存储结构

21、数据结构包括数据的()、数据的()和数据的()这三个方面的内容。
A、逻辑结构
B、存储结构
C、运算
D、输入输出

22、常见的逻辑结构有集合 ,(),(),()四种。
A、顺序表
B、线性结构
C、树形结构
D、图形结构

23、计算机中算法指的是解决某一问题的有限运算序列,它必须具备0或多个输入、1或多个输出、( )、()、()。
A、确定性
B、有穷性
C、可移植性
D、可行性

24、一个抽象数据类型包括()。
A、一组基本操作
B、数据
C、数据对象
D、数据对象中各元素间的关系

25、数据的物理结构是指数据的各数据项之间的逻辑关系。

26、数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构。

27、某算法的时间复杂度是O(n^3),表明该算法的执行时间与n^3成正比。

28、顺序存储的优点是逻辑上相邻的元素,物理上也是相邻的,因此可以实现随机存储。

29、数据元素是数据的基本单位

30、在存储数据时,通常不仅要存储各数据元素的值,而且还要存储数据元素之间的关系。

31、健壮的算法不会因为非法输入而出现莫名的执行结果。

32、算法的可行性是指每一条指令具有明确含义。

33、算法的优劣与算法描述的语言无关。

34、程序一定是算法。

35、算法可以用不同的语言描述,如果用C或Java或Python等高级语言来描述,则算法实际上就是程序了。

36、任何数据结构都具备3个基本运算:插入、删除、和查找。

37、数据的逻辑结构与数据元素在计算机中如何存储有关。

38、如果数据元素值发生改变,则数据的逻辑结构也随之改变。

39、数据的逻辑结构时指数据的各数据项之间的逻辑关系。

编程作业

1、本题要求实现一个函数,求给定的N个整数的和。

2、本题要求实现一个函数,计算N个整数中所有偶数的和,并实现一个判断奇偶性的函数。

3、该题为编程题,计算个人所得税

4、本题要求实现一个根据学生成绩设置其等级,并完成统计不及格人数的函数。

第二周 线性表(上)(时长:74分54秒)

第1讲 线性表及其顺序存储(时长:34分46秒)随堂测验

1、对于顺序存储的长度为n的线性表,下标从0开始,则删除第i个位置的元素需要移动____个元素。其中(0≤i<n)。
A、n-i
B、n-i-1
C、i
D、i+1

2、若长度为 n 的线性表采用顺序存储结构存储,在第 i 个位置上插入一个新元素的时间复杂度为( )。
A、O(n^2)
B、
C、O(n)
D、O(1)

3、假设在顺序表{ a1,a2,……,an}中,每一个数据元素所占的存储单元的数目为4,且第1个数据元素的存储地址为100,则第8个数据元素的存储地址是()。
A、106
B、107
C、124
D、128

4、同一个线性表中数据元素的类型可以不相同。

第2讲 单链表(时长:40分09秒)随堂测验

1、在一个不带头结点的单链表中,若要删除 p 所指结点的后继结点q,则执行( )。
A、p->next=q->next;free(q);
B、p=p->next; p->next=q->next;free(q);
C、p->next=p->next;free(q);
D、p =p->next->next;free(q);

2、线性表若采用链式存储结构时,要求内存中可用存储单元的地址()
A、必须是连续的
B、一定不是连续的
C、连续不连续均可
D、以上说法都不对

3、若用指针head指向不带头结点的单链表的表头,则该单链表为空的判定条件是()。
A、head->next==head
B、head!=NULL
C、head->next==NULL
D、head==NULL

4、在一个不带头结点的单链表中,若 p 所指结点不是最后结点,在 p 之后插入 s 所指结点,则执行()。
A、s->next=p;p->next=s;
B、s->next=p->next;p=s;
C、s->next=p->next;p->next=s;
D、p->next=s;s->next=p->next;

单元测试

1、线性表是( )
A、一个有限序列,不可以为空
B、一个有限序列,可以为空
C、一个无限序列,可以为空
D、一个无限序列,不可以为空

2、对于长度为n的顺序表(下标范围0..n-1),在第i个位置插入一个元素需要移动( )个元素。其中,0≤i≤n。
A、n-i
B、n-i-1
C、n-i+1
D、i

3、若数组A可存放100个元素,每个元素占4个字节,从首地址1000开始按顺序连续存放,那么,元素A[16]的起始地址为( )。
A、1128
B、1064
C、1032
D、1016

4、对于顺序存储的长度为n的线性表,删除第i个位置的元素需要移动( )个元素。其中,0≤i<n。
A、i
B、n-i+1
C、n-i-1
D、n-i

5、对于线性表,下列说法正确的是()。
A、表中元素必须是有序的
B、每个元素有且仅有一个直接前驱和一个直接后继
C、除第一个元素与最后一个元素,其他每个元素有且仅有一个直接前驱和一个直接后继
D、线性表不允许为空

6、线性表采用顺序存储结构,下列说法不正确的是( )。
A、插入、删除操作不必移动元素
B、需要事先估计所需存储空间,可能出现顺序表满的情况
C、内容空间地址必须是连续的
D、可以进行随机存取

7、线性表的顺序存储最适合于实现 ( )运算。
A、将x插入第i个位置
B、查找值为x
C、删除第i个位置元素
D、取第i个位置元素

8、在长度为n的顺序表中,查找值为x的数据元素的时间复杂度为()
A、O(1)
B、O(n)
C、O(n^2)
D、

9、在长度为n的顺序表中,查找第i个位置的数据元素的时间复杂度为()
A、O(1)
B、O(n)
C、O(n^2)
D、

10、对顺序存储的长度为n的线性表,假设在任何位置上进行删除操作是等概率的。则删除一个元素时平均要移动表中的( )个元素。
A、n
B、(n+1)/2
C、n/2
D、(n-1)/2

11、对顺序存储的长度为n的线性表,假设在任何位置上进行插入操作是等概率的。则插入一个元素时平均要移动表中的( )个元素。
A、n
B、n/2
C、(n+1)/2
D、(n-1)/2

12、在长度为n的顺序表的运算中,算法的时间复杂度是O(1)的操作是( )。
A、在第i个位置上插入一个新元素(0≤i≤n)
B、求第i个位置的元素的直接前驱(1≤i<n)
C、删除第i个位置上的元素(0≤i<n)
D、以上都不对

13、下面关于线性表的叙述错误的是 ()。
A、线性表采用链式存储便于插入和删除操作的实现
B、线性表采用顺序存储必须占用一片连续的存储空间
C、线性表采用链式存储不必占用一片连续的存储空间
D、线性表采用顺序存储便于插入和删除操作的实现

14、在单链表中,要删除某一指定的结(节)点,必须找到该结点的 ()结点。
A、头结点
B、尾结点
C、前驱
D、后继

15、求一个单链表长度的算法的时间复杂度为()。
A、
B、
C、
D、

16、已知一个长度为n的单链表中所有结点是递增有序的,以下叙述中正确的是 ()。
A、删除最大值结点使之有序的算法的时间复杂度为 O(1)
B、都不对
C、找最小值结点的算法的时间复杂度为 O(1)
D、插入一个结点使之有序的算法的时间复杂度为O(1)

17、将长度为m的单链表(A)链接在长度为n的单链表(B)之后的算法时间复杂度为()。
A、O(n)
B、O(m+n)
C、O(m)
D、O(1)

18、将长度为m的顺序表(A)链接在长度为n的顺序表(B)之后的算法时间复杂度为()。
A、O(m)
B、O(n)
C、O(m+n)
D、O(1)

19、在一个具有n个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是 ()。
A、
B、
C、
D、

20、在单链表中查找指定值的结点的时间复杂度是()。
A、
B、
C、
D、

21、对于一个具有n个元素的线性表,建立其单链表的时间复杂度为 ( )。
A、
B、
C、
D、

22、对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为( )。
A、
B、
C、
D、

23、对于一个具有n个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为()。
A、
B、
C、
D、

24、下面的叙述中正确的是()。
A、线性表在链式存储时,查找第i个元素的时间与i的数值无关。
B、线性表在顺序存储时,查找第i个元素的时间与i的数值无关。
C、线性表在链式存储时,插入第i个元素的时间与i的数值成正比。
D、线性表在顺序存储时,查找第i个元素的时间与i的数值成正比。

25、线性表采用顺序存储结构进行存储,取第i个位置元素的时间与i值的大小有关。

26、具有100个元素的顺序表(下标从0开始),删除第50个位置的元素,需要移动51个元素。

27、线性表的特点是除了第一个元素以及最后一个元素外,其他元素有且仅有一个直接前驱和一个直接后继。

28、线性表中的所有数据元素的数据类型必须相同。

29、顺序表的插入、删除总是伴随着大量数据的移动。

30、顺序存储方式的优点是存储密度大,数据存储在连续的内存空间中,但是插入、删除运算效率低。

31、插入和删除操作是线性表的基本操作。这两种操作在数组中也经常使用。

32、顺序表中所有元素的排列顺序必须从小到大或从大到小。

33、顺序表结构适宜进行随机访问,而链表适宜进行插入、删除。

34、在单链表中,可以从头结点开始查找任何一个结点。

35、在单链表中,可以从任一结点开始查找到任何其他结点。

36、线性表的顺序存储结构优于链式存储结构。

编程作业

1、本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。

2、本题要求实现顺序表的操作集。

3、编写算法函数void reverse(List L),实现顺序表的就地倒置。

4、已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。

第三周 线性表(下)(时长:105分58秒)

第3讲 带头结点的单链表(时长:40分16秒)随堂测验

1、采用头插法创建带头结点的单链表,则创建一个长度为n的链表,其时间复杂度为()。
A、O(n)
B、O(1)
C、O(n^2)
D、

2、在一个带头结点的单链表中,若 head 所指结点是头结点,若要删除第一个实际元素结点,则执行()。
A、p=head->next;head->next=p->next;free(p);
B、p=head;free(p);head=head->next;
C、head=head->next;p=head;free(p);
D、p=head;head=head->next;free(p);

3、若带头结点的单链表的表头指针为head,则该单链表为空的判定条件是()。
A、head==NULL
B、head->next=NULL
C、head!=NULL
D、head->next=head

4、在一个带头结点的单链表head中,若要将 s 所指结点插入在第一个结点之前,则执行()。
A、head->next=s;s->next=head;
B、s->next=head->next;head=s;
C、s->next=head;head->next=s;
D、s->next=head->next;head->next=s;

第4讲 循环链表(时长:34分01秒)随堂测验

1、在一个非空的循环单链表中,若要删除p所指结点的后继结点,则执行( )。
A、q=p->next;p->next=q->next->next; free(q);
B、q=p->next;p->next=q->next; free(q);
C、q=p->next;p=q->next->next; free(q);
D、q=p->next; free(q);p->next=q->next->next;

2、对于一个非空的循环单链表,若头指针为head,假设指针myrear指向表中的最后一个结点,如果要在非空的循环单链表的最前面插入一个新结点p,则执行( )。
A、p->next=head;myrear->next=p;head=p;
B、head->next=p;myrear->next=p;head=p;
C、myrear->next=p;head=p;head->next=p;
D、myrear->next=p;head=p;p->next=head;

3、对于一个循环单链表,若头指针为head,表中的某个结点p是最后一个结点的特征是( )。
A、p->next==NULL
B、head==NULL
C、head->next=p
D、p->next==head

第5讲 双链表和静态链表(时长:31分41秒)随堂测验

1、在双链表中,任意一个结点中有( )个指针。
A、1
B、2
C、0
D、3

2、相对于顺序表而言,静态链表的优点是:在执行插入和删除操作时,只需修改下标,不需要移动表中的元素。

3、在一个非空的双链表中,若p所指的结点有前驱和后继,则执行p->next->prior=p=p->prior->next。

单元测试

1、关于线性表的链式存储,以下说法正确的是( )
A、可方便地进行随机存取
B、存储密度大
C、插入、删除运算方便
D、以上都不对

2、下面关于线性表的叙述中,错误的是哪一个?( )
A、线性表采用顺序存储,便于进行插入和删除操作
B、线性表采用顺序存储,必须占用一片连续的存储空间
C、线性表采用链接存储,便于插入和删除操作
D、线性表采用链接存储,存储空间连不连续都可以

3、如果线性表最常用的操作是取第i个结点及其前驱,则采用( )存储方式最节省时间。
A、单向链表
B、双向链表
C、顺序表
D、单向循环链表

4、对于使用带头结点的单链表,若头指针为head,判定该表为空的条件是( )。
A、head!=NULL
B、head->next==head
C、head==NULL
D、head->next==NULL

5、对于使用不带头结点的单链表,若头指针为head,判定该表为空的条件是( )
A、head==NULL
B、head->next==NULL
C、head->next=head
D、head!=NULL

6、已知指针p指向在一个单链表中的某个结点,若在该结点之后插入指针s指向的结点,则需执行( )。
A、s->next=p->next;p->next=s;
B、p->next=s;s->next=p;
C、s->next=p->next;s=p;
D、s->next=p->next;s=p->next;

7、已知指针p指向单链表head中的某个结点,若删除其后继结点,则需执行()。
A、r=p; p->next=r->next; free(r);
B、r=p->next; p=r->next; free(r);
C、r=p->next; p->next=r->next; free(r);
D、r=p->next; r->next=p->next; free(r);

8、对于一个具有n个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为()
A、O(1)
B、O(n)
C、O(n^2)
D、

9、在单链表head中,指针p所指结点是线性表中最后一个元素的条件是( )
A、p==NULL
B、p->next==NULL
C、p!=NULL
D、p->next!=NULL

10、在循环单链表head中,指针p所指结点是线性表中最后一个元素的条件是( )
A、p==head
B、p->next==NULL
C、p->next==head
D、p==NULL

11、与单链表相比,双链表的优点之一是 ( ) 。
A、更节约存储空间
B、能够方便的访问某结点的前驱结点
C、可以进行随机访问
D、插入、删除操作更简单

12、取链式表的第i个元素的时间与i值的大小有关。

13、静态链表中指针表示的是下一元素在数组中的下标。

14、对于一个头指针为H的带头结点的循环单链表,判定该表为空表的条件是H->next=NULL。

15、设p为指向长度为n的循环单链表上某结点的指针,从p开始可以遍历整个单链表。

16、静态链表与动态链表类似,在元素的插入、删除上也不需做元素的移动。

17、在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上一定不相邻。

编程作业

1、实现单链表的初始化,插入、删除、访问等基本操作。 单链表为带头结点的单链表结构。

2、假设带头结点的单链表L是升序排列的,将值为x的结点插入到链表L中,并保持链表有序性。

3、删除带头结点单链表L中所有值为X的结点。

4、已知两个带头结点的单链表L1和L2中的结点值均已按升序排序,设计一个算法,将L1和L2合并成一个升序的带头结单链表,并用L1记录新的带头结点单链表。

5、编写一个程序,用尽可能快的方法返回带头结点单链表中倒数第k个结点的地址,如果不存在,则返回ERROR。

第四周 栈和队列(时长:79分33秒)

第1讲 栈(时长:29分45秒)随堂测验

1、判定一个顺序栈st为(元素个数最多为MaxSize,top初始值为0,指向下一个待入栈的元素的下标)空的条件为( )。
A、st.top==0
B、st.top!=MaxSize-1
C、st.top==MaxSize-1
D、st.top!=0

2、表达式a*(b+c)-d的后缀表达式是 ( )。
A、- + * a b c d
B、a b c * + d -
C、a b c + * d -
D、a b c d * + -

3、若用一个数组data[0..n-1]存储顺序栈,初始栈顶指针top为0,则要让元素x入栈(假设栈不满),应执行()操作。
A、data[top]=x;top--;
B、data[top]=x;top++;
C、top--; data[top]=x;
D、top++; data[top]=x;

4、已知一个栈的进栈序列是ABC,中间可以出栈,以下出栈序列正确的是()。
A、CAB
B、ABC
C、BAC
D、ACB

5、顺序栈中元素值的大小是有序的

第2讲 队列(时长:49分38秒)随堂测验

1、若用一个不带头结点的单链表表示队列,队头和队尾指针分别为front和rear,则判断队空的条件是( )。
A、front == rear
B、front == NULL
C、front!==NULL
D、rear!==NULL

2、若用一个不带表头节点的单链表表示队列,若队列非空,则在进行删除操作时,( )。
A、仅修改头指针
B、头、尾指针都要修改
C、仅修改尾指针
D、头指针一定要修改、尾指针可能要修改

3、循环队列qu(元素个数最多为MaxSize ,front队首指针指向队首元素位置,rear队尾指针指向下一个待入队元素的下标,采用浪费一个空间的方式进行存储),元素个数是( )。
A、(qu.rear-qu.front+ MaxSize)% MaxSize
B、(qu.rear-qu.front)% MaxSize
C、qu.rear-qu.front +1
D、qu.rear-qu.front

4、栈和队列的共同点是只允许在端点处插入和删除元素。

单元测试

1、若元素A、B、C、D、E依次进栈后,栈顶元素是( )。
A、E
B、D
C、B
D、C

2、元素A、B、C依次进栈,中间允许出栈,若出栈序列为BCA,经过栈的操作是 ( )。
A、push push push pop pop pop
B、push push pop push pop pop
C、push pop push pop push pop
D、push pop push push pop pop

3、元素A、B、C依次进栈,中间允许出栈,则不可能的出栈序列是 ( )。
A、CAB
B、BCA
C、BAC
D、ABC

4、某算法在数据处理过程中需要存储一些中间数据,并且后存储的数据先处理,则使用()来存储这些数据更合理。
A、链式表
B、栈
C、队列
D、顺序表

5、表达式5*6-7*8 的后缀表达式是(  )。
A、56*78*-
B、5678**-
C、-**5678
D、5678*-*

6、表达式3+5+7*8 的后缀表达式是(  )。
A、35+78*+
B、3578*++
C、++35*78
D、3578+*+

7、若一个栈用数组data[0..n-1]存储,初始栈顶指针top为-1,则以下元素x进入栈的正确操作是( )。
A、data[top]=x;top++;
B、data[top]=x;top--;
C、top--; data[top]=x;
D、top++; data[top]=x;

8、若一个栈用数组data[0..n-1]存储,初始栈顶指针top为0,则以下元素x进入栈的正确操作是( )。
A、top++; data[top]=x;
B、top--; data[top]=x;
C、data[top]=x;top--;
D、data[top]=x;top++;

9、判定一个顺序栈st(数组大小为MaxSize,初始st.top==0)栈满的条件是( )。
A、st.top==-1
B、st.top==0
C、st.top==MaxSize-1
D、st.top==MaxSize

10、链栈与顺序栈相比,链式栈有一个明显的优点,它是()。
A、判断栈空更方便
B、一般不会出现栈满的情况
C、插入操作更方便
D、删除操作更加方便

11、若不带头结点的链栈其栈顶指针为top,则插入一个s指针所指向的结点时,应进行如下()操作。
A、s->next=top; top=s;
B、s->next=top->next; top->next=s;
C、s->next=top; top->next=s;
D、top>next = s;

12、若不带头结点的链栈其栈顶指针为top,则删除栈顶元素,应进行如下()操作。
A、top=top->next; s=top; free(s);
B、s=top; top=top->next; free(s);
C、s=top->next; top->next=s->next;free(s);
D、s=top; top->next=s->next;free(s);

13、顺序循环队列qu的队满条件(front队首指针指向队首元素,rear队尾指针指向队尾元素的后一个位置,采用浪费一个空间的方式进行存储,队列元素最大个数为MaxSize)是 ()。
A、(qu.rear+1)%MaxSize==qu.front
B、(qu.rear+1)%MaxSize==qu.front+1
C、qu.rear==qu.front
D、(qu.rear+1)%MaxSize==(qu.front+1)%Maxsize

14、假设用不带头结点的单链表表示队列,front和rear分别指向队头和队尾,则判断队空的条件是 ()。
A、front == NULL
B、front!==NULL
C、rear!==NULL
D、front == rear

15、为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中读取数据。该缓冲区最适合采用的逻辑结构是( )。
A、顺序表
B、栈
C、链式表
D、队列

16、队列操作的原则是( )。
A、先进先出
B、后进先出
C、只能进行插入操作
D、只能进行删除操作

17、栈和队列的不同点是栈只能在一端进行插入删除操作,而队列在不同端进行插入删除操作。

18、栈和队列均为操作受限的线性表。

19、顺序循环队列解决了空间溢出的问题。

20、顺序循环队列解决了顺序队列的假溢出问题。

21、栈是一种插入与删除操作均在表的一端进行的线性表,具有后进先出的特点。

22、在具有n个元素的非空顺序队列中, 插入或者删除一个元素的操作时间复杂度是O(n)。

第五周 字符串和数组 (上)(时长:73分31秒)

第1讲 字符串的定义以及顺序串的实现(时长:29分34秒)随堂测验

1、假设空串是任何串的子串,则串S=“Computer”的子串个数是( )
A、8
B、9
C、36
D、37

2、两个字符串相等的充分必要条件是()
A、两个字符串中对应位置上的字符相等
B、两个字符串的长度相等且对应位置上的字符也相等
C、两个字符串的长度相等
D、以上说法都不对

3、下列说法正确的是()
A、空串就是空白串
B、串只可以采用顺序存储,不可以采用链式存储
C、空串是任意字符串的子串
D、在C标准中,char S[M]最多能表示长度为M的字符串

4、在字符{ A, C, G, T}组成的DNA序列中,A和T、C和G是互补对。判断一个DNA序列中是否存在互补回文串(例如,ATCATGAT的补串是TAGTACTA,与原串形成互补回文串)。则DNA序列GTACGTAC也存在互补回文串。

第2讲 字符串的链式存储实现(时长:32分33秒)随堂测验

1、以下是采用压缩存储的一个链串的节点类型定义: #define NodeSize 6 typedef struct node { char data[NodeSize]; struct node *next; } LinkStrNode; 如果每个字符占1个字节,指针占2个字节,该链串的存储密度为( )。
A、
B、
C、
D、

2、对于一个链串s,查找第一个字符值为x的算法的时间复杂度为( )
A、
B、
C、
D、

第3讲 字符串的朴素模式匹配(时长:11分24秒)随堂测验

1、设有两个串S1与S2,求串S2在S1中首次出现位置的运算称作( )
A、模式匹配
B、取子串
C、求串长
D、串连接

2、在串的简单模式匹配中,当模式串位j与目标串位i比较时,两字符不相等,则i的位移方式是( )。
A、i不动
B、i++
C、i=j+1
D、i=i-j+1

单元测试

1、两个字符串相等的充分必要条件是( )
A、两个字符串的长度相等且对应位置上的字符也相等
B、两个字符串中对应位置上的字符相等
C、两个字符串的长度相等
D、以上说法都不对

2、设有两个串S和T ,其中T是S的子串,求T在S中首次出现的位置的算法称为( )
A、串的模式匹配
B、串连接
C、取子串
D、串插入

3、串的长度是指( )。
A、串中所含字符的个数
B、串中所含非空格字符的个数
C、串中所含不同字符的个数
D、串中所含不同字母的个数

4、以下是采用压缩存储的一个链串的节点类型定义: #define NodeSize 8 typedef struct node { char data[NodeSize]; struct node *next; } LinkStrNode; 如果每个字符占1个字节,指针占2个字节,该链串的存储密度为( )。
A、1/4
B、1/3
C、2/3
D、4/5

5、若串S=“software”,其子串个数为()
A、8
B、9
C、36
D、37

6、串是一种特殊的线性表,其特殊性体现在()
A、可以顺序存储
B、可以链式存储
C、数据元素可以是多个字符
D、数据元素是一个字符

7、int f(char s[])函数判断字符串s 是否是回文,是回文则返回1,否则返回0;如 f("abba")返回1,f("abcba")返回1f("abab")返回0; 对于(1),下列选项正确的是() int f(char s[]) { int i=0,j=0; while(s[j]) j++; for(j--; i < j && s[i] == s[j]; i++, j--); return _______(1)_______ ; }
A、i>j
B、i= =j
C、s[i] = = s[j]
D、i=j

8、下面关于串的叙述中,不正确的是( )。
A、串是一种特殊的线性表
B、串中元素只能是字母
C、空串就是空白串
D、串的长度必须大于零

9、在字符{ A, C, G, T}组成的DNA序列中,A和T、C和G是互补对。判断一个DNA序列中是否存在互补回文串(例如,ATCATGAT的补串是TAGTACTA,与原串形成互补回文串)。则下面DNA序列中存在互补回文串的是()
A、GTACGTAC
B、AGCTAGCT
C、AATTAATT
D、CTGATCAG

10、串是一种数据对象特殊的线性表。

11、串只可以采用顺序存储,不可以采用链式存储。

12、空串是任意字符串的子串。

13、空串就是空白串。

14、空串是不含字符的串,长度为0。

编程作业

1、已知字符串采用带结点的链式存储结构,请完成以下函数的编写 1)linkstring substring(linkstring s,int i,int len),在字符串s中从第i个位置起取长度为len的子串,函数返回子串链表。 2)void delstring(linkstring s, int i,int len) ,在字符串s中删除从第i个位置开始,长度为len的子串。 3)linkstring index(linkstring s, linkstring t),查找子串t在主串s中第一次出现的位置,若匹配不成功,则返回NULL。

2、已知字符串采用顺序存储结构,请完成以下函数的编写: SeqString* substring(SeqString str, int i, int len);//在字符串str中从第i个位置起取长度为len的子串(i从1开始),函数返回子串指针,若子串超出边界返回NULL。 int index(SeqString s, SeqString t);//查找子串t在主串s中第一次出现的位置,若匹配成功,返回起始位置。若匹配不成功,则返回-1。 void delstring(SeqString *S, int i, int len);//在字符串s中删除从第i个位置开始(i从1开始),长度为len的子串。

3、加密解密

第六周 字符串和数组(下)(时长:62分06秒)

第4讲 数组及其顺序存储(时长:15分18秒)随堂测验

1、数组通常只有两种运算:( )和(?)
A、读取 修改
B、插入 删除
C、读取 插入
D、插入 修改

2、以行序优先顺序存储数组A[100][120];假定A[0][0]的地址为1000, 每个元素占2个字节,则A[5][3]的地址是()
A、2204
B、2206
C、2004
D、2006

3、数组的维数和维度一旦确定,数组中元素的个数就确定了,不能增加也不能减少。

第5讲 特殊矩阵的压缩存储(时长:16分07秒)随堂测验

1、对特殊矩阵采用压缩存储的目的主要是()
A、减少不必要的存储空间
B、对矩阵元素的存储变得简单
C、去掉矩阵中的多余元素
D、对矩阵元素的操作更方便

2、对n*n的对称矩阵进行压缩存储,需要保存的数据元素的个数是()
A、n^2
B、n
C、n*(n+1)/2
D、n*n/2

3、(2016年考研真题 第4题) 有一个100阶的三对角矩阵M,其元素 按行优先次序压缩存入下标从0开始的一维数组N中。元素 在N中的下标是()
A、86
B、87
C、88
D、89

第6讲 稀疏矩阵的三元组表示(时长:14分50秒)随堂测验

1、适用于压缩存储稀疏矩阵的两种存储结构是()
A、三元组表和十字链表
B、三元组表和邻接矩阵
C、十字链表和二叉链表
D、十字链表和邻接矩阵

2、使用三元组来保存稀疏矩阵中的非零元素,三元组包含非零元素的()
A、个数
B、行号
C、列号
D、元素值

3、使用三元组顺序表作为稀疏矩阵中的物理结构,对元素可以进行随机访问

第7讲 稀疏矩阵的转置(时长:15分51秒)随堂测验

1、以下物理结构中,不能够对数据元素进行随机访问的是( )
A、三元组顺序表
B、三对角矩阵的压缩存储
C、数组的顺序存储
D、对称矩阵的压缩存储

单元测试

1、设有10×5的数组A,其每个元素占2个字节,按行优先顺序存储,若已知A[3][4]在内存中的地址是1038,则A[6][0]的地址是( )
A、1060
B、1030
C、1098
D、1068

2、设有10×6的数组A,数组下标从0,0开始,其每个元素占2个字节,按列优先顺序存储,若已知A[3][4]在内存中的地址是1086,则A[4][5]的地址是( )
A、1296
B、1140
C、1108
D、1054

3、将10×5 的二维数组A按照行优先顺序存储到一维数组B中,则B[35]中存储的二维数组元素是( )。
A、A[6][0]
B、A[7][0]
C、A[7][1]
D、A[6][1]

4、对特殊矩阵采用压缩存储的目的主要是( )。
A、对矩阵元素的存储变得简单
B、表达变得简单
C、减少不必要的存储空间
D、去掉矩阵中的多余元素

5、N*N的三对角矩阵,需要保存的数据元素的个数是( )。
A、3n-2
B、3n-1
C、3n
D、n(n+1)

6、某稀疏矩阵A采用三元组顺序表作为存储结构,对于矩阵元素的赋值运算A[i][j]=x,不可能的操作是( )。
A、修改某个三元组的元素值
B、删除一个三元组
C、插入一个新的三元组
D、修改某个三元组的行号或列号

7、使用三元组来保存稀疏矩阵中的非零元素,三元组不包括非零元素的( )
A、行号
B、列号
C、元素值
D、个数

8、以下物理结构中,不能够对数据元素进行随机访问的是( )
A、三对角矩阵的压缩存储
B、三元组顺序表
C、数组的顺序存储
D、对称矩阵的压缩存储

9、对稀疏矩阵进行压缩存储方法一般有两种,分别为三元组顺序表和十字链表

10、数组是一种定长的线性表,数组的基本操作有存取、修改、检索和排序等,没有插入与删除操作。

11、数组是一种非线性结构,除了插入与删除操作外,数组的基本操作还有存取、修改、检索和排序等操作。

12、使用三元组顺序表或十字链表作为稀疏矩阵中的物理结构,对元素可以进行随机访问。

编程作业

1、实现稀疏矩阵(采用三元组表示法)的基本运算

2、实现稀疏矩阵(采用三元组表示法)的加法运算

第七周 树和二叉树(上)(时长:83分48秒)

第1讲 树的基本概念和存储结构(时长:23分18秒)随堂测验

1、在一棵度为3的树中,度为3结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为( )个
A、4
B、5
C、6
D、7

2、如图所示,D结点的度等于()。
A、2
B、3
C、4
D、1

3、在树的双亲表示法中,查找孩子的时间复杂度是()
A、
B、
C、
D、

第2讲 树的遍历算法以及层次遍历的实现(时长:16分05秒)随堂测验

1、如图所示,该树的先序遍历序列是( )
A、DEFBCA
B、ABFEDC
C、ABCDEF
D、ABDEFC

2、树的层序遍历实现时借助栈实现的。

第3讲 二叉树的定义和性质(时长:22分29秒)随堂测验

1、高度为4的满二叉树结点个数为()。
A、4
B、15
C、16
D、5

2、二叉树是度为2的有序树。

3、只有度为0和度为2的结点的二叉树就是满二叉树

第4讲 二叉树的存储(时长:14分14秒)随堂测验

1、完全二叉树的存储结构通常采用顺序存储结构。

第5讲 树、森林与二叉树的转换(7分38秒)随堂测验

1、树结构中某结点的第3个孩子,转换成二叉树后,应该是()
A、该结点的右孩子
B、该结点的左孩子的右孩子的右孩子
C、该结点的左孩子
D、该结点的左孩子的右孩子

2、(2019年 第2题) 若将一棵树T转化为对应的二又树BT,则下列对BT的遍历中,其遍历序列与T的后根遍历序列相同的是?()
A、先序遍历
B、中序遍历
C、后序遍历
D、层次遍历

单元测试

1、对于二叉树,下列说法正确的是()
A、二叉树是非线性数据结构,因此它不能用顺序存储结构存储
B、二叉树是非线性数据结构,因此只能使用链式存储结构进行存储
C、二叉树是非线性数据结构,因此它既不能顺序存储结构存储,也不能用链式存储结构存储
D、二叉树是非线性数据结构,既可以使用顺序存储结构存储,也可以链式存储结构进行存储

2、树的后根遍历序列等同于该树对应的二叉树的()
A、先序遍历
B、中序遍历
C、后序遍历
D、层次遍历

3、一棵深度为6的满二叉树有( )个分支结点。
A、31
B、32
C、63
D、64

4、在一棵二叉树中,度为零的结点的个数为N0,度为2的结点的个数为N2,则有N0等于( )
A、无法确定
B、N2+1
C、N2-1
D、N2

5、若在一棵度为3的树中,有3个度为3的结点,2个度为2的结点,2个度为1的结点,该树中叶子结点的个数为()
A、9
B、7
C、6
D、16

6、若某棵二叉树的后序遍历序列为ABCDEFG,则其根结点值是( )
A、A
B、G
C、B
D、不能确定

7、若某棵二叉树的中序根遍历序列为ABCDEFG,则其根结点值是( )
A、A
B、B
C、G
D、不能确定

8、以下关于二叉树的说法中正确的是()
A、二叉树就是度为2的树
B、二叉树中每个结点的度都小于等于2
C、二叉树中每个结点的度都为2
D、二叉树就是度为2有序树

9、二叉树的先序和中序遍历序列相同,则此二叉树为()
A、空树或者任一结点最多只有左子树
B、空树或者任一结点最多只有右子树
C、只有一个根结点
D、空树或者根结点无左子树

10、具有1024个结点的非空二叉树的最小深度为( )
A、9
B、10
C、11
D、12

11、若知道一棵二叉树的先序和中序遍历序列,便可以唯一确定该二叉树。

12、把一棵树转换为二叉树后,这棵二叉树是唯一的,且根结点都没有右孩子。

13、若二叉树用二叉链表作存储结构,则在n个结点的二叉树链表中只有n-1个非空指针域。

14、具有12个结点的完全二叉树,叶子结点个数为6。

15、在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序是相同的。

16、树型结构最适合用来描述层次结构。

编程作业

1、树的基本运算

2、求树中叶子结点的个数以及树t中结点值为x的结点的层号 int LeafNodes(tree t); int Level(tree t,datatype x,int h);

第八周 树和二叉树(下)(时长:82分06秒)

第6讲 二叉树的遍历(时长:37分03秒)随堂测验

1、以下函数,能正确实现二叉树后序遍历功能的是()
A、void postorder(bintree t) { if (t) { postorder(t->lchild); postorder(t->rchild); printf(“%c”,t->data); } }
B、void postorder(bintree t) { postorder(t->lchild); postorder(t->rchild); printf(“%c”,t->data); }
C、void postorder(bintree t) { if (t) { postorder(t->lchild); printf(“%c”,t->data); postorder(t->rchild); } }
D、void postorder(bintree t) { if (t) { printf(“%c”,t->data); postorder(t->lchild); postorder(t->rchild); } }

2、如图所示的二叉树,其前序遍历序列为________(答案不要有空格)

3、如图所示的二叉树,其中序遍历序列为________(答案不要有空格)

4、如图所示的二叉树,其后序遍历序列为________(答案不要有空格)

第8讲 线索二叉树(时长:18分02秒)随堂测验

1、引人线索二叉树的目的的是( )。
A、加快查找结点的前驱或后继的速度
B、为了能在二叉树中方便地进行插人与侧除
C、为了能方便地找到双亲
D、使二叉树的遍历结果唯一

2、n个结点的线索二叉树上含有的线索数为( )。
A、n
B、2n
C、n+1
D、n-1

3、若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为( )。
A、X的双亲
B、X的右子树中最左的结点
C、X的左子树中最右的结点
D、X的左子树中最右叶结点

4、下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是()
A、
B、
C、
D、

第9讲 哈夫曼树(时长:19分54秒)随堂测验

1、(2019年 第3题)对n个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有115个结点,则n的值()
A、56
B、57
C、58
D、60

2、设有13个值,用它们构成一棵哈夫曼树,则该哈夫曼树共有结点数是( )
A、13
B、14
C、25
D、26

3、由分别带权为9、2、5、7的四个叶子结点构成一棵哈夫曼树,该树的带权路径长度为()
A、23
B、37
C、44
D、46

单元测试

1、设有一棵哈夫曼树的结点总数为41,则该哈夫曼树共有( )个叶子结点。
A、20
B、21
C、22
D、30

2、判断线索二叉树中p所指的结点无右孩子的条件是()
A、p->ltag==1
B、p->ltag==0
C、p->rchild==NULL
D、p->rtag==1

3、树中某结点的第3个孩子,转换成二叉树后,应该是()
A、该结点的右孩子
B、该结点的左孩子的右孩子
C、该结点的左孩子的右孩子的右孩子
D、该结点的右孩子的右孩子的右孩子

4、引入线索二叉树的目的是()
A、加快查找结点的前驱或后继的速度
B、为了能在二叉树中方便的进行插入与删除
C、为了能方便的找到双亲
D、使二叉树的遍历结果唯一

5、若结点A是中序线索二叉树中一个有右孩子的结点,则A的后继为( )
A、A的右子树中最左的结点
B、A的左子树中最右的结点
C、A的左子树中最右的叶结点
D、A的右子树中最右的结点

6、根据使用频率为4个字符设计的哈夫曼编码不可能是()
A、00,10,01,11
B、111,110,10,0
C、11,10,1,0
D、001,000,01,1

7、n个结点的线索二叉树上含有的线索个数为()
A、n
B、n-1
C、n+1
D、2n

8、给定权值总数有n个,其哈夫曼树的结点总数是2n-1个。

9、哈夫曼树中除了度为1的节点外,还有度为2的节点和叶子节点。

10、哈夫曼树中不存在度为1的结点。

11、哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

12、判断线索二叉树中*p结点为叶子结点的条件是p->ltag==1 && p->rtag==1。

13、哈夫曼树的带权路径长度等于其中所有结点的带权路径之和。

14、对应于一组权值构造出的哈夫曼树可能不是唯一的。

编程作业

1、二叉树的基本运算

2、根据遍历序列构建二叉树,分别实现根据前序和中序序列,中序和后序序列构建二叉树。

3、按照先序遍历的顺序输出给定二叉树的叶结点

4、哈夫曼树的建立,请完成select函数的编写 void select(huffNode huffmanTree[ ], int k, int *s1, int *s2); //从huffmanTree数组的0到up-1中找出father为-1的且权重最小的结点赋给s1,s2,(为了保证答案唯一,请让s1的结点编号小于s2)保证每个结点的权重值小于10000。

5、将一棵给定二叉树中所有结点的左、右子女互换。

第九周 图(上)(时长:64分49秒)

第1讲 图的基本概念(时长:19分43秒)随堂测验

1、n个顶点的无向图至多有()条边。
A、
B、
C、
D、

2、n个顶点的有向图中,顶点的最大度数等于()。
A、
B、
C、
D、

3、在有向图中,所有顶点的入度之和等于所有顶点的出度之和。

4、如果顶点v到顶点w之间存在一条路径,则称v和w是邻接的。

第2讲 图的存储(时长:22分13秒)随堂测验

1、关于图的邻接矩阵,下列哪个结论是正确的?
A、有向图的邻接矩阵总是不对称的
B、有向图的邻接矩阵可以是对称的,也可以是不对称的
C、无向图的邻接矩阵总是不对称的
D、无向图的邻接矩阵可以是不对称的,也可以是对称的

2、对于一个具有N个顶点M条边的无向图,若采用邻接矩阵表示,则该矩阵的大小是:
A、
B、
C、
D、

3、若一个有向图用邻接矩阵表示,则第i个结点的入度就是()
A、第i行的元素个数
B、第i行的非零元素个数
C、第i列的非零元素个数
D、第i列的零元素个数

4、下面关于图的存储的叙述中,哪一个是正确的?
A、用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关
B、用邻接矩阵法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关
C、用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关
D、用邻接表法存储图,占用的存储空间数只与图中边数有关,而与结点个数无关

第3讲 图的遍历(时长:22分53秒)随堂测验

1、下列说法不正确的是:
A、图的遍历是从给定的源点出发每一个顶点仅被访问一次
B、遍历的基本算法有两种:深度优先遍历和广度优先遍历
C、图的深度优先遍历是一个递归过程
D、图的深度优先遍历不适用于有向图

2、图的深度优先遍历类似于二叉树的()
A、先序遍历
B、中序遍历
C、后序遍历
D、层次遍历

3、在用邻接表表示有N个结点E条边的图时,深度优先遍历算法的时间复杂度为()
A、
B、
C、
D、

4、图的广度优先遍历类似于二叉树的层次遍历。

单元测试

1、图的深度优先遍历类似于二叉树的()
A、先序遍历
B、中序遍历
C、层次遍历
D、后序遍历

2、如果从无向图的任一顶点出发进行一次深度优先遍历即可访问所有顶点,则该图一定是 ( )
A、完全图
B、有回路
C、连通图
D、有回路的连通图

3、在图的广度优先遍历算法中用到一个队列,每个顶点最多进队( )次
A、1
B、2
C、0
D、不确定

4、下列属于非线性数据结构的是()
A、线性表
B、队列
C、栈
D、图

5、关于图的邻接矩阵,下列哪个结论是正确的( )
A、有向图的邻接矩阵一定是不对称的
B、有向图的邻接矩阵可以是对称的,也可以是不对称的
C、无向图的邻接矩阵一定不是对称的。
D、无向图的邻接矩阵可以是不对称的,也可以是对称的。

6、对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,所有顶点邻接表的边结点总数为()
A、e/2
B、e
C、2e
D、n+e

7、在下列邻接表的叙述中,()是正确的。
A、有向图的邻接表中,第i个顶点的度为第i个链表中结点数的2倍。
B、求有向图结点的度,必须遍历整个邻接表。
C、邻接表的表示是唯一的。
D、邻接表法只能用于有向图的存储。

8、对于简单无向图而言,一条回路至少含有()条边。
A、2
B、3
C、4
D、5

9、图中任意两个顶点之间有路径相通我们称之为完全图。

10、图的深度优先遍历算法可以应用于判断回路问题。

11、稠密图更适合采用邻接矩阵存储。

12、在图的表示法中,表示形式唯一的是邻接矩阵。

13、广度优先遍历类似于二叉树的层次遍历。

14、具有n个顶点的无向连通图,至少有n-1条边。

15、任何连通图的连通分量只有1个。

16、对于网络而言,加权边的权通常满足三角不等式(即:两边之和大于第三边)。

17、无向图G的连通分量是G的极大连通子图。

18、有向图和无向图都具有强连通分量。

19、如果顶点v到顶点w之间存在一条路径,则称v和w是邻接的。

第十周 图(下)(时长:46分50秒)

第4讲 图的最小生成树(时长:34分34秒)随堂测验

1、任何一个带权无向连通图的最小生成树()
A、不一定存在
B、是唯一的
C、一定是不唯一的
D、一定存在,但是可能是不唯一的

2、如图所示的具有 7 个结点的网 G,采用Prim算法,从3号结点开始,给出该网的最小生成树。下列哪个选项给出了正确的树结点收集顺序?
A、3654102
B、3165402
C、3615402
D、36524102

3、图通过BFS得到的生成树的树高小于或者等于通过DFS得到的生成树的树高。

第5讲 最短路径(时长:12分16秒)随堂测验

1、对于给定的有权无向图G,下列哪个说法是正确的()
A、G的最小生成树中,任意一对顶点间的路径必是它们在G中的最短路径
B、设顶点V到W的最短路径为P。若我们将G中每条边的权重都加1,则P一定仍然是V到W的最短路径
C、单源最短路问题可以用O(∣E∣+∣V∣)的时间解决
D、以上都不对

2、使用迪杰斯特拉(Dijkstra)算法求下图中从顶点1到其他各顶点的最短路径,依次得到的各最短路径的目标顶点是()
A、5, 2, 3, 4, 6
B、5, 2, 3, 6, 4
C、5, 2, 4, 3, 6
D、5, 2, 6, 3, 4

3、数据结构中Dijkstra算法用来解决最小生成树问题的

单元测试

1、任何一个无向连通网的最小生成树()。
A、不一定存在
B、只有1棵
C、至少有1棵
D、一定存在多棵

2、用Kruskal算法,求下图的最小生成树时,依次得到的树边为()
A、BE1、AF2、ED3、BA4、AC6
B、BE1、ED3、BA4、AF2、AC6
C、AB4、BE1、ED3、AF2、AC6
D、BE1、AF2、BA4、ED3、AC6

3、在求最小生成树时,Kruskal算法更适合于()。
A、有向图
B、无向图
C、稀疏图
D、稠密图

4、从B点出发用prim算法,求下图的最小生成树时,依次得到的树边为()。
A、BE1、AF2、ED3、BA4、AC6
B、BE1、ED3、BA4、AF2、AC6
C、AB4、BE1、ED3、AF2、AC6
D、BE1、AF2、BA4、ED3、AC6

5、最小生成树指的是()
A、由连通网所得到的边数最少的生成树
B、由连通网所得到的顶点数相对较少的生成树
C、连通网中所有生成树中权值之和为最小的生成树
D、连通网的极小连通子图

6、设无向图 G=(V, E)和 G' =(V', E' ),如果 G' 是 G 的生成树,则下面的说法中错误的是()
A、G' 为 G 的子图
B、G' 为 G 的连通分量
C、G' 为 G 的极小连通子图且 V = V'
D、G' 是 G 的一个无环子图

7、图的生成树( ), n 个顶点的生成树有()条边。
A、不唯一,n-1
B、不唯一,n
C、唯一,n-1
D、不唯一,n

8、在一个带权连通图G中,权值最小的边一定包含在G的( )生成树中。
A、某个最小
B、所有最小
C、广度优先
D、深度优先

9、航线可以用有向图表示。下列哪一种算法最适合在任何一对城市之间寻找最经济的飞行路线
A、BFS
B、DFS
C、prim
D、Dijkstra

10、迪杰斯特拉算法求最短路径时,是按照路径长度递增的顺序求解的。

11、数据结构中Dijkstra算法是用来求解最短路径的。

12、在用Kruskal算法求解带权连通图的最小生成树时,选择权值最小的边的原则是该边不能在图中构成回路。

13、图的简单路径是指顶点不重复的路径。

编程作业

1、求无向图(邻接表表示)中某个顶点的度

2、无向图(邻接表表示)的基本运算(BFS和DFS)

3、求无向连通图(邻接表表示)的所有深度优先遍历序列

4、编程题:求解两个动物之间通信最少翻译问题(广度优先遍历算法应用)

5、利用Prim算法求解最小生成树

第十一周 检索(时长:77分41秒)

第2讲 基于线性表的检索(时长:22分11秒)随堂测验

1、对于表长为n的查找表,如果采用顺序查找,查找失败时的平均查找长度是( )。
A、(n+1)/2
B、n/2
C、n-1
D、n

2、折半查找一个长度为56的有序表,若查找不成功,最少需要比较( )次关键字。
A、5
B、4
C、7
D、6

3、二分查找过程所对应的判定树是一棵二叉排序树。

4、在有序的单链表上也可以进行二分查找。

第3讲 二叉排序树(时长:24分17秒)随堂测验

1、将{ 32, 2, 15, 65, 28, 10 }依次插入初始为空的二叉排序树,则该树的后序遍历结果是()
A、2, 10, 15, 28, 32, 65
B、32, 2, 10, 15, 28, 65
C、10, 28, 15, 2, 65, 32
D、32, 2, 15, 10, 28, 65

2、对二叉搜索树进行什么遍历可以得到从小到大的排序序列()
A、前序遍历
B、后序遍历
C、中序遍历
D、层次遍历

3、在二叉排序树中,凡是新插入的结点都是叶子结点。

第4讲 散列检索(时长:22分50秒)随堂测验

1、采用线性探测法解决冲突时所产生的一系列后继散列地址:()
A、必须大于等于原散列地址
B、必须小于等于原散列地址
C、可以大于或小于但不等于原散列地址
D、对地址在何处没有限制

2、在散列表中,所谓同义词就是:()
A、两个意义相近的单词
B、具有相同散列地址的两个元素
C、被映射到不同散列地址的一个元素
D、被不同散列函数映射到同一地址的两个元素

3、设数字序列 { 1, 16, 29,61,4, 51, 25,12} 在大小为14的散列表中根据散列函数 h(X)=X%13,并用线性探测法解决冲突后,得到的下标对应为()
A、1, 3, 4, 9, 5,12,13,0
B、1, 3, 2, 9, 5,12,13,0
C、1, 3, 4, 9, 5,12,13,11
D、1, 3, 4, 9, 5,12,11,13

单元测试

1、采用顺序查找法查找一个长度为n 的线性表,则查找成功(假设查找概率相等)时,平均比较次数为()
A、n/2
B、(n-1)/2
C、(n+1)/2
D、n

2、对线性表进行二分检索时,线性表必须采用()
A、链式存储
B、顺序存储,且结点之间是有序排列的。
C、链式存储,且结点之间是有序排列的
D、顺序存储,不要求结点之间可是有序排列的

3、有序数组a[11],下标从0开始,使用二分检索进行查找,则查找到a[7]的查找路径(下标序列)为( )
A、5,7
B、5,8,7
C、5,8,6,7
D、1,4,7

4、设有一组关键字为{ 29,40,23,1,92,21,88,14,55,11}的记录,若用拉链地址法构造散列表,散列函数为H(key)=key MOD 13,散列地址为1的链中有( )个记录。
A、3
B、4
C、2
D、5

5、顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为( )次
A、n
B、n-1
C、n/2
D、(n+1)/2

6、用二分法对有序数组a[16]进行查找,下标从0开始,若待查元素为x,且a[4]<x<a[5],那么查找路径为()
A、7,3,5,4
B、7,3,5
C、7,3,4
D、8,3,5,4

7、二分检索的时间复杂性为()
A、
B、
C、O(n)
D、O(n^2)

8、分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是( )
A、(120,90, 140, 60, 100)
B、(120,60, 140, 90, 100)
C、(120,140, 90, 100, 60)
D、(120,140, 90, 60,100)

9、设散列表长为13,哈希函数是H(key)=key%11,表中已有数据的关键字为26,5,17,20共4个,现要将关键字为60的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是( )
A、7
B、9
C、8
D、1

10、设散列表长为13,哈希函数是H(key)=key%11,表中已有数据的关键字为26,5,17,20共4个,现要将关键字为60的结点加到表中,用线性探测再散列法解决冲突,则放入的位置是( )
A、7
B、8
C、3
D、2

11、用二分(对半)检索法,查找表的元素的速度一定比用顺序法快。

12、若将100个元素散列到100000个单元的哈希表中,则一定不会产生冲突。

13、顺序查找n个元素的顺序表,当使用监视哨时,若查找失败,则比较关键字的次数为n次。

14、对二叉排序树进行中序遍历,得到的序列一定是有序的。

15、在二叉排序树中插入一个结点,该结点一定在叶子上。

16、在顺序表(10,20,30,40,50,60,70)中,用二分(折半)查找法查找关键码值20,需做的关键码比较次数为_____。

17、对长度为99的顺序表,在等概率情况下,查找成功时的平均查找长度为______。(写整数)

1

学习通算法与数据结构_10

算法与数据结构是计算机科学的核心,也是程序员必须掌握的基本理论。学习通算法与数据结构_10主要介绍了排序算法和查找算法。

排序算法

在计算机科学中,排序算法是将一串数据按照特定的顺序进行排列的算法,本节将介绍常见的几种排序算法。

冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的序列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。

void bubbleSort(int arr[], int n)        {             int i, j;            for (i = 0; i < n-1; i++)                // Last i elements are already sorted            for (j = 0; j < n-i-1; j++)                if (arr[j] >arr[j+1])                    swap(&arr[j], &arr[j+1]);        }    

选择排序

选择排序是一种简单的排序算法,它的工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部待排序的数据元素排完。

void selectionSort(int arr[], int n)        {             int i, j, min_idx;            // One by one move boundary of unsorted subarray            for (i = 0; i < n-1; i++)            {                 // Find the minimum element in unsorted array                min_idx = i;                for (j = i+1; j < n; j++)                if (arr[j] < arr[min_idx])                    min_idx = j;                // Swap the found minimum element with the first element                swap(&arr[min_idx], &arr[i]);            }        }    

快速排序

快速排序是一种常用的排序算法,采用分治法来处理数据。它的基本思想是先从数列中取出一个数作为基准数,然后将比这个数小的数放到左边,比这个数大的数放到右边。

int partition (int arr[], int low, int high)        {             int pivot = arr[high];    // pivot            int i = (low - 1);  // Index of smaller element            for (int j = low; j <= high- 1; j++)            {                 // If current element is smaller than or                // equal to pivot                if (arr[j] <= pivot)                {                     i++;    // increment index of smaller element                    swap(&arr[i], &arr[j]);                }            }            swap(&arr[i + 1], &arr[high]);            return (i + 1);        }        void quickSort(int arr[], int low, int high)        {             if (low < high)            {                 /* pi is partitioning index, arr[p] is now                   at right place */                int pi = partition(arr, low, high);                // Separately sort elements before                // partition and after partition                quickSort(arr, low, pi - 1);                quickSort(arr, pi + 1, high);            }        }    

查找算法

查找算法是一种在数据集合中寻找某一特定数据的算法。常见的查找算法有线性查找和二分查找。

线性查找

线性查找,也叫顺序查找,是一种最简单的查找算法。它的基本思想是从数据集合的一端开始,逐个比较数据元素,直到找到所要查找的数据为止。

int linearSearch(int arr[], int n, int x)        {             int i;            for (i = 0; i < n; i++)                if (arr[i] == x)                    return i;            return -1;        }    

二分查找

二分查找,也叫折半查找,是一种在有序数组中查找某一特定元素的查找算法。它的基本思想是将数组分为两个部分,如果中间元素比目标元素小,则在右侧部分查找,如果中间元素比目标元素大,则在左侧部分查找。

int binarySearch(int arr[], int l, int r, int x)        {             if (r >= l) {                 int mid = l + (r - l) / 2;                // If the element is present at the middle                // itself                if (arr[mid] == x)                    return mid;                // If element is smaller than mid, then                // it can only be present in left subarray                if (arr[mid] >x)                    return binarySearch(arr, l, mid - 1, x);                // Else the element is in right subarray                return binarySearch(arr, mid + 1, r, x);            }            // We reach here when element is not present            // in array            return -1;        }    

总结

本节主要介绍了排序算法和查找算法。排序算法包括冒泡排序、选择排序和快速排序等。查找算法包括线性查找和二分查找等。程序员需要根据具体情况选择合适的算法,以提高程序的效率。