第1章算法
一、选择题
1.算法的时间复杂度是指()。
A)执行算法程序所需要的时间
B)算法程序中的指令条数
C)算法执行过程中所需要的基本运算次数
D)算法程序的长度
2.算法的空间复杂度是指()。
A)算法程序的长度
B)算法程序所占的存储空间
C)算法执行过程中所需要的存储空间
D)算法程序中的指令条数
3.下面()的时间复杂度最好(即执行时间最短)。
log)
A)O(n ) B)O(n
2
log ) D)O(n2)
C)O(n n
2
4.下面累加求和程序段的时间复杂度为()。
int sum(int a[],int n)
{
int i, s=0;
for (i=0;i s+=a[i]; return s; } log ) A)O(1 ) B)O(n 2 C)O(n ) D)O(n2) 5.下面是将两个n阶矩阵a[][]与b[][]相加的结果存放到n阶矩阵c[][]中的算法, 该算法的时间复杂度为()。 void matrixadd(int a[][],int b[][],c[][],int n) { int i,j; for (i=0;i for(j=0;j c[i][j]=a[i][j]+b[i][j]; } log) A)O(1 ) B)O(n 2 C)O( n ) D)O(n2) 6.下面程序段的时间复杂度为()。 int i=0,s1=0,s2=0; while(i { if(i%2) s1+=i; else s2+=i; i++; } log) A)O(1 ) B)O(n 2 C)O(n ) D)O(n2) 7.下面程序段的时间复杂度为()。 int prime(int n) { int i=1; int x=(int)sqrt(n); while(i<=x) { i++; if(n%i==0) break; } if(i>x) return 1; else return 0; } log) A)O(1 ) B)O(n 2 C)O(n ) D)O(n) 8.下面程序段的时间复杂度为() int fun(int n) { int i=1,s=1; while(s { i++; s+=i; } return i; } log) A)O(n/2) B)O(n 2 C)O(n ) D)O(n) 9.下面程序段的时间复杂度为() int i,j,m,n,a[][]; for(i=0;i for(j=0;j a[i][j]=i*j; A)O(m2) B)O(n2 ) C)O(m*n ) D)O(m+n) 10. 下面程序段的时间复杂度为() int sum1(int n) { int i,p=1,s=0; for(i=1;i<=n;i++) { p*=i; s=s+p; } return s; } log) A)O(1 ) B)O(n 2 C)O(n ) D)O(n2) 二、填空题 1.算法复杂度主要包括时间复杂度和复杂度。 2.一个算法的时间复杂度的计算式为 ( 3n2+2n+5 ) / n ,其数量级表示为。 3.从一维数组a[n]中顺序查找出一个最大值元素的平均时间复杂度为,读取一个二维数组b[m][n]中任一元素的时间复杂度为。 4.在下面程序段中,s = s+p语句的执行次数为,p*=j 语句的执行次数为,该程序段的时间复杂度为。 int i=0, s=o; while(++i <=n) { int p=1; for(int j=1; j<=i ; j++ ) p*=j ; s=s+p ; } 5. 通常用平均性态分析和两种方式来确定一个算法的工作量。 三、简答题 3.什么是算法? 4.算法的基本特征是什么? 5.算法的两种基本要素是什么? 6.递归是算法的基本方法之一,其基本思想是什么? 7.算法的描述方法有多种,试说出任意三种方法。 四、编写出求下列问题的算法 1.比较两个整型数据a1与a2的大小,对于a1 > a2、a1 == a2、a1< a2这三种不同情况应分别返回“>”、“=”、“<”字符。 2.求一维double型数组a[n]中的所有元素之乘积。 3.假定一维整型数组a[n]中的每个元素值x均在[0,200]区间内,分别统计出落在0≤x < 20、20≤x<50、50≤x<80、80≤x<130、13 ≤x≤200各区间内的元素个数。 参考答案 一、单选题 1.C 2.C 3.B 4.C 5.D 6.C 7.D 8.D 9.C 10.C 二、填空题 1. 空间 2. O(n) 3.O(n),O(1) 4. n,n(n+1)/2,O(n2) 5. 最坏情况复杂性 三、简答题 1. 答案:所谓算法是指解题方案的准确而完整的描述。 2. 答案:算法的基本特征为:1)可行性;2)确定性;3)有穷性;4)拥有足够的情报。 3. 答案:算法通常由两种基本要素组成;一是对数据对象的运算和操作;二是算法的控制结构。 4. 答案:人们在解决一些复杂问题时,为了降低问题的复杂程度,一般总是将问题逐层分解,最后归结为一些最简单的问题。这种将问题逐层分解的过程,实际上并没有对问题进行求解。而只是当解决了最后那些最简单的问题后,再沿着原来分解的逆过程逐步进行综合,这就是递归的基本思想。 5.答案:一个算法可以用多种方式来描述,如自然语言、程序语言、流程图等。 四、算法设计 1.比较两个整型数据a1与a2的大小。 char compare(int a1,int a2) { if(a1>a2) return ">"; elase if(a1==a2) return "="; elase return "<"; } 2.求一维double型数组a[n]中的所有元素之乘积。 double product(dluble a[],int n) { double p=1; for(int i=0;i< n;i++) p=p*a[i]; return p; } 3.统计数组a[n]中的每个元素值x分别落在0≤x<20、20≤x<50、50≤x< 80、80≤x<130、130≤x≤200各区间内的元素个数。 int count(int a[],int n,int c[5]) //用c[5]保存统计结果 { int d[5]={20,50,80,130,201}; //用d[5]保存各统计区间上限 int i,j; for(i=0;i c[i]=0; for(i=0;i { if(a[i]<0; || a[i]>200) return 0; //数组中数据有错,统计失败 for(j=0;j< 5;j++) if(a[i] c[j]++; //使统计相应区间的元素数增1 } return 1; //表示统计成功 } 第2章数据结构的基本概念 一、单选题 1.一个数据结构可形象地表示成B=(D,R),其中D是(①)的有限集合,R是D上的(②)有限集合。 ① A)算法 B)数据元素 C)数据操作 D)逻辑结构 ② A)操作 B)映像 C)存储 D)关系 2. 数据结构在计算机存储空间中的存放形式称为()。 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. 在决定选取何种存储结构时,一般不考虑()。 A)结点个数的多少 B)各结点的值如何 C)对数据有哪些运算 D)所用编程语言实现这种结构是否方便 10.以下说法正确的是()。 A)数据元素是数据的最小单位 B)数据项是数据的基本单位 C)数据结构是带结构的各数据项的集合 D)一些表面上很不相同的数据,可以有相同的逻辑结构 11.在数据结构中,从逻辑上可以把数据结构分成()。 A)动态结构和静态结构 B)紧凑结构和非紧凑结构 C)线性结构和非线性结构 D)内部结构和外部结构 12.通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。 A)数据元素具有同一特点 B)不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致 C)每个数据元素都一样 D)数据元素所包含的数据项的个数要相等 二、填空题 1.数据的基本单位是,数据的最小单位是。 2. 一种数据的逻辑结构,根据需要可以表示成顺序、、和散列四种基本存储结构。 3. 根据数据结构中各数据元素之间前后件关系的复杂程度,可将数据分为两大类型。 4. 在一个线性结构中插入或删除任何一个结点后还应是。 5.一种数据结构的元素集合为D,它在D上的二元关系R为: D={a,b,c,d,e,f,g,h} R={,, 则该数据结构具有结构。 6.一种数据结构的元素集合为D,它在D上的二元关系R为: D={a,b,c,d,e,f,g,h} R={ 则该数据结构具有结构。 7.数据的逻辑结构分为线性结构和非线性结构,其中的非线性结构有两种基本类型。 三、简答题 1.数据结构主要研究的三个问题是什么? 2.一个数据结构应包含两方面的信息是什么? 3.简述数据存储结构中的顺序存储方式。 4.简述数据存储结构中的链式存储方式 参考答案 一、单选题 1.①B,②D 2. C 3.D 4.A 5.C 6.A 7.C 8.B 9.B 10.D 11.C 12.B 二、填空题 1. 数据元素,数据项 2. 链式、索引 3. 线性结构与非线性结构 4. 线性结构 5. 线性 6.非线性(或树形) 7. 树和图 三、简答题 1.答案:数据结构主要研究的三个问题是:①数据的逻辑结构,②数据的存储结构, ③对各种数据结构进行的运算。 2.答案:一个数据结构应包含两方面的信息:①表示数据元素的信息;②表示各数据元素之间的前后件关系。 3. 答案:在数据的存储结构中,顺序存储方式的含义如下: 顺序存储方式:把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元里,数据元素之间的逻辑关系由存储单元的邻接关系来体现。 4. 答案:在数据的存储结构中,链式存储方式的含义如下: 链式存储方式:使用指针表示数据元素之间的逻辑关系,各个数据元素的存储位置可以随意,不要求逻辑上相邻的数据元素在物理位置上也相邻。 第3章线性表及其存储结构 一、单选题 1. 在一个长度为n的顺序存储的线性表中,向第i个元素(1 ≤i ≤n+1)位置插入一个新元素时,需要从后向前依次后移()个元素。 A)n-i B)n–i+1 C)n–i-1 D)i 2. 在一个长度为n的顺序存储的线性表中,删除第i个元素(1 ≤i ≤n+1)时,需要从前向后依次前移()个元素。 A)n-i B)n–i+1 C)n–i-1 D)i 3. 在一个长度为n的顺序表中,存在值为x的元素。在此表中用顺序搜索法,查找值为x的元素,在等概率情况下,查找成功时的平均查找长度为()。 A)n B)n/2 C)(n+1)/2 D)(n - 1)/2 4. 在一个长度为n的顺序表中,删除值为x的元素时,需要比较元素的次数和移动元素次数的和为()。 A)n/2 B)(n+1)/2 C)n D)n+1 5. 在一个顺序表的表尾,插入一个元素时的时间复杂度为()。 log) A)O(1) B)O(n 2 C)O(n) D)O(n2) 6. 在一个顺序表的任意位置,插入一个元素的时间复杂度为()。 log) A)O(1) B)O(n 2 C)O(n) D)O(n/2) 7. 线性表的顺序存储比链式存储最有利于进行()操作。 A)查找 B)表尾插入或删除 C)按值插入或删除 D)表头插入或删除 8. 线性表的链式存储比顺序存储最有利于进行()操作。 A)查找 B)表尾插入或删除 C)按值插入或删除 D)表头插入或删除 9. 在一个单链表中,若要在pre所指向的结点之后插入一个新结点,则相继修改()个指针域的值。 A)2 B)1 C)3 D)4 10. 在带表头结点的单链表中,插入一个新结点所用算法的时间复杂度为()。 log) A)O(1) B)O(n 2 C)O(n) D)O(n/2) 11.以下关于线性表的链式存储结构的叙述中,正确的是()。 A)存储密度大 B)逻辑上相邻的结点物理上不必相邻 C)可以通过计算直接确定第i个结点的存储地址 D)插入、删除运算操作不方便 12.带头结点的单链表H为空的判定条件是()。 A)H==NULL B)H->next==NULL C)H->next==H D)H!=NULL 13.不带头结点的单链表H为空的判定条件是()。 A)H==NULL B)H->next==NULL C)H->next==H D)H!=NULL 14.在一个带头结点的单链表H中,若要向表头插入一个由指针p指向的新结点,则应执行的操作是() A)H=p;p->next=H; B)p->next=H;H=p; C)p->next=H;p=H; D)p->next=H->next; H->next=p; 15.非空的循环单链表H的尾结点(由p所指向)满足()。 A)p==NULL B)p->next==NULL C)p->next==H D)p==H 16.链表不具备的特点是()。 A)插入删除不需要移动元素 B)可随机地访问任一结点 C)不必事先估计存储空间 D)所需空间与其长度成正比 17.设线性表有n个元素,以下算法中,()在顺序表上实现比在链表上实现的效率更高。 A)输出第i(0≤i≤n-1)个元素 B)交换第0个元素与第1个元素的值 C)顺序输出这n个元素的值 D)输出与给定值x相等的元素在线性表中的序号 18.设线性表中有2n个元素,以下算法中,()在单链表上实现要比在顺序表上实现效率更高。 A)删除所有值为X 的元素 B)在最后一个元素的后面插入一个新元素 C)顺序输出前k个元素 D)交换第i个元素和第2n–i-1个元素的值(i = 0,1,…,n-1) 二、填空题 1. 在线性表中,第一个结点前件,其余每个结点有且只有个前件;最后一个结点后件,其余每个结点有且只有个后件。 2. 数据元素在线性表中的位置只取决于它们自己的。 3. 线性表中结点的个数 n 称为线性表的。当 n=0时,称为。 4. 用一维数组存放线性表时,数组的基本类型要与线性表中数据元素的类型。 5. 线性表的顺序存储结构存在插入、删除操作时需数据元素的缺点。 6. 线性表的两种存储结构分别是和。 7. 线性表的顺序存储结构称为;线性表的链式存储结构称为。 8. 对线性单链表进行插入操作时,没有发生数据元素的,只是改变了有关结点的。 9.在线性单链表中删除一个元素后,不需要表中的数据元素,只需改变被删除元素所在结点的的指针域即可。 10. 在带表头结点的单链表中,查找第i个结点。只能从单链表的,沿着结点的,直到搜索到第i个结点为止。 11. 在单链表中,若一个元素所在结点的地址为p,则其后继(件)结点的地址为。 12. 在单链表中,删除指针p所指向结点的后继结点时,需要把的值赋给p->next指针域。 13. 在单链表中指针p所指结点的后面,插入一个指针q所指的结点时,首先把的值赋给q->next,然后把的值赋给p->next。 14. 在一个带表头结点的单链表的表头插入或删除,与在其他位置插入或删除的操作过程是否相同?。 15. 在一个不带表头结点的单链表的表头插入或删除,与在其他位置插入或删除的操作过程是否相同?。 16. 在双向链表中的每一个结点,包含有两个指针域,一个指向结点,另一个指向其结点。 17. 在一个双向链表中,通过一个结点的prior 和 next指针域,能够分别访问到该结点的和结点。 18.由于在循环链表中设置了一个表头结点,因此,在任何情况下,循环链表中至少有一个结点存在,从而使空表与非空表的。 三、简答题 1.非空线性表的结构特征是什么? 2.线性表的顺序存储结构具有哪两个基本特点? 3.用一维数组存放线性表时,应注意什么? 4. 简述线性表顺序存储的优点和缺点。 5. 什么是线性表的链式存储结构? 6. 在带头结点的单链表中与在顺序表中,查找与给定元素值item相等的结点的操作有何不同? 7. 带表头结点的循环链表与前面所讨论的单链表相比具有哪两个特点? 四、算法设计 1. 分别编写在顺序表和链表中统计出值为x的元素个数的函数,统计结果由函数值返回。 2. 分别编写在顺序表和带表头结点的单链表中删除其值等于x的所有元素的函数。 3. 编写在单链表中删除具有重复值的多余结点,使每个结点的值均不同的函数。 参考答案 一、单选题 1.B 2.A 3.C 4.C 5.A 6.C 7.B 8.D 9.A 10.C 11.B 12.B 13.A 14.D 15.C 16.B 17.A 18.A 二、填空题 1. 没有,1,没有,1 2.序号 3. 长度,空表 4.相同 5.移动大量 6.顺序存储结构,链式存储结构 7.顺序表,线性链表 8.移动,指针域 9.移动,前一个结点 10.头指针出发,链域逐个向下 11. p->next 12. p->next->next 13. p->next,q 14.相同 15.不相同 16.前件,后件 17.前件,后件 18.运算统一 三、简答题 1. 答案:非空线性表的结构特征为: ①有且只有一个根结点a1 ,它无前件; ②有且只有一个终端结点a n ,它无后件; ③除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。 2. 答案:线性表的顺序存储结构具有如下两个基本特点: ①线性表中所有元素所占的存储空间是连续的; ②线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 3.答案:用一维数组存放线性表时,应注意数组的基本类型,要与线性表中数据元素的类型相同,而且该一维数组的长度,通常要定义得比线性表的实际长度大一些,以便对线性表进行各种运算。 4.答案:线性表顺序存储结构的优点是:简单、存储密度大、空间利用率高,对表中任意元素可直接确定其存储地址,随机访问存取效率高。 缺点是,在顺序表中进行插入与删除操作时,需大量移动数据元素,时间开销大;再者,在顺序存储结构下,线性表的长度估计困难,并且当有多个顺序表同时共享计算机的存储空间时,不便于对存储空间进行动态分配。 5.答案:假设数据结构中的每一个数据结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。若每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即 前件或后件)。通过每个结点的指针域,将n个结点按其逻辑顺序连接在一起而构成的数据存储结构,称为链式存储结构。 6.答案:在带表头结点的单链表中进行查找操作,不能像在顺序表中那样根据序号直接访问表中的元素,而只能依据给定数据元素值item,在带表头结点的单链表中从头指针出发,沿着结点的链域逐个向下进行查找。若查找成功,则返回首次找到的结点的地址。若查找失败,则返回NULL。 7.答案:带表头结点的循环链表与前面所讨论的单链表相比具有以下两个特点: ①循环链表的头结点的数据域为任意或者根据需要来设置,头结点的指针域指向线性表的第一个元素的结点(首结点)。头指针指向表头结点。 ②循环链表中最后一个结点的指针域不是NULL,而是指向表头结点。即在循环链表中,没有空指针,所有结点的指针构成了一个环状链。 四、算法设计 1. 算法由函数Count1( ) 和Count2( )所示: // Count1( )从顺序表上统计出值为x的元素个数的算法 int Count1(SeqList &L,ElemType x ) //使用&的参数L为引用参数 { int i=0,j; for(j=0;j if(L.list[j]==x) i++; return i; } // Count2从单链表上统计出值为x的元素个数的算法 int Count2(LinkList &H,ElemTtype x) { node *p=H.head->next; //将指向第1个结点的指针赋给p int i=0; //将i作为统计变量 while(p!=NULL) { if(p->data==x) i++; p=p->next; } return i; } 2. 算法由函数Delete1( )和Delete2( ) 所示: //Delete1( )从顺序表中删除具有给定值x的所有元素 void Delete1(SeqList &L,ElemType x) { int j,i=0; while(i { if(L.list[i]==x) { for(j=i+1;j L.list[j-1]=L.list[j]; L.length--; } else i++; } } // Delete2( )从单链表中删除具有给定值x的所有元素 void Delete2(LinkList &H,ElemType x) { node *q,*p=H.head; //将指向附加头结点的指针赋给p while(p->next!=NULL) { q=p->next; if(q->data==x) { p->next=q->next; //删除p 的后继结点,即q 结点 delete q; } else p=p->next; } } 3. 算法由Delete3( )所示: // Delete3( )从单链表中删除具有重复值的多余结点,可使所有结点的值均不同 void Delete3(LinkList &H) { node *p=H.head; //p链表的第1个结点 while(p!=NULL) { node *t1=p,*t2=p->next; //t2指向待处理的结点 while(t2!=NULL) { if(t2->data==p->data) //删除t2结点 { t1->next=t2->next; delete t2; t2=t1->next; //t2指向新的结点 } else { t1=t2; t2=t2->next; } } p=p->next; //p指向下一个结点 } } 第4章栈和队列 一、单选题 1.下列叙述中正确的是()。 A)线性表是线性结构 B)栈与队列是非线性结构 C)线性链表是非线性结构 D)树是线性结构 2.下列关于栈的叙述中正确的是()。 A)在栈中只能插入数据 B)在栈中只能删除数据 C)栈是先进先出的线性表 D)栈是先进后出的线性表 3.栈的插入和删除操作在()进行。 A)栈顶 B)栈底 C)任意位置 D)指定位置 4.当利用大小为N的一维数组,顺序存储一个栈时,用top表示栈顶指针(指示器),用top==N表示栈空,则向这个栈插入一个元素时,首先应执行()语句修改top指针。 A)top++; B)top--; C)top=0; D)top=N-1; 5. 利用数组a[N]顺序存储一个栈时,用top表示栈顶元素的下标位置,用top==-1表示栈空,用top==N-1表示栈满,则该数组所能存储栈的最大长度为()。 A)N-1 B)N C)N+1 D)N+2 6. 利用数组a[N]顺序存储一个栈时,用top表示栈顶指针,用top==N+1表示栈空,则该数组所能存储栈的最大长度为为N,则表示栈满的条件为()。 A)top==1; B)top==-1; C)top==0; D)top>1; 7. 利用数组a[N]顺序存储一个栈时,用top表示栈顶指针,用top==-1表示栈空,并已知栈未满,当元素x进栈时所执行的操作是()。 A)a[--top]=x; B)a[top--]=x; C)a[++top]=x; D)a[top++]=x; 8. 利用数组a[N]顺序存储一个栈时,用top表示栈顶指针,用top==-1表示栈空,并已知栈未空,当退栈并返回栈顶元素时所执行的操作是()。 A)return a[--top]; B)return a[top--]; C)return a[++top]; D)return a[top++]; 9. 假定一个链栈的栈顶指针用top表示,则该链栈为空的条件是()。 A)top!=NULL; B)top==top->next; C)top==NULL; D)top!=top->next; 10.假定一个链栈的栈顶指针用top表示,每个结点的结构由一个数据域data和一个指针域组成,当p指向的结点进栈时,执行的操作为()。 A)p->next=top;top=top->next; B)top=p;p->next=top; C)p->next=top->next;top->next=p; D)p->next=top;top=p; 11.假定一个链栈的栈顶指针用top表示,每个结点的结构由一个数据域data和一个指针域组成,退栈时所执行的指针操作为()。 A)p->next=top; B)top=top->data; C)top=top->next; D)top->next=top->next->next; 12.若让元素1,2,3依次进栈,则出栈次数不可能出现()的情况。 A)3,2,1 B)2,1,3 C)3,1,2 D)1,3,2 13.若让元素1,2,3,4依次进栈,则出栈次序不可能出现()的情况。 A)3,2,1,4 B)2,1,4,3 C)4,3,2,1 D)1,4,2,3 14.下列关于队列的叙述中正确的是()。 A)在队列中只能插入数据 B)在队列中只能删除数据 C)对列是先进先出的线性表 D)队列是先进后出的线性表 15.在一个顺序循环队列中,队头指针指向队头元素的()位置。 A)前一个 B)后一个 C)当前 D)最后 16. 在一个顺序循环队列中,队尾指针指向队尾元素的()位置。 A)前一个 B)后一个 C)当前 D)最后 17.从一个顺序循环队列中删除元素时,首先需要( )。 A)前移队头指针 B)取出队尾指针所指位置上的元素 C)后移队头指针 D)取出队头指针所指位置上的元素 18.假设一个顺序循环队列的队头指针和队尾指针分别用front和rear表示,则判别队空的条件为()。 A)front+1==rear B)rear+1==front C)front==0 D)front==rear 19.假设一个顺序循环队列存储于数组a[N]中,其队头指针和队尾指针分别用front和rear表示,则判断队列满的条件为()。 A)(rear-1)%N=front B)(rear+1)%N=front C)(front-1)%N=rear D)(front+1)%N=rear 20. 假设一个顺序循环队列存储于数组a[N]中,其队头指针和队尾指针分别用front 和rear表示,已知队列未满,当元素x入队时所执行的操作为()。 A)a[++rear%N]=x; B)a[r++%N]=x; C)a[--rear%N]=x; D)a[rear--%N]=x; 21. 假设一个顺序循环队列存储于数组a[N]中,其队头指针和队尾指针分别用front 和rear表示,已知队列未满,当出队并返回队头元素时所执行的操作为()。 A)return a[++rear%N]; B)return a[--rear%N]; C)return a[++front%N]; D)return a[front++%N]; 22.假设一个链接队列的队头指针和队尾指针分别为front和rear,则判别队列空的条件为()。 A)front==rear B)front!=NULL C)rear!=NULL D)front==NULL 23. 假设一个链接队列的队头指针和队尾指针分别为front和rear,每个结点由一个数值域data和一个指针域next构成,当出队时,所进行的指针操作为()。 A)front=front->next; B)front->next=rear;rear=rear->next; C)rear=rear->next; D)front=front->next;front->next=rear; 24.以下哪一个不是队列的基本运算()。 A)从队尾插入一个新元素 B)从队列中删除第i个元素 C)判断一个队列是否为空 D)读取队头元素的值 25.栈和队列的共同特点是()。 A)都是先进先出 B)都是先进后出 C)都只允许在端点处插入和删除元素 D)没有共同点 26.一个队列的入队序列是1,2,3,4,在队列的出队序列是()。 A)4,3,2,1 B)1,2,3,4 C)1,4,3,2 D)3,2,4,1 27.下列叙述中,()与在循环顺序队列中插入下一个元素有关。 A)与队头指针和队尾指针的值有关 B)只与队尾指针的值有关,与队头指针的值无关 C)只与队头指针的值有关,与队尾指针的值无关 D)与曾经进行过多少次插入操作有关 二、填空题 1. 在栈中,允许插入与删除的一端称为,而不允许插入与删除的另一端称为。 2. 往栈中插入一个元素称为运算。从栈中删除一个元素(即删除栈顶元素)称为运算。 3.栈又称为表,队列又称为表。 4.在一个用一维数组a[Max]表示的顺序栈中,该栈所含元素的个数最少为个,最多为个。 5.向一个顺序栈插入一个元素时,首先使后移一个位置,然后把新元素到这个位置上。 6.从一个顺序栈删除元素时,首先取出,然后再使减1。 7.队列的插入操作在进行,删除操作在进行。 8.一个顺序循环队列存于一维数组a[Max]中,假设队头指针和队尾指针分别为front 和rear,则判断队空的条件为,判断队满的条件为。 9. 一个顺序循环队列存于一维数组a[Max]中,假设队头指针和队尾指针分别为front 和rear,则求出队头指针和队尾指针的下一个位置的计算公式分别为和。 10. 一个顺序栈存储于一维数组a[ 0..N-1 ] 中,栈顶指针用top表示,当栈顶指针等于时,则为空栈,栈顶指针等于时,则为满栈。 11.在一个链栈中,若栈顶指针等于NULL,则为;在一个链队列中,若队头指针与队尾指针的值相同,则表示该队列为或该队。 12.假设一个链栈的栈顶指针为top,每个结点包含值域data和指针域next,当p所指向的结点入栈时,则首先执行操作,然后执行操作。 13. 假设一个链栈的栈顶指针为top,每个结点包含值域data和指针域next,当进行出栈运算时(栈非空),则要把栈顶指针top修改为的值。 14.向一个顺序循环队列中插入元素时,需要首先移动,然后再向它所指的位置新元素。 15.在一个空链队列中,假定队头指针和队尾指针分别为front和rear,当向其插入一个新结点*p时,则首先执行操作,然后执行操作。 16.假设front和rear分别为一个链队列的队头指针和队尾指针,则该链队列中只有一个结点的条件为。 17.在一个容量为15的循环队列中,若头指针front=6,尾指针rear=9,则该循环队列中共有个元素。 三、简答题 1. 什么是栈?栈组织数据的原则是什么? 2. 什么是顺序栈和链式栈? 3. 简述在顺序栈的栈顶插入一个元素的操作过程。 4. 简述在链栈中插入一个元素的操作过程。 5. 在循环队列中,仅依据头尾指针相等,无法判断队列是“空”还是“满”。要解决 这个问题,常用的两种方法是什么? 6. 一个栈的输入序列为A、B、C,若输出序列由A、B、C所构成,试给出全部可能的输出序列。 四、应用题(写出下面算法的结果) 1. void exem1(SeqStack &s) { int i,a[4]={15,24,38,44}; InitStack(s); //初始化s栈 Push(s,20); //向s栈压入20 Push(s,36); //向s栈压入36 for(i=0;i<4;i++) Push(s,a[i]); //a数组各元素入栈 cout< Push(s,a[2]-6); While(!StackEmpty(s)) Cout< cout< } 该算法的输出结果为: 2. void exam2(LinStack &s) { InitStack(s); //初始化s栈 Push(s,30); //向s栈压入30 Push(s,40); Push(s,50); int x=Pop(s)+2*Pop(s); Push(s,x); int i,a[4]={5,8,12,15}; for(i=0;i<4;i++) Push(s,a[i]); //将数组a各元素入栈 while(!StackEmpty(s)) cout< cout< } 该算法的输出结果为: 3. void exam3(SeqQueue &q) { InitQueue(q); //初始化队列q int i,a[4]={5,8,12,15}; for(i=0;i<4;i++) EnQueue(q,a[i]); //a数组各元素入队 EnQueue(q,DeQueue(q)); //入队元素是出队元素 EnQueue(q,30); //30入队 EnQueue(q,DeQueue(q)+10); While(!QueueEmpty(q)) cout< cout< } 该算法的输出结果为: 4. void exam4(LinQueue &Lq) { InitQueue(Lq); //初始化队列Lq EnQueue(Lq,25); //25入队 int i,a[5]={34,23,78,56,19}; for(i=0;i<5;i++) EnQueue(Lq,a[i]); //数组a各元素入队 DeQueue(Lq); //进行一次出队运算 EnQueue(Lq,DeQueue(Lq)); //入队元素是出队元素 While(!QueueEmpty(Lq)) Cout< Cout< } 该算法的输出结果为: 参考答案 一、单选题 1.A 2.D 3.A 4.B 5.B 6.A 7.C 8.B 9.C 10.D 11.C 12.C 13.D 14.C 15.C 16.B 17.D 18.D 19.B 20.B 21.D 22.D 23.A 24.B 25.C 26.B 27.A 二、填空题 1. 栈项,栈底 2. 进栈(或入栈),退栈(或出栈) 3. 后进先出,先进先出 4. 0,Max 5. 栈顶指针,插入(或写入) 6. 栈顶元素,栈顶指针 7. 队尾,队头 8. front==rear,(rear+1)%Max==front 9.(front+1)%Max,(rear+1)%Max 10.-1,N-1 11.空栈,空,只含有一个结点 12.p->next=top,top=p 13. top->next 14.应该:先插入(或写入)新元素,然后移动队尾指针 15. p->next=NULL,front=rear=p 16.(front==rear&&front!=NULL或 front==rear&&rear!=NULL) 17. 3 三、简答题 1. 答案:栈(stack ) 是限定在一端进行插入与删除的线性表。 栈是按照“先进后出”(FILO,First in Last Out)或“后进先出”(LIFO,Last in First Out)的原则组织数据的。 2. 答案:栈是一种线性表,采用顺序存储方式存储的栈,称为顺序栈;而采用链式存储方式存储的栈,称为链式栈。 3. 答案:在顺序栈的栈顶插入一个元素时,首先将栈顶指针s->top 加1,以指示新的栈顶位置,然后将新元素插入到栈顶指针指向的位置。 4. 答案:当向链栈的栈顶插入一个元素时,可使该元素结点的指针域指向原来的栈顶结点,而栈顶指针则修改为指向该元素的结点,这样,该结点就成为新的栈顶结点。 5. 答案:在循环队列中,仅依据头尾指针相等,无法判断队列是“空”还是“满”。要解决这个问题,常用两种方法:一是少用一个元素空间,约定入队前,若尾指针加1后等于头指针,则认为队列满(rear所指单元始终为空);二是使用一个计数器,记录队列中元素的总数(实际上是队列的长度)。 习题课 填空 1、对于一棵二叉树,若一个结点的编号为i,则它的左孩子结点的编号为,双亲结点的编号为。 2、向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动个元素。 3、在一棵二叉树中,若双分支结点数为5个,单分支结点数为6个,则叶子结点数 为个。 4、为了实现折半查找,线性表必须采用方法存储。顺序 5、一种抽象数据类型包括数据对象和。 6、在以L为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分别为__________和_______。 7、数据结构被形式地定义为(D, R),其中D是的有限集合,R是D上的有限集合。 8、队列的插入操作在进行,删除操作在进行。 9、二叉搜索树的中序遍历得到的结点序列为____ ____。 10、在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。 11、栈的特点是。 12、在单链表中,除了首元结点外,任一结点的存储位置由。 13、在一个具有n个顶点的无向图中,要连通所有顶点则至少需要条边。 14、深度为k(设根的层数为1)的完全二叉树至少有个结点,至多 有个结点。 15、一棵深度为6的满二叉树有个分支结点和个叶子结点。 16、一个算法的效率可分为效率和效率。 17、队列的特点是。 18、一棵深度为5的满二叉树中的结点数为个。 19、在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边。 简答题 1、已知一组元素为(38,26,62,94,35,50,28,55),画出按元素排列顺序输入生成的一棵二叉搜索树。 答: 2、假设有二维数组A[0..5,0..7],每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,计算: (1)末尾元素A57的第一个字节地址为; (2)若按列存储时,元素A47的第一个字节地址为。 (3) 数组A的体积(存储量); (4) 若按行存储时,元素A14的第一个字节地址为。 图 1. 填空题 ⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵ 任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶ 图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk 【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。 2. 选择题 ⑴ 在一个无向图中,所有顶点的度数之和等于所有边数的()倍。 A 1/2 B 1 C 2 D 4 【解答】C 【分析】设无向图中含有n个顶点e条边,则。 数据结构试题及答案 一、单项选择题 (1)一个算法应该就是()。 A)程序???B)问题求解步骤得描述 C)要满足五个基本属性??D) A与C (2)算法指得就是()。 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)下列程序得时间复杂度为() i=0;s=0; while(s 一、单选题(每题 2 分,共20分) 1. 1.对一个算法的评价,不包括如下(B )方面的内容。 A.健壮性和可读性B.并行性C。正确性D.时空复杂度 2.2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向 的结点,则执行(A ). A. p-〉next=HL->next; HL-〉next=p; B. p-〉next=HL;HL=p; C。p->next=HL; p=HL;D. HL=p; p-〉next=HL; 3.3.对线性表,在下列哪种情况下应当采用链表表示?( B ) A.经常需要随机地存取元素 B。经常需要进行插入和删除操作 C。表中元素需要占据一片连续的存储空间D.表中元素的个数不变 4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序 列的是( C ) A. 2 3 1 ??? B. 3 2 1 C。 3 1 2 ??? D. 1 23 5. 5.AOV网是一种(D )。 A.有向图B.无向图C.无向无环图D.有向无环图 6.6。采用开放定址法处理散列表的冲突时,其平均查找长度(B)。 A.低于链接法处理冲突B.高于链接法处理冲突C.与链接法处理冲突相同 D。高于二分查找 7.7。若需要利用形参直接访问实参时,应将形参变量说明为(D ) 参数. A。值B。函数 C.指针 D。引用 8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结 点都具有相同的( A )。 A。行号 B.列号 C.元素值 D.非零元素个数 9.9.快速排序在最坏情况下的时间复杂度为( D )。 A。O(log 2n) B.O(nlog 2 n) C。0(n) D.0 (n2) 10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( C ). A.O(n) B. O(1) C。 O(log 2 n) D. O(n2)二、运算题(每题 6 分,共24分) 数据结构练习题(含答案) 数据结构练习题 习题1 绪论 1.1 单项选择题 1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的①、数据信息在计算机中的②以及一组相关的运算等的课程。 ① A.操作对象B.计算方法C.逻辑结构D.数据映象 ②A.存储结构B.关系C.运算D.算法 2. 数据结构DS(Data Struct)可以被形式地定义为DS=(D,R),其中D是①的有限集合,R是D上的②有限集合。 ① A.算法B.数据元素C.数据操作D.数据对象 ② A.操作B.映象C.存储D.关系 3. 在数据结构中,从逻辑上可以把数据结构分成。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 4. 算法分析的目的是①,算法分析的两个主要方面是②。 ① A. 找出数据结构的合理性 B. 研究算法中的输 入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂 性和文档性 ② A. 空间复杂性和时间复杂性 B. 正确性和简明性 C. 可读性和文档性 D. 数据复杂性和程序 复杂性 5. 计算机算法指的是①,它必具备输入、输出和②等五个特性。 ① A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ② A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 1.2 填空题(将正确的答案填在相应的空中) 1. 数据逻辑结构包括、和三种类型,树形结构和图形结构合称为。 2. 在线性结构中,第一个结点前驱结点,其余每个结点有且只有个前驱结点;最后一个结点后续结点,其余每个结点有且只有个后续结点。 3. 在树形结构中,树根结点没有结点,其余每个结点有且只有个直接前驱结点,叶子结点没有结点,其余每个结点的直接后续结点可以。 4. 在图形结构中,每个结点的前驱结点数和后续结点数可以。 5. 线性结构中元素之间存在关系,树形结构中元素之间存在关系,图形结构中元素之间存在关系。 6. 算法的五个重要特性是__ __ , __ __ , ___ _ , 一.是非题 1. 数据结构(应该是抽象数据类型)可用三元式表示(D,S,P)。其中:D是数据对象,S是D上的关系,P是对D的基本操作集。(f) 2 简单地说,数据结构是带有结构的数据元素的集合。(t) 3 判断带头结点的非空循环单链表(头指针为L)中指针p所指结点是最后一个元素结点 的条件是:p->next==L。(t) 4 线性表的链式存储结构具有可直接存取表中任一元素的优点。(f) 5 线性表的顺序存储结构优于链式存储结构。(f) 6. 在单链表P指针所指结点之后插入S结点的操作是: P->next= S ; S-> next = P->next;。(f) (顺序弄反了S-> next = P->next; P->next= S ;) 7 对于插入、删除而言,线性表的链式存储优于顺序存储。(t) 8. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。(f) 9. 栈和队列是操作上受限制的线性表。(t) 10. 队列是与线性表完全不同的一种数据结构。(f) (栈和队列是操作上受限制的线性表) 11. 队列是一种操作受限的线性表,凡对数据元素的操作仅限一端进行。(f) (两端) 12. 栈和队列也是线性表。如果需要,可对它们中的任一元素进行操作。(f) ( “如果需要,可对它们中的任一元素进行操作.” 这里的意思是在O(1)的时间来读和改某个元素。比如数组的直接索引。 栈:如果需要,每一次只能对栈顶的元素进行操作 队列:如果需要,每一次只能对两端,或者只能对队列头的元素进行操作。) 13. 栈是限定仅在表头进行插入和表尾进行删除运算的线性表。(f) 14. 二叉树中每个结点有两个子结点,而对一般的树,则无此限制,所以,二叉树是树的特殊情形。(f) (二叉树和树相互独立) 15 二叉树是一棵结点的度最大为二的树。(f) (二叉树和树相互独立) 16 赫夫曼树中结点个数一定是奇数。(t) 17 在二叉树的中序遍历序列中,任意一个结点均处在其左孩子结点的后面。(t) (LDR) 18 假设B是一棵树,B′是对应的二叉树。则B的后根遍历相当于B′的后序遍历。(f) (后根遍历相当于中序遍历) 19. 通常,二叉树的第i层上有2i-1个结点。(f) (应该为1~2i-1个) 20. 中序线索二叉树的优点是便于在中序下查找直接前驱结点和直接后继结点。(t) 21 二叉树的先序遍历序列中,任意一个结点均处在其孩子结点的前面。(t) 22 由树结点的先根序列和后根序列可以唯一地确定一棵树。(t) 23 邻接多重表可以用以表示无向图,也可用以表示有向图。(f) (只能表示无向图,有向图用十字链表) 24 可从任意有向图中得到关于所有顶点的拓扑次序。(f) (带环图没有) 25 有向图的十字链表是将邻接表和逆邻接表合二为一的链表表示形式。(t) 《数据结构》题库及答案 一、选择题 1.线性表的顺序存储结构是一种 的存储结构,线性表的链式存储结构是一种 的存储结构。 a. 随机存储; b.顺序存储; c. 索引存取; d. HASH 存取 2.一个栈的入栈序列是a,b,c,d,e ,则栈的不可能的输出序列是 。 a. edcba; b. decba; c. dceab; d.abcde 3.一个队列的入队序列是1,2,3,4,则队列的输出序列是 。 a. 4,3,2,1; b. 1,2,3,4; c. 1,4,3,2; d.3,2,4,1 4.在一个单链表中,已知p 结点是q 结点的直接前驱结点,若在p 和q 之间插入结点s ,则执行的操作是 。 a. s->nxet=p->next; p->next=s; b. p->next=s->next; s->next=p; c. q->next=s; s->next=p; d. p->next=s; s->next=q; 5.设有两个串p,q ,求q 在p 中首次出现的位置的运算称作 。 a.联接 b.模式匹配 c.求子串 d.求串长 6.二维数组M 的成员是6个字符(每个字符占一个存储单元)组成的串,行下标i 的范围从0到8,列下标j 的范围从1到10,则存放M 至少需要 个字节。 a. 90 b.180 c.240 d.540 7.在线索二叉树中,结点p 没有左子树的充要条件是 。 a. p->lch==NULL b. p->ltag==1 c. p->ltag==1且p->lch=NULL d. 以上都不对 8.在栈操作中,输入序列为(A ,B ,C ,D ),不可能得到的输出序列为:______ A 、(A , B , C , D ) B 、(D ,C ,B ,A ) C 、(A ,C ,D ,B ) D 、(C ,A ,B ,D ) 9.已知某二叉树的后序序列是dabec ,中序序列是debac ,则它的先序序列是 。 A 、acbed B 、decab C 、deabc D 、cedba 10.设矩阵A 是一个对称矩阵,为了节省存储空间,将其下三角部分(见下图)按行序存放在一维数组B[1..n(n-1)/2]中,对任一上三角部分元素)(j i a ij ,在一维数组B 的存放位置是 。 第一章 1.在数据结构中,从逻辑上可以把数据结构分为(C ) A.动态结构和静态结构 B. 紧凑结构和非紧凑结构 C.线性结构和非线性结构 D. 内部结构和外部结构 ● 2.在数据结构中,与所使用的计算机无关的是( A ) A. 逻辑结构 B. 存储结构 C. 逻辑和存储结构 D. 物理结构 3.下面程序的时间复杂度为____O(mn)_______。 for (int i=1; i<=m; i++) for (int j=1; j<=n; j++ ) S+=i 第二章线性表 ●链表不具备的特点是(A) A 可以随机访问任一结点(顺序) B 插入删除不需要移动元素 C 不必事先估计空间 D 所需空间与其长度成正比 2. 不带头结点的单链表head为空的判定条件为(A ),带头结点的单链表head为空的判定条件为(B ) A head==null B head->next==null C head->next==head D head!=null ●3.在线性表的下列存储结构中,读取元素花费时间最少的是(D) A 单链表 B 双链表 C 循环链表 D 顺序表 ● 4.对于只在表的首、尾两端进行手稿操作的线性表,宜采用的存储结构为(C) A 顺序表 B 用头指针表示的单循环链表 C 用尾指针表示的单循环链表 D 单链表 ● 5.在一个具有n 个结点的有序单链表中插入一个新的结点,并保持链表元素仍然有序, 则操作的时间复杂度为( D ) A O(1) B O(log2n) C O(n2) D O(n) ● 6.在一个长度为n (n>1)的单链表上,设有头和尾两个指针,执行(B)操作与链表的长 度有关 A 删除单链表中第一个元素 B 删除单链表中最后一个元素 C 在第一个元素之前插入一个新元素 D 在最后一个元素之后插入一个新元素 ●7.与单链表相比,双向链表的优点之一是(D) A 插入删除操作更简单 B 可以进行随机访问 C 可以省略表头指针或表尾指针 D 顺序访问相邻结点更容易 ●8.若list是某带头结点的循环链表的头结点指针,则该链表最后那个链结点的指针域 (头结点的地址)中存放的是( B ) A list的地址 B list的内容 C list指的链结点的值 D 链表第一个链结点的地址 ●9.若list1和list2分别为一个单链表与一个双向链表的第一个结点的指针,则( B ) A list2比list1占用更多的存储单元 B list1与list2占用相同的存储单元 C list1和list2应该是相同类型的指针变量 D 双向链表比单链表占用更多的存储单元 10.链表中的每个链结点占用的存储空间不必连续,这句话正确吗? (不正确) 11. 某线性表采用顺序存储结构,元素长度为4,首地址为100,则下标为12的(第13个)元素的存储地址为148。V 100+4*12=148 11.在顺序表的(最后一个结点之后)插入一个新的数据元素不必移动任何元素。 12.若对线性表进行的操作主要不是插入删除,则该线性表宜采用(顺序)存储结构,若频繁地对线性表进行插入和删除操作,则该线性表宜采用( 链 )存储结构。 第一章绪论 选择题 1.组成数据的基本单位是() (A)数据项(B)数据类型(C)数据元素(D)数据变量 2.数据结构是研究数据的()以及它们之间的相互关系。 (A)理想结构,物理结构(B)理想结构,抽象结构 (C)物理结构,逻辑结构(D)抽象结构,逻辑结构 3.在数据结构中,从逻辑上可以把数据结构分成() (A)动态结构和静态结构(B)紧凑结构和非紧凑结构 (C)线性结构和非线性结构(D)内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。 ①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像 ②(A)结构(B)关系(C)运算(D)算法 5.算法分析的目的是()。 (A)找出数据结构的合理性(B)研究算法中的输入和输出的关系 (C)分析算法的效率以求改进(D)分析算法的易懂性和文档性 6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。 ①(A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法 ②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性 (C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性 二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。() 3.数据元素是数据的最小单位。() 4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。() 5.算法的时间复杂度取决于问题的规模和待处理数据的初态。() 三、填空题 1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。 2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。 3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以_________。 5.线性结构中元素之间存在________关系,树形结构中元素之间存在______关系,图形结构中元素之间存在_______关系。 6.算法的五个重要特性是_______、_______、______、_______、_______。 7.数据结构的三要素是指______、_______和________。 8.链式存储结构与顺序存储结构相比较,主要优点是________________________________。 9.设有一批数据元素,为了最快的存储某元素,数据结构宜用_________结构,为了方便插入一个元素,数据结构宜用____________结构。 四、算法分析题 1.求下列算法段的语句频度及时间复杂度参考答案: 选择题1. C 2.C 3. C 4. A、B 5. C 6.C、B 图 1. 填空题 ⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk 单选题(每题2分,共20分) 1. 1. 对一个算法的评价,不包括如下(B )方面的内容。 A .健壮性和可读性 B .并行性 C .正确性 D .时空复杂度 2.2. 在带有头结点的单链表HL 中,要向表头插入一个由指针 p 指向 的结点,则执行(A )。 A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p; 都具有相同的(A )。 A.行号 B .列号 C .元素值 D .非零元素个数 9. 快速排序在最坏情况下的时间复杂度为(D )。 A. O(log 2n) B . O(nlog 2n) C . 0(n) D 10.10. 从二叉搜索树中查找一个元素时,其时间复杂度大致 为 A. O(n) B. O(1) C. O(log 2 n) D. O(n 二、 运算题(每题6分,共24分) 1. 1. 数据结构是指数据及其相互之间的 _________________ 。当结点之 间存在M 对N (M N)的联系时,称这种结构为 __________________________ 。 2. 2. 队列的插入操作是在队列的_ _尾 ________ 行,删除操作是在队 列的 ____ 首 _____ 行。 3. 3. 当用长度为N 的数组顺序存储一个栈时,假定用top==N 表示栈 C. p->next=HL; p=HL; 3. 3. A. C. D. HL=p; p-> next=HL; 对线性表,在下列哪种情况下应当采用链表表示? 经常需要随机地存取元素 B. 表中元素需要占据一片连续的存储空间 一个栈的输入序列为1 2 3, 4. 4. 列的是(C ) A. 2 3 1 C. 3 1 2 AOV 网 是一种(D ) 有向 图 B .无向图 (B ) 经常需要进行插入和删除操作 D.表中元素的个数不变 则下列序列中不可能是栈的输出序 B. 3 2 1 5. 5. 6. .无向无环图 D .有向无环图 采用 开放定址法处理散列表的冲突时,其平均查找长度( B. 高于链接法处理冲突 D .高于二分查找 7. 8. 6. A.低于链接法处理冲突 .与链接法处理冲突相同 7. 参数。 A.值 8. B)。 若需要利用形参直接访问实参时,应将形参变量说明为( B .函数 C .指针 D .引用 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点 9. .0(n 2) (C )。 2 ) 第一章绪论 一、选择题 1.组成数据的基本单位是() (A)数据项(B)数据类型(C)数据元素(D)数据变量 2.数据结构是研究数据的()以及它们之间的相互关系。 (A)理想结构,物理结构(B)理想结构,抽象结构 (C)物理结构,逻辑结构(D)抽象结构,逻辑结构 3.在数据结构中,从逻辑上可以把数据结构分成() (A)动态结构和静态结构(B)紧凑结构和非紧凑结构 (C)线性结构和非线性结构(D)内部结构和外部结构 4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。 ① (A)数据元素(B)计算方法(C)逻辑存储(D)数据映像 ② (A)结构(B)关系(C)运算(D)算法 5.算法分析的目的是()。 (A)找出数据结构的合理性(B)研究算法中的输入和输出的关系 (C)分析算法的效率以求改进(D)分析算法的易懂性和文档性 6.计算机算法指的是(①),它必须具备输入、输出和(②)等5 个特性。 ① (A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法 ② (A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性 (C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性 二、判断题 1.数据的机内表示称为数据的存储结构。() 2.算法就是程序。() 3.数据元素是数据的最小单位。() 4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。() 5.算法的时间复杂度取决于问题的规模和待处理数据的初态。() 三、填空题 1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。 2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。 3.在树形结构中,树根结点没有_______结点,其余每个结点有且只 有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。 4.在图形结构中,每个结点的前驱结点数和后续结点数可以 _________。 5.线性结构中元素之间存在________关系,树形结构中元素之间存 在______关系,图形结构中元素之间存在_______关系。 6.算法的五个重要特性是_______、_______、______、_______、 习题1 一、单项选择题 A1.数据结构是指()。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 C2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 D3.树形结构是数据元素之间存在一种()。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 B4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。 for(i=1; i<=n; i++) for(j=i; j<=n; j++) x++; A.O(1) B.O(2n) C.O(n) D.O(3n) CA5.算法分析的目的是(1),算法分析的两个主要方面是(2)。 (1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2) A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。 (1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。 A.低 B.高 C.相同 D.不好说 8.数据结构作为一门独立的课程出现是在()年。 A.1946 B.1953 C.1964 D.1968 9.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。 A.正确 B.错误 C.前半句对,后半句错 D.前半句错,后半句对 一、选择题。(每小题2分,共40分) (1) 计算机识别.存储和加工处理的对象被统称为____A____。 A.数据 B.数据元素 C.数据结构 D.数据类型 (2) 数据结构通常是研究数据的____ A _____及它们之间的联系。 A.存储和逻辑结构 B.存储和抽象 C.理想和抽象 D.理想与逻辑 (3) 不是数据的逻辑结构是____ A ______。 A.散列结构 B.线性结构 C.树结构 D.图结构 (4) 数据结构被形式地定义为 一、单项选择题 1 某算法的时间复杂度是O(n 2 ) ,表明该算法()。 A 问题规模是n2 B 问题规模与n2成正比 C 执行时间等于n2 D 执行时间与n2成正比 2、关于数据结构的描述,不正确的是()。 A数据结构相同,对应的存储结构也相同。 B数据结构涉及数据的逻辑结构、存储结构和施加其上的操作等三个方面。 C数据结构操作的实现与存储结构有关。 D定义逻辑结构时可不考虑存储结构。 3、按排序策略分来,起泡排序属于()。 A插入排序B选择排序C交换排序D归并排序 4、利用双向链表作线性表的存储结构的优点是()。 A便于进行插入和删除的操作 B 提高按关系查找数据元素的速度 C节省空间D便于销毁结构释放空间 5、一个队列的进队顺序为1,2,3,4,则该队列可能的输出序列是()。 A 1,2,3,4 B 1,3,2,4 C 1,4,2,3 D 4,3,2,1 6、 Dijkstra算法是按()方法求出图中从某顶点到其余顶点最短路径的。 A按长度递减的顺序求出图的某顶点到其余顶点的最短路径 B按长度递增的顺序求出图的某顶点到其余顶点的最短路径 C通过深度优先遍历求出图中从某顶点到其余顶点的所有路径 D通过广度优先遍历求出图的某顶点到其余顶点的最短路径 7、字符串可定义为n( n≥ 0)个字符的有限()。其中,n是字符串的长度,表明字符串中字符的个数。 A集合B数列C序列D聚合 8、在二维数组A[9][10]中,每个数组元素占用 3 个存储单元,从首地址SA 开始按行连续存放。在这种情况下,元素A[8][5]的起始地址为()。 A SA+141 B SA+144 C SA+222 D SA+255 9、已知广义表为L(A(u,v,(x,y),z),C(m,(),(k,l,n),(())),((())),(e,(f,g),h)),则它的长度是()。 A2B3C4D5 10.对于具有n(n>1)个顶点的强连通图,其有向边条数至少有_____。 A. n+1 B. n C. n-1 D. n-2 11.一个递归算法必须包括 __________ 。 A. 递归部分 B . 结束条件和递归部分 C. 迭代部分 D. 结束条件和迭代部分 12.从逻辑上看可以把数据结构分为__________两大类。 A.动态结构、静态结构B.顺序结构、链式结构 C.线性结构、非线性结构D.初等结构、构造型结构 13、若在长度为n 的顺序表的表尾插入一个新元素的渐进时间复杂度为()。 A O(n) B O(1) C O(n 2) D O(log 2n) 14.采用顺序搜素方式搜索长度为 n 的线性表时,在等概率情况下,搜索成功时的平均搜索 长度为 __________。 A. n B. n/2 C . (n+1)/2 D. (n-1)/2 15、非空的循环单链表first的链尾结点(由p 所指向)满足()。 A p->link==NULL; B P==NULL; 第 1 章绪论 课后习题讲解 1、填空 ⑴( )就是数据的基本单位,在计算机程序中通常作为一个整体进行考虑与处理。 【解答】数据元素 ⑵( )就是数据的最小单位,( )就是讨论数据结构时涉及的最小数据单位。 【解答】数据项,数据元素 【分析】数据结构指的就是数据元素以及数据元素之间的关系。 ⑶从逻辑关系上讲,数据结构主要分为( )、( )、( )与( )。 【解答】集合,线性结构,树结构,图结构 ⑷数据的存储结构主要有( )与( )两种基本方法,不论哪种存储结构,都要存储两方面的内容:( )与( )。 【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系 ⑸算法具有五个特性,分别就是( )、( )、( )、( )、( )。 【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性 ⑹算法的描述方法通常有( )、( )、( )与( )四种,其中,( )被称为算法语言。 【解答】自然语言,程序设计语言,流程图,伪代码,伪代码 ⑺在一般情况下,一个算法的时间复杂度就是( )的函数。 【解答】问题规模 ⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为( ),若为 n*log25n,则表示成数量级的形式为( )。 【解答】Ο(1),Ο(nlog2n) 【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。 2、选择题 ⑴顺序存储结构中数据元素之间的逻辑关系就是由( )表示的,链接存储结构中的数据元素之间的逻辑关系就是由( )表示的。 A 线性结构 B 非线性结构 C 存储位置 D 指针 【解答】C,D 【分析】顺序存储结构就就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。 习题课 填空 1对于一棵二叉树,若一个结点的编号为i,则它的左孩子结点的编号为 ________________ , 双亲结点的编号为_____________ 。 2、向一个长度为n的向量中删除第i个元素(1 < i < n)时,需向前移动_________ 个元素。 3、在一棵二叉树中,若双分支结点数为5个,单分支结点数为6个,则叶子结点数 为__________ 个。 4、为了实现折半查找,线性表必须采用_____________ 方法存储。顺序 5、一种抽象数据类型包括数据对象________________ 和 ______________。 6、在以L为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分 别为___________ 和 _______ 。 7、数据结构被形式地定义为(D, R),其中D是_________ 的有限集合,R是D上的_________ 有限集合。 8、队列的插入操作在_________ 进行,删除操作在___________ 进行。 9、二叉搜索树的中序遍历得到的结点序列为______ _____ _ 。 10、在顺序表中插入或删除一个元素,需要平均移动_________________元素,具体移动的元素个数与______________________ 关。 11、栈的特点是____________________ 。 12、在单链表中,除了首元结点外,任一结点的存储位置由__________ 。 13、在一个具有n个顶点的无向图中,要连通所有顶点则至少需要_________ 条边。 14、深度为k (设根的层数为1)的完全二叉树至少有个结点,至多 有个结点。 15、一棵深度为6的满二叉树有_______ 个分支结点和______ 个叶子结点。 16、一个算法的效率可分为____________ 效率和____________ 效率。 仃、队列的特点是______________________ 。 18、一棵深度为5的满二叉树中的结点数为__________ 个。 19、在一个具有n个顶点的无向完全图中,包含有__________ 条边,在一个具有n个顶点的有 向完全图中,包含有_________ 条边。 第1章绪论 一、判断题 1.数据的逻辑结构与数据元素本身的容和形式无关。(√) 2.一个数据结构是由一个逻辑结构和这个逻辑结构上的一个基本运算集构成的整体。(√) 3.数据元素是数据的最小单位。(×) 4.数据的逻辑结构和数据的存储结构是相同的。(×) 5.程序和算法原则上没有区别,所以在讨论数据结构时可以通用。(×) 6.从逻辑关系上讲,数据结构主要分为线性结构和非线性结构两类。(√) 7.数据的存储结构是数据的逻辑结构的存储映象。(√) 8.数据的物理结构是指数据在计算机实际的存储形式。(√) 9.数据的逻辑结构是依赖于计算机的。(×) 10.算法是对解题方法和步骤的描述。(√) 二、填空题 1.数据有逻辑结构和存储结构两种结构。 2.数据逻辑结构除了集合以外,还包括线性结构、树形结构和图形结构。 3.数据结构按逻辑结构可分为两大类,它们是线性结构和非线性结构。 4.树形结构和图形结构合称为非线性结构。 5.在树形结构中,除了树根结点以外,其余每个结点只有1个前驱结点。 6.在图形结构中,每个结点的前驱结点数和后继结点数可以任意多个。 7.数据的存储结构又叫物理结构。 8.数据的存储结构形式包括顺序存储、链式存储、索引存储和散列存储。 9.线性结构中的元素之间存在一对一的关系。 10.树形结构中的元素之间存在一对多的关系。 11.图形结构的元素之间存在多对多的关系。 12.数据结构主要研究数据的逻辑结构、存储结构和算法(或运算)3个方面的容。 13.数据结构被定义为(D,R),其中D是数据的有限集合,R是D上的关系有限集合。 14.算法是一个有穷指令的集合。 15.算法效率的度量可以分为事先估算法和事后统计法。 16.一个算法的时间复杂度是算法输入规模的函数。 17.算法的空间复杂度是指该算法所耗费的存储空间,它是该算法求解问题规模的n的函数。 18.若一个算法中的语句频度之和为T(n)=6n+3nlog2n,则算法的时间复杂度为O(nlog2n)。 19.若一个算法的语句频度之和为T(n)=3n+nlog2+n2,则算法的时间复杂度为O(n2)。 20.数据结构是一门研究非数值计算的程序问题中计算机的操作对象,以及它们之间的关系和运算的学 科。 三、选择题 1.数据结构通常是研究数据的(A)及它们之间的相互关系。 A.存储结构和逻辑结构B.存储和抽象C.联系和抽象D.联系与逻辑 2.在逻辑上可以把数据结构分成(C)。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.部结构和外部结构。 3.数据在计算机存储表示时,物理地址和逻辑地址相同并且是连续的,称之为(C)。 A.存储结构B.逻辑结构C.顺序存储结构D.链式存储结构 4.非线性结构中的每个结点(D)。 A.无直接前驱结点.B.无直接后继结点. 习题1 一、单项选择题 1.数据结构是指()。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 3.树形结构是数据元素之间存在一种()。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。 for(i=1; i<=n; i++) for(j=i; j<=n; j++) x++; A.O(1) B.O(2n) C.O(n) D.O(3n) 5.算法分析的目的是(1),算法分析的两个主要方面是(2)。 (1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2) A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。 (1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。 A.低 B.高 C.相同 D.不好说 8.数据结构作为一门独立的课程出现是在()年。 A.1946 B.1953 C.1964 D.1968 9.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。 A.正确 B.错误 C.前半句对,后半句错 D.前半句错,后半句对数据结构习题和答案
数据结构-第六章-图-练习题及答案详细解析(精华版)
数据结构试题库答案
数据结构试题及答案10套
数据结构练习题(含答案)
数据结构复习题附答案
《数据结构》题库及答案
数据结构习题及答案精编版
数据结构习题及答案——严蔚敏_课后习题答案 精品
数据结构 第六章 图 练习题及答案详细解析
数据结构试题及答案(10套最新)
数据结构习题及答案——严蔚敏
数据结构习题及参考答案
数据结构复习题及答案(12级).
算法与数据结构题库与答案
数据结构习题与答案
数据结构习题和答案
数据结构练习试题和答案解析
数据结构习题及参考答案 .