1、软件基础习题 答案软件基础习题 答案数据结构习题答案 第一节 概 论 一、选择题 1要求同一逻辑结构的所有数据元素具有相同的特性,这意味着( )。 A数据元素具有同一的特点*B不仅数据元素包含的数据项的个数要相同,而且对应数据项的类型要一致 C每个数据元素都一样D数据元素所包含的数据项的个数要相等 2数据结构是一门研究非数值计算的程序设计问题中计算机的( (1) )以及它们之间的( (2) )和运算的学科。 (1) A操作对象 B计算方法 *C物理存储 D数据映像 (2) A结构*B关系C运算D算法 3数据结构被形式地定义为(D,R),其中D是( (1) )的有限集合,R是D上( (2) )的
2、有限集合。 (1) A算法*B数据元素C数据操作D逻辑结构 (2)A操作B映像C存储*D关系 4在数据结构中,从逻辑上可以把数据结构分为( )。 A动态结构和静态结构 B紧凑结构和非紧凑结构 *C线性结构和非线性结构 D内部结构和外部结构 5线性表的顺序存储结构是一种( )的存储结构。 *A随机存取B顺序存取 C索引存取 DHash存取 6算法分析的目的是( )。 A找出数据结构的合理性B研究算法中的输入和输出的关系 *C分析算法的效率以求改进D分析算法的易懂性和文档性 7计算机算法指的是( (1) ),它必须具备输入、输出和( (2) )等五个特征。 (1) A计算方法B排序方法*C解决某一
3、问题的有限运算序列D调度方法 (2) A可行性、可移植性和可扩充性 *B可行性、确定性和有穷性 C确定性,有穷性和稳定性 D易读性、稳定性和安全性 8线性表若采用链表存储结构,要求内存中可用存储单元的地址( )。 A必须是连续的B部分必须是连续的 C一定是不连续的*D连续不连续都可以 9在以下的叙述中,正确的是( )。 A线性表的线性存储结构优于链式存储结构*B二维数组是它的每个数据元素为一个线性表的线性表 C栈的操作方式是先进先出D队列的操作方式是先进后出 10根据数据元素之间关系的不同特性,以下四类基本的逻辑结构反映了四类基本的数据组织形式,其中解释错误的是( )。 *A集合中任何两个结点
4、之间都有逻辑关系但组织形式松散B线性结构中结点按逻辑关系依次排列形成一条“锁链”C树形结构具有分支、层次特性,其形态有点像自然界中的树D图状结构中的各个结点按逻辑关系互相缠绕,任何两个结点都可以邻接 11以下说法正确的是( )。 A数据元素是数据的最小单位B数据项是数据的基本单位 C数据结构是带有结构的各数据项的集合*D数据结构是带有结构的数据元素的集合 二、判断题 1数据元素是数据的最小单位。 2数据结构是带有结构的数据元素的集合。 3数据结构、数据元素、数据项在计算机中的映像分别称为存储结构、结点、数据域。 4数据项是数据的基本单位。 5数据的逻辑结构是指各数据元素之间的逻辑关系,是用户按
5、使用需要建立的。 6数据的物理结构是数据在计算机中实际的存储形式。 7算法和程序没有区别,所以在数据结构中二者是通用的。 8顺序存储结构属于静态结构,链式存储结构属于动态结构。 三、填空题 1所谓数据的逻辑结构指的是数据元素之间的_逻辑关系_。 2,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括三方面的内容_数据的逻辑结构、数据的存储结构、对数据施加的操作_。 3数据的逻辑结构包括_集合结构_、_线性结构_、_树型结构_和_图状结构_四种类型。 4在线性结构中,开始结点_没有_前驱结点,其余每个结点有且只有_一个_个前驱结点。 5在树形结构中,根结点只有_一个_,其余每个结点
6、有且只有_一个_前驱结点;叶结点没有_后继_结点,其余每个结点的后继结点可以有_任意个_ 6在图形结构中,每个结点的前驱结点和后继结点可以有_任意个_。 7算法的五个重要特性是_可行性_、_确定性_、_有穷性_、_输入_、_输出_。 1 8下列程序段的时间复杂度是_O_。for (i=1;ifor(i=1;i for(j=1;j10存储结构是逻辑结构的_物理_实现。 11从数据结构的观点看,通常所说的“数据”应分成三个不同的层次,即_数据_、_数据元素_和_数据项_。 12根据需要,数据元素又被称为_结点_、_记录_、_元素_或_顶点_。 13通常,存储结点之间可以有_顺序存储_、_链式存储_
7、、_索引存储_、_散列存储_四种关联方式,称为四种基本存储方式。 14通常从_确定性_、_可读性_、_健壮性_、_高效性_等几方面评价算法(包括程序)的质量。 15一个算法的时空性能是指该算法的_时间复杂度_和_空间复杂度_,前者是算法包含的_计算量_,后者是算法需要的_存储量_。 16在一般情况下,一个算法的时间复杂度是_问题规模_的函数。 217常见时间复杂度的量级有:常数阶O(_1_)、对数阶O(_log2n_)、线性阶O(_n_)、平方阶O(_n_)和指数阶O(_2n_)。通常认为,具有指数阶量级的算法是_不可行_的。 18数据结构的基本任务是数据结构的_设计_和_实现_。 19数据对
8、象是性质相同的_数据元素_的集合。 20抽象数据类型是指一个_数学模型_以及定义在该模型上的一组操作。 四、应用题 1分析下列程序段的时间复杂度。 ?i=1; WHILE (i答:O(log2n) 2叙述算法的定义及其重要特性。 答:算法是对特定问题求解步骤的一种描述,是指令的有限序列。其中每一条指令表示一个或多个操作。算法应该具有下列特性:可行性、确定性、有穷性、输入和输出。 3简述下列术语:数据,数据元素,数据结构,数据对象。 答:数据是信息的载体,是描述客观事物的数、字符,以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据元素是数据的基本单位。在不同的条件下,数据元素又可
9、称为元素、结点、顶点、记录等。数据结构是指相互之间存在着一种或多种关系的数据元素的集合。数据对象是性质相同的数据元素的集合。 4逻辑结构与存储结构是什么关系? 答:在数据结构中,逻辑结构与存储结构是密切相关的,存储结构不仅将数据元素存储到计算机中,而且还要表示各数据元素之间的逻辑关系。逻辑结构与计算机无关,存储结构是数据元素之间的关系在计算机中的表示。 5将数量级210,n,n2,n3,nlog2n,log2n,2n,n!,(23)n,n23按增长率进行排列。 答:(23)n,210,log2n,n23,n,nlog2n,n2,n3,2n,n! 6设有数据逻辑结构为:D=k1,k2,k3,?,
10、k9,R=,画出这个逻辑结构的图示,并确定相对于关系R,哪些结点是开始结点,哪些结点是终端结点? 答:图略。开始结点k1、k2,终端结点k6、k7。 7设有如图所示的逻辑结构图,给出它的逻辑结构,并说出它是什么类型的逻辑结构。 2 答:数据逻辑结构为:D=k1,k2,k3,?,k8,R=,其逻辑结构类型为树型结构。 8分析下列程序的时间复杂度(设n为正整数)。(1)int rec(int n) if(n=1)return(1); else return(n*rec(n-1); (2)x=91;y=100; While (y0)if(x10) y-;(3)i=1;j=0;while(i+jif(
11、ij)j+; else i+;(4)x=n;y=0; while(x=(y+1)*(y+1)y+; 1/2答:(1) O(n) (2) O(1) (3) O(n) (4) O(n) 9设n为正数。试确定下列各程序段中前面加记号的语句的频度:(1)i=1;k=0; while(ifor(i=1;ifor(j=i;j第二节 线性表 一、选择题 1线性结构中的一个结点代表一个( )。 *A数据元素B数据项C数据 D数据结构 2线性表L=(a1,a2,?,ai,?,an),下列说法正确的是( )。 A每个元素都有一个直接前驱和直接后继B线性表中至少要有一个元素C表中诸元素的排列顺序必须是小到大或大到小
12、的D*除第一个元素和最后一个元素外其余每个元素都有一个且仅有一个直接前驱和直接后继 3顺序表是线性表的( )。 A链式存储结构 *B顺序存储结构 C索引存储结构 D散列存储结构 4对于顺序表,以下说法错误的是( )。 * A顺序表是用一维数组实现的线性表,数组的下标可以看成是元素的绝对地址 B顺序表的所有存储结点按相应数据元素间的逻辑关系决定的次序依次排列 C顺序表的特点是:逻辑结构中相邻的结点在存储结构中仍相邻 D顺序表的特点是:逻辑上相邻的元素,存储在物理位置也相邻的单元中 5对顺序表上的插入、删除算法的时间复杂度分析来说,通常以( )为标准操作。 A条件判断*B结点移动C算术表达式D赋值
13、语句 6对于顺序表的优缺点,以下说法错误的是( )。 A无需为表示结点间的逻辑关系而增加额外的存储空间B可以方便地随机存取表中的任一结点*C插入和删除操作较方便D于顺序表要求占用连续的空间,存储分配只能预先进行(静态分配) 7在含有n个结点的顺序存储的线性表中,在任一结点前插入一个结点所需移动结点的平均次数为( )。 An*Bn/2C(n-1)/2D(n+1)/2 8在含有n个结点的顺序存储的线性表中,删除一个结点所需移动结点的平均次数为()。 AnBn/2*C(n-1)/2D(n+1)/2 9带头结点的单链表为空的条件是( )。 3 Ahead=NULL *Bhead-next=NULL C
14、head-next=head Dhead!=NULL 10非空单循环链表head的尾结点*p满足( )。 Ap-next=NULLBp=NULL*Cp-next=headDp=head 11在双循环链表的*p结点之后插入*s结点的操作是( )。 Ap-next=s;s-prior=p;p-next-prior=s;s-next=p-next; Bp-next=s;p-next-prior=s;s-prior=p:s-next=p-next; Cs-prior=p;s-next=p-next;p-next=s;p-next-prior=s; *Ds-prior=p;s-next=p-next;p
15、-next-pror=s;p-next=s; 12. 在一个单链表中,已知*q结点是*p结点的前驱结点,若在*q和*p之间插入结点*s,则执行( )。 As-next=p-next;p-next=s; Bp-next=s-next;s-next=p; *Cq-next=s; s-next=p;Dp-next=s; s-next=q; 13. 在一个单链表中,若*p结点不是最后结点。在*p之后插入结点*s,则执行( )。 As-next=p;p-next=s; *Bs-next=p-next;p-next=s; Cs-next=p-next; p=s; Dp-next=s; s-next=p;
16、14. 若某线性表中最常用的操作是取第i个元素和找第i个元素的前驱元素,则采用()存储方式最节省时间。 *A顺序表B. 单链表C双链表D单循环链表 15设rear是指向非空带头结点的单循环链表的尾指针,则删除表头结点的操作可表示为()。 Ap=rear;rear=rear-next; free(p)Brear=rear-next;free(rear); Crear=rear-next-next;free(rear); *Dp=rear-next-next;rear-next-next=p-next;free(p); 16在一个单链表中,若删除*p结点的后继结点,则执行( )。 *Aq=p-ne
17、xt;p-next=q-next;free(q); Bp=p-next;p-next=p-next-next;free(p); Cp-next=p-next;free(p-next); Dp=p-next-next;free(p-next); 17设指针p指向双链表的某一结点,则双链表结构的对称性可用( )式来刻画。 Ap-prior-next-=p-next-next Bp-prior-prior=p-next-prior *Cp-prior-next-=p-next-prior Dp-next-next=p-prior-prior 18在循环链表中,将头指针改设为尾指针rear后,其头结点
18、和尾结点的存储位置分别是( )。 Arear和rear-next-next*Brear-next和rear Crear-next-next和rearDrear和rear-next 19循环链表的主要优点是( )。 A不再需要头指针了 B已知某个结点的位置后,容易找到它的直接前驱C在进行插入、删除操作时,能更好地保证链表不断开*D从表中任一结点出发都能扫描到整个链表 20在线性表的下列存储结构中,读取元素花费时间最少的是( )。 A单链表B双链表C循环链表*D顺序表 二、判断题 1顺序存储的线性表可以随机存取。 2顺序存储的线性表的插入和删除操作不需要付出很大的代价,因为平均每次操作只有近一半的
19、元素需要移动。 3线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。 4在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上不一定相邻。 5在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。 6在单链表中,可以从头结点开始查找任何一个元素。 7线性表的链式存储结构优于顺序存储结构。 8在线性表的顺序存储结构中,插入和删除元素时,移动元素的个数与该元素的位置有关。 9在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。 10顺序存储方式只能用于存储线性结构。 三、填空题 1为了便于讨论,有时将
20、含n(n0)个结点的线性结构表示成(a1,a2,?,an),其中每个ai代表一个_结点_。a1称为_第一个_结点,an称为_最后一个_结点,i称为ai在线性表中的_位置_。对任意一对相邻结点ai、ai+1(1i2线性结构的基本特征是:若至少含有一个结点,则除起始结点没有直接_前驱_外,其他结点有且仅有一个直接_前驱_;除终端结点没有直接_后继_外,其他结点有且仅有一个直接_后继_。 3所有结点按一对一的邻接关系构成的整体就是_线性_结构。 4线性表的逻辑结构是_线性_结构,其所含结点的个数称为线性表的_长度_。 5在单链表中,删除p所指结点的直接后继的操作是_ q=p-next;p-next=
21、q-next;free(q);_ 6非空的单循环链表head的尾结点(指针p所指)满足_ p-next= head _。 4 7rear是指向非空带头结点的单循环链表的尾指针,则删除起始结点的操作可表示为_ p=rear-next;q=p-next;p-next=q-next;free(q);_。 8对于一个具有n个结点的单链表,在p所指结点后插入一个结点的时间复杂度为_O(1)_,在给定值为x的结点后插入新结点的时间复杂度为_ O(n)_。 9单链表表示法的基本思想是用_指针_表示结点间的逻辑关系。 10在顺序表中插入或删除一个元素,平均需要移动_一半_元素,具体移动的元素个数与_元素的位置
22、_有关。 11在一个长度为n的向量的第i(1in+1)个元素之前插入一个元素时,需向后移动_ n-i+1_个元素。 12在一个长度为n的向量中删除第i(1in)个元素时,需向前移动_ n-i _个元素。 13在双链表中,每个结点有两个指针域,一个指向_前驱_,另一个指向_后继_。 14在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为head=_ p-next-next ;_。 15设head指向单链表的表头,p指向单链表的表尾结点,则执行p-next=head后,该单链表构成_单循环链表_。 16在单链表中,若p和s是两个指针,且满足p-next与s
23、相同,则语句p-next=s-next的作用是_删除_s指向的结点。 17设r指向单循环链表的最后一个结点,要在最后一个结点之后插入s所指的结点,需执行的三条语句是_s-next= r-next _;r-next=s;r=s; 18在单链表中,指针p所指结点为最后一个结点的条件是_ p-next=NULL_。 19在双循环链表中,若要在指p所指结点前插入s所指的结点,则需执行下列语句:s-next=p; s-prior=p-prior;_ p-prior-next _=s;p-prior=s; 20在单链表中,若要在p所指结点之前插入s所指的结点,可进行下列操作:s-next=_ p-next
24、 _;p-next=s; temp=p-data;p-data=_ s-data _;s-data=_ temp _; 四、应用题 1描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。 答:首元结点是指链表中存储的线性表中的第一个数据元素的结点。为了操作方便,通常在链表的首元结点之前附设一个结点,称为头结点。头指针是指向链表中的第一个结点的指针。 2何时选用顺序表,何时选用链表作为线性表的存储结构为宜? 答:从空间上来看,当线性表的长度变化较大、难以估计其规模时,选用动态的链表作为存储结构比较合适,但链表除了需要设置数据域外,还要额外设置指针域,因此当线性表长度变化不大、易于
25、事先确定规模时,为了节约存储空间,宜采用顺序存储结构。从时间上来看,若线性表的操作主要是查找,很少进行插入和删除操作时,应选用顺序表。对于频繁进行插入和删除操作的线性表,宜采用链表作为存储结构。 3在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素? 答:平均移动表中大约一半的结点,插入操作平均移动n/2 个结点,删除操作平均移动/2 个结点。具体移动的次数取决于表长和插入、删除的结点的位置。 4为什么在单循环链表中设置尾指针比设置头指针更好? 答:单循环链表中无论设置尾指针还是头指针都可以遍历表中任一个结点,但设置尾指针时,若在表尾进行插入或删除操作可在O(1)
26、时间内完成,同样在表头进行插入或删除操作也可在O(1)时间内完成。但若设置的是头指针,表尾进行插入或删除操作,需要遍历整个链表,时间复杂度为O(n)。 5双链表和单循环链表中,若仅知道指针p指向某个结点,不知道头指针,能否将结点*p 从相应的链表中删除?若可以,其时间复杂度各为多少? 答:能删除。双链表上删除p所指向的结点的时间复杂度为O(1),单循环链表上删除p所指向的结点的时间复杂度为O(n)。 6下列算法的功能是什么? LinkList *testl(LinkList *L) /L是无头结点的单链表LinkList *q,*p;if(L&L-next) q=L;L=L-next;p=L;
27、while(p-next) p=p-next;p-next=q;q-next=NULL; return L; 答:如果长度大于1,则将首元结点删除并插入到表尾。 7如果有n个线性表同时共存,并且在处理过程中各表的长度会发生动态变化,线性表的总长度也会自动地改变。在此情况下,应选择哪一种存储结构?为什么? 5 答:应选用链式存储结构。因为顺序表是静态存储结构,只能预先分配,不能随着线性表长度的改变而变化。而链表则可根据需要动态地申请空间,因此适用于动态变化表长的线性表。 8若线性表的总数基本稳定,且很少进行插入、删除操作,但要求以最快的方式存取线性表的元素,应该用哪种存储结构?为什么? 答:应选
28、用顺序存储结构。因为顺序存储结构存取元素操作的时间复杂度为O(1)。 五、算法设计题 假设算法中用到的顺序表和链表结构如下: #define maxsize 100; Typedef struct node1 datatype datamaxsize; int length SeqList; Typedef struct node2 datatype data; struct node2 *next LinkedList ; 1试用顺序表作为存储结构,实现将线性表(a0,a1,a2,?an-1)就地逆置的操作,所谓“就地”是指辅助空间为O(1)。 答:(1)顺序表的就地逆置 分析:分别用两个整
29、型变量指向顺序表的两端,同时向中间移动,移动的同时互换两个下标指示的元素的值。void Seqreverse(SeqList *L)顺序表的就地逆置for(i=0;j=L-length-1;i t=L-datai; L-datai=j; L-dataj=t; (2)链表的就地逆置 分析:本算法的思想是逐个地把L的当前元素r插入到新的链表头部。void Linkedreverse(LinkedList *L)链表的就地逆置p=L-next;L-next=NULL;while(p!=NULL) r=p,p=p-next; r指向当前待逆置的结点,p记下下个结点 r-next=Lnext;L-next=r;放到表头 2设顺序表L是一个递增(允许有相同的值)有序表,试写一算法将x插入L中,并使L仍为一个有序表。 答:分析:先找到x的正确插入位置,然后将大于x
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1