数据结构习题集和答案
数据结构习题(含答案)

数据结构习题(含答案)数据结构习题(含答案)1. 题目描述:请实现一个栈,要求支持以下操作:push(x)将元素x 入栈;pop()弹出栈顶元素;top()返回栈顶元素;empty()判断栈是否为空。
解答:我们可以使用数组来实现栈的功能。
首先定义一个数组stack来存储栈中的元素,同时定义一个整型变量top来表示栈顶的索引位置。
初始时,将top设置为-1,表示栈中没有元素。
1.1 push(x)操作:当要将元素x入栈时,我们先将top的值加1,然后将x赋值给stack[top],即将x放入栈顶位置。
1.2 pop()操作:当调用pop()操作时,我们首先判断栈是否为空,即判断top的值是否为-1。
如果top等于-1,说明栈为空,无法进行pop()操作。
如果不为空,则将top的值减1,同时返回stack[top],即弹出栈顶元素。
1.3 top()操作:top()操作与pop()操作类似,只需在操作完成后不弹出栈顶元素,而是直接返回stack[top]即可。
1.4 empty()操作:empty()操作用来判断栈是否为空,只需判断top的值是否为-1即可。
如果top等于-1,则返回true,表示栈为空;否则返回false,表示栈不为空。
综上所述,我们可以用数组实现一个栈,满足push、pop、top和empty等操作。
2. 题目描述:请实现一个队列,要求支持以下操作:push(x)将元素x入队;pop()将队首元素出队;peek()返回队首元素;empty()判断队列是否为空。
解答:我们可以使用两个栈来实现一个队列的功能。
首先定义两个栈stack1和stack2,其中stack1用来存储新加入队列的元素,stack2用来存储队列中已经处理过的元素。
定义两个整型变量top1和top2,分别表示stack1和stack2的栈顶索引位置。
初始时,top1和top2均设置为-1,表示两个栈均为空。
2.1 push(x)操作:当要将元素x入队时,我们直接将x加入到stack1中,同时将top1的值加1。
数据结构各章习题及答案

数据结构习题及解答第1章 概述【例1-1】分析以下程序段的时间复杂度。
for(i=0;i<n;i++)for(j=0;j<m;j++) A[i][j]=0;解:该程序段的时间复杂度为O (m*n )。
【例1-2】分析以下程序段的时间复杂度。
i=s=0; ①while(s<n){ i++; ②s+=i; ③}解:语句①为赋值语句,其执行次数为1次,所以其时间复杂度为O (1)。
语句②和语句③构成while 循环语句的循环体,它们的执行次数由循环控制条件中s 与n 的值确定。
假定循环重复执行x 次后结束, 则语句②和语句③各重复执行了x 次。
其时间复杂度按线性累加规则为O (x )。
此时s 与n 满足关系式:s ≥n ,而s=1+2+3+…+x 。
所以有:1+2+3+…+x ≥n ,可以推出:x=n n 241212811+±-=+±-x 与n 之间满足x=f(n ),所以循环体的时间复杂度为O (n ),语句①与循环体由线性累加规则得到该程序段的时间复杂度为O (n )。
【例1-3】分析以下程序段的时间复杂度。
i=1; ①while(i<=n) i=2*i; ②解:其中语句①的执行次数是1,设语句②的执行次数为f (n ),则有:n n f ≤)(2。
得:T(n)=O(n2 log)【例1-4】有如下递归函数fact(n),分析其时间复杂度。
fact(int n){ if(n<=1) return(1); ①elsereturn(n*fact(n-1)); ②}解:设fact(n)的运行时间函数是T(n)。
该函数中语句①的运行时间是O(1),语句②的运行时间是T(n-1)+ O(1),其中O(1)为常量运行时间。
由此可得fact(n)的时间复杂度为O(n)。
习题1一、单项选择题1.数据结构是指(1. A )。
A.数据元素的组织形式B.数据类型C.数据存储结构D.数据定义2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为(2. C )。
数据结构习题集(包含全部答案)

数据结构习题集(自编)之阳早格格创做第一章绪论一、采用题1.数据结构是一门钻研非数值估计的步调安排问题中的支配对付象以及它们之间的()战运算的教科.A.结构B.闭系 C.运算 D.算法2.正在数据结构中,从逻辑上不妨把数据结构分成(). A.动背结媾战固态结构 B.紧稀结媾战非紧稀结构C.线性结媾战非线性结构D.逻辑结媾战保存结构3.线性表的逻辑程序战保存程序经常普遍的,那种道法().A.精确B.不精确 C.无法决定 D.以上问案皆分歧过得4.算法分解的手段是().A.找出算法的合理性 B.钻研算法的输人与输出闭系C.分解算法的灵验性以供矫正 D.分解算法的易懂性5. 算法的时间搀纯度与决于()A.问题的规模B待处理数据的初态 C. A战B6.一个算法该当是().A.步调B.问题供解步调的形貌C.要谦脚五个基础个性 D.A战C.7. 底下闭于算法道法过得的是()A.算法最后必须由估计机步调真止C. 算法的可止性是指指令不克不迭有二义性D. 以上几个皆是过得的8.以下与数据的保存结构无闭的术语是().A.循环行列 B. 链表 C. 哈希表 D. 栈9.正在底下的步调段中,对付x的赋值语句的频度为()for(i=0;i<n;i++)for(j=0;j<n;j++)x=x+1;A. 2n B.n C.n2 D.log2n10.以下数据结构中,()利害线性数据结构A.树 B.字符串 C.行列 D.栈11. 下列数据中,()是线性数据结构.A.哈妇曼树 B.有背无环图 C. 二叉排序树 D. 栈12.以部下于逻辑结构的是().A.程序表 B. 哈希表 D. 单链表二、挖空题1、_______是疑息的载体,是对付客瞅真物的标记表示,它不妨被估计机辨别、保存、加工战处理,________是对付不妨灵验的输人到估计机中而且不妨被估计机处理的标记的总称.(数据、数据)2、数据元素是数据的______,有些情况下也称为元素、结面、顶面、记录等.(基础单位)3、________是数据不可分隔的最小单元,是具备独力含意的最小标记单位.比圆形成一个数据元素的字段、域、属性等皆可称之为________.(数据项、数据项)4、数据的逻辑结构是指数据之间的________.逻辑结构是从________上形貌数据,它与简曲保存无闭,是独力于估计机的.果此逻辑结构不妨瞅做是从简曲问题抽象出去的______________.(逻辑闭系、逻辑闭系、数教模型)5、数据的________指数据元素及其闭系正在估计机保存器内的表示._________是逻辑结构正在估计机里的真止,也称之为映像.(保存结构、保存结构)6、数据逻辑结构不妨分为四种基础的典型,_______结构中的元素除了只是不过共属于一个_________________,不存留什么闭系.(集中、集中)7、数据逻辑结构的四种基础典型中,________中的元素是一种一对付一的闭系,那种结构的个性是:若结构利害空集,则有且惟有一个启初结面战一个末端结面,而且所有结面最多只可有一个间接前驱战一个间接后继.(线性结构)8、数据逻辑结构的四种基础典型中,____________中的元素是一种一对付多的闭系.(树形结构)9、图型结构大概图状结构是一种________的闭系.正在那种逻辑结构中,所有结面均不妨有多个前驱战多个后继.(多对付多)10、奇我也可将树型结构、集中战图型结构称为__________,那样数据的逻辑结构便不妨分为__________战________二大类.(非线性结构、线性结构、非线性机构)11、____________办法是指逻辑上相邻的结面被保存到物理上也相邻的保存单元中.那种保存结构只保存结面的数值,不保存结面之间的闭系,结面之间的闭系是通过保存单元的相邻闭系隐含的表示出去的.(程序保存)12、_______办法是种保存要领,不央供逻辑上相邻的结面正在物理上也相邻,即数据元素不妨保存正在任性的位子上.(链式保存)13、_________办法是利用结面闭键字的值间接估计出该结面保存单元天面,而后将结面按某种办法存人该天面的一种要领.(集列保存大概哈希保存)14、所谓算法(Algorithm)是对付特定问题供解步调的一种形貌,它是指令的其中每个指令表示一个大概多个支配.算法的五个要害个性是__________、__________、__________、__________战__________.(有限序列、有贫性、决定性、可止性、输进、输出)15、算法的_______性是指算法必须不妨正在真止有限个步调之后中断,而且每个步调皆必须正在有贫的时间内完成.(有贫性)16、算法的________性是指算法中的每一个步调必须是有明决定义的,不允许有模棱二可的阐明,也不允许有多义性.而且,正在所有条件下,算法只可有惟一的一条真止路径,即只消输人是相共的便只可得到____________的输出截止.(决定性、相共)17、算法的____________性又称为算法的能止性,是指算法中形貌的支配是不妨通过已经真止的基础运算真止有限次去真止.(可止性)18、推断一个算法的利害主要以下几个尺度:________、________、________、_________.(精确性、可读性、结实性、时间效用战空间效用)19、算法分解是对付一种算法所消耗的估计机资材的估算,其中包罗估计机_________的少短战___________________的大小.(运止时间、所吞噬空间)20、空间搀纯度(SPace ComPlexity)也是度量一个算法利害的尺度,它所形貌的是算法正在运止历程中所占用_____________的大小.(保存空间)三、推断题1.程序保存办法只可用于保存线性结构.(×)2.数据元素是数据的最小单位.(×)3.算法的劣劣与算法形貌谈话无闭,然而与所用估计机有闭.(×)4.结实的算法不会果非法的输进数据而出现莫名其妙的状态.()5.数据的逻辑结构是指各元素之间的逻辑闭系,是根据用户需要而建坐的.6.数据结构、数据元素、数据项正在估计机中的映像分别称为保存结构、结面、数据域.()7.数据的物理结构是指数据正在估计机中本量的保存形式.()8.具备存与任一元素的时间相等那一个性的保存结构称为随机存与结构.9.算法本量上便是步调,步调也一定是算法.(×)10. 正在程序保存结构中,奇我也保存数据结构中元素之间的闭系.(×)11. 程序保存办法的便宜是保存稀度大,且拔出、简略运算效用下.(×)12. 数据结构的基础支配的树坐的最要害的规则是,真止应用步调与保存结构的独力.()13. 数据的逻辑结构道明数据元素之间的程序闭系,它依好于估计机的储藏结构. (×)14. 推断一个算法的利害主要以下几个尺度:精确性、有贫性、结实性战可止性.(×)15.算法的时间搀纯度T(n)=O(f(n))表示随问题规模n的删大,算法真止时间的删少率与函数f(n)的删少率相共.()四、概括题1.用大O形式表示底下算法的时间搀纯度:for(i=0;i<m;i十十)for(j=0;j<n;j++)A[i][j]=i*j;2.写出底下算法的时间搀纯度:i=0;s=0;while(s<n){ i++;s+=i;}3.写出以下算法的时间搀纯度:for(i=0; i<m; i++)for(j=0 ; j<t; j++)c[i][j]=0;for(i=0;i<m;i++)for(j=o; j<t; j++)for(k=0;k<n;k++)c[i][j]+=a[i][k]*b[k][j];4.写出底下算法的时间搀纯度:i=1;while(i<=n)i=i*3;5.供底下函数中各条语句的频度战算法的时间搀纯度:prime(int n){int i=2;while ((n%i)!=0&&i<sqrt(n) )i++;if(i>sqrt(n) )printf(”%d is a prime number.\n”,n);elseprintf(”%d is not a prime number.\n”,n);}1. 该算法的时间搀纯度为:O(m×n).2. 该算法的时间搀纯度为:3. 该算法的时间搀纯度为:O(m×n×t).4. 该算法的时间搀纯度为:log3(n).5. 该算法的时间搀纯度为:6.将下列函数,按它们正在n→∝时的无贫大阶数,从小到大排序.n, n-n3+7n5, nlogn, 2n/2, n3, logn, n1/2+logn, (3/2)n, ,n!, n2+logn从小到大排列为:logn, n1/2+logn, n, nlogn, n2+logn,n3, n-n3+7n5, 2n/2, (3/2)n, n!,第二章线性表一、采用题1.正在一个少度为n的程序表中简略第i个元素(0<i<=n)时,需要背前移动( )个元素.A.n-i B.n-i+1 C.n-i-1D.i+12.从一个具备n个元素的线性表中查找其值等于x的结面时,正在查找乐成的情况下,需仄稳比较( )个元素结面.A.n/2 B.n C.(n-1)/2 D.(n +1)/23.对付一个具备n个元素的线性表,建坐其单链表的时间搀纯度为( ).A.O(n) B.O(1) C.O(n2) D.O(long2n)4.线性表采与链式保存时,其天面( ).A.必须是连绝的 B.一定是不连绝的C.部分天面必须连绝D.连绝与可均不妨5.正在一个具备n个结面的有序单链表中插人一个新的结面,使得链表仍旧有序,该算法的时间搀纯度是( ).A.O(long2n) B.O(l) C.O(n2)D.O (n)6.线性表是( ).A.一个有限序列,不妨为空B.一个有限序列,不不妨为空C.一个无限序列,不妨为空D.一个无限序列,不不妨为空7.正在一个少度为n的程序表中,背第i个位子(0一1<n+1)拔出一个新元素时,需要背后移动( )个元素.A.n-i B.n-i+1 C.n-i-1 D.i+18.如果某链表中最时常使用的支配是与第i个结面及其前驱,则采与( )保存办法最节省时间.A.单链表 B.单背链表 C.单循环链表D.程序表9.一个程序保存线性表的第一个元素的保存天面是90,每个元素的少度是2,则第6个元素的保存天面是().A.98 B.100 C.102 D.10610.正在程序保存的线性表(a1……a n)中,简略任性一个结面所需移动结面的仄稳移动次数为( )A.n B.n/2 C.(n-1)/2 D.(n+l)/2 11.正在线性表的下列保存结构中,读与第i个元素泯灭的时间最少的是().A.单链表 B.单链表 C.循环链表D.程序表12.若某链表中最时常使用的支配为正在末尾一个结面之后拔出一个结面战简略末尾一个结面,则采与()保存办法最节省时间.A.单链表 B.单链表 C.单循环链表D.戴头结面的单循环链表13.正在单链表中简略指针p所指结面的后继结面,则真止()支配.A.p->next=p->next->nextB.p->next=p->nextC.p=p->next->nextD.p=p->next; p->next=p->next->next14.正在一个单链表中,已知q所指结面是p所指结面的前驱,若正在q战p之间拔出s所指的结面,则真止()支配.A.s->next=p->next; p->next=s;B.q->next=s; s->next=p;C.p->next=s->next; s->next=p;D.p->next=s; s->next=q;15.正在单链表中附加头结面的手段是为了().A.包管单链表中起码有一个节面B.标记单链表中尾结面的位子C.便当运算的真止D.道明单链表是线性表的链式保存16.循环单链表的主要便宜是().A.不再需要头指针了B.从表中任性一个结面出收皆能扫描到所有链表C.已知某个结面的位子后,不妨简单找到它的前驱D.正在举止拔出、简略支配时,能更好天包管链表不竭启17.非空的循环单链表L的尾结面p谦脚().A.p->next=NULL B.p=NULL C.p->next=L D.p=L18.正在单背循环链表中,正在p指针所指背的结面前拔出一个指针q所指背的新结面,其建改指针的支配是( ).注:单背链表的结面结构为(prior,data,next). 供采用的问案:A.p->prior=q;q->next=p;p->prior->next=q; q->prior=q;B.p->prior=q;p->prior->next=q; q->next=p;q->prior=p->prior;C.q->next=p;q->prior=p->prior;p->prior->next=q; p->prior=q;D.q->prior=p->prior;q->next=p;p->prior=q;p->prior=q;19.正在单背链表保存结构中,简略p所指的结面时须建改指针().A.p->prior->next=p->next; p->next->prior=p->prior;B.p->prior=p->prior->prior; p->prior->next=p;(删p 的前趋)C.p->next->prior=p; p->next=p->next->next;D.p->next= p->prior->prior; p->prior= p->next->next;二、挖空题1.线性表(Linear List)是最简朴、最时常使用的一种数据结构.线性表中的元素存留着__________的相互闭系.(一对付一)2.线性表中有且仅有一个启初结面,表中有且仅有一个末端结面,除启初结面中,其余每个元素有且仅有一个__________,除末端结面中,其余每个元素有且仅有一个______.3.线性表是n(n>=0)个数据元素的________.其中n为数据元素的个数,定义为线性表的__________.当n为整时的表称为_________.4.所谓程序表(Sequential LISt)是线性表的__________,它是将线性表中的结面按其____________依次存搁正在内存中一组连绝的保存单元中,使线性表中相邻的结面存搁正在____________的保存单元中.5.单链表不央供逻辑上相邻的保存单元正在物理上也一定要相邻.它是调配一些_______的保存单元去保存线性表中的数据元素,那些保存单元不妨分别正在内存中的_________的位子上,它们正在物理上不妨是一片连绝的保存单元,也不妨是__________的.果此正在表示线性表那种数据结构时,必须正在保存线性表元素的共时,也保存线性表的.6.线性表的链式保存结构的每一个结面(Node)需要包罗二个部分:一部分用去存搁元素的数据疑息,称为结面的_________;另一部分用去存搁元素的指背间接后继元素的指针(即间接后继元素的天面疑息),称为________大概____________.7.线性链表的逻辑闭系是通过每个结面指针域中的指针去表示的.其逻辑程序战物理保存程序不再普遍,而是一种_________保存结构,又称为__________.8.如果将单链表末尾一个结面的指针域改为存搁链表中的头结面的天面值,那样便形成了______________.9.为了不妨赶快天查找到线性表元素的间接前驱,可正在每一个元素的结面中再减少一个指背其前驱的指针域,那样便形成了___________.10.单背链表某结面的指针P,它所指背结面的后继的前驱与前驱的后继皆是p_______.11.正在单链表中,简略指针P所指结面的后继结面的语句是____________.12.正在单循环链表中,简略指针P所指结面的语句序列是P->prior->next=p->next及__________.13.单链表是___________的链接保存表示.14.不妨使用___________表示树形结构.15.背一个少度为n的背量的第i个元素(l≤i≤n+1)之前插人一个元素时,需背后移动__________个元素. 16.简略一个少度为n的背量的第i个元素(l≤i≤n)时,需背前移动_______个元素.17.正在单链表中,正在指针P所指结面的后里插人一个结面S的语句序列是__________.18.正在单循环链表中,正在指针P所指结面前插人指针S 所指的结面,需真止语句_______.19.与出广义表A=((x,(a,b,c,d))中本子c的函数是_________.20.正在一个具备n个结面的有序单链表中插人一个新结面并使之仍旧有序的时间搀纯度为_______________. 21.写出戴头结面的单背循环链表L为空表的条件________________.22.线性表、栈战行列皆是_________________结构. 23.背栈中插人元素的支配是先移动栈_____________针,再存人元素.1. 一对付一2. 间接前驱、间接后继3. 有限序列、少度、空表4. 程序保存结构、逻辑程序、天面相邻5. 任性、任性、不连绝、逻辑闭系6. 数据域、指针域、链域7. 非程序、非程序映像8. 循环链表9. 单背链表10. 所指背的结面自己11. P->next=p->next->next12. P->next->prior=P->prior13. 线性表14. 单链表15. n-i+116. n-i17. S->next=P->next; P->next=S18. p->prior->next=S;s->prior=p->prior;s->next=p;p->prior=s;19. head(tail(tail((head(tail(head(A))))))20. O(n)21. (L==L->Next) && (L==L->Prior)22. 线性23. 顶三、推断题1.线性表采与链表保存时,结面战结面里里的保存空间不妨是不连绝的.(×)2.正在具备头结面的链式保存结构中,头指针指背链表中的第一个数据结面.(×)3.程序保存的线性表不不妨随机存与.(×)4.单链表不是一种随机存与结构.()5.程序保存结构线性表的拔出战简略运算所移动元素的个数与该元素的位子无闭.(×)6.程序保存结构是动背保存结构,链式保存结构是固态保存结构.(×)7.线性表的少度是线性表所占用的保存空间的大小.(×) 8.单循环链表中,任性一结面的后继指针均指背其逻辑后继.(×)9.线性表的惟一保存形式是链表.(×)1. 过得:链表保存中,结面之间不妨连绝也不妨不连绝,然而结面里里是连绝的.2. 过得:头指针指背头结面而不是数据结面.3. 过得:程序保存的线性表不妨随机存与.4. 精确.5. 过得.6. 过得:程序保存结构是固态保存结构,链式保存结构是动背保存结构.7. 过得:先止表的少度是线性表中结面的个数.8. 过得:注意末尾一个结面.9. 过得:也不妨有程序保存的形式.第三章栈战行列一、采用题l.一个栈的序列是:a,b,c,d,e,则栈的不可能输出的序列是().A.a,b,c,d,e B.d,e,c,b,a C.d,c,e,a,b D.e,d,c,b,a2.若一个栈的输人序列是1,2,3,…,n,输出序列的第一个元素是n,则第k个输出元素是().A.k B.n-k-1 C.n-k+1 D.不决定3.判决一个栈S(最多有n个元素)为空的条件是(). A.S->top!=0 B.S->top= =0 C.S->top!=n D.S->top= =n4.判决一个栈S(最多有n个元素)为谦的条件是(). A.S->top!=0 B.S->top= =0 C.S->top!=n D.S->top= =n5.背一个栈顶指针为top的不戴头结面的链栈中插人一个*S结面的时间,应当真止语句().A.top->next=S; B.S->next=top;top=S;C.S->next=top->next;top->next=S;D.S->next=top;top=S->next;6.背一个戴头结面、栈顶指针为top的链栈中插人一个*S 结面的时间,应当真止语句().A.top->next=S; B.S->next=top;top=S;C.S->next=top->next;top->next=S; D.S->next=top;top=S->next;7.判决一个行列Q(最多有n个元素)为空的条件是().A.Q->rear-Q->front= =n B.Q->rear-Q->front+1= =nC.Q->rear = = Q->front D.Q->rear +1= = Q->front 8.判决一个行列Q(最多有n个元素)为谦的条件是(). A.Q->rear-Q->front= =n B.Q->rear-Q->front+1= =n C.Q->rear = = Q->front D.Q->rear +1= = Q->front 9.判决一个循环行列Q(最多有n个元素)为空的条件是().A.Q->rear = = Q->front B.Q->rear = = Q->front+l C.Q->front= =(Q->rear +1)%n D.Q->front= =(Q->rear -1)%n10.判决一个循环行列Q(最多有n个元素)为谦的条件是().A.Q->rear = = Q->front B.Q->rear = = Q->front+lC.Q->front= =(Q->rear +1)%n D.Q->front= =(Q->rear -1)%n11.正在一个链行列中,假定front战rear分别为头指针战尾指针,则拔出一个结面*S的支配是().A.front=front->next B.S->next=rear;rear=S C.rear->next=S;rear=S D.S->next=front;front=S 12.正在一个链行列中,假定front战rear分别为头指针战尾指针,简略一个结面的支配是().A.front=front->next B.rear=rear->nextC.rear->next=front D.front->next=rear13.栈与行列皆是().A.链式保存的线性结构B.链式保存的非线性结构C.节制存与面的线性结构D.节制存与面的非线性结构14.若进栈序列为l,2,3,4,则()不可能是一个出栈序列.A.3,2,4,1 B.l,2,3,4 C.4,2,3,1 D.4,3,2,l15.正在办理估计机主机与挨印机之间速度不匹配问题时常常树坐一个挨印数据缓冲区,主机将要输出的数据依次写人该缓冲区,而挨印机则从该缓冲区中与走数据挨印.该缓冲区该当是一个()结构.A.堆栈B.行列 C.数组 D.线性表1. C2. C3. B4. D5. B6. C7. C8. A9. A 10. C11. C12. A 13. C 14. C 15. B二、挖空回1.栈(stack)是规定正在________一端举止插人大概简略支配的线性表.正在栈中,允许插人战简略支配的一端称为__________,而另一端称为_________.不含元素的栈称为_______.2.正在栈的运算中,栈的插人支配称为________大概________,栈的简略支配称为_________大概__________. 3.根据栈的定义,每一次进栈的元素皆正在本___________之上,并成为新的__________;每一次出栈的元素经常目前的_____________,果此末尾进栈的元素经常__________,所以栈也称为___________线性表,简称为____________表.4.栈是一种支配受到节制的线性表,是一种特殊的线性表,果此栈也有__________战_________________二种保存结构,分别称为______________战___5.当栈谦的时间,再举止人栈支配便会爆收____________,那种情况的溢出称为___________;当栈空的时间,如果再举止出栈支配,也会_____________,那种情况下的溢出称为__________________.6.栈的链式保存结构简称为____________,是一种__________________.7.人们凡是估计用到的表黑式皆被称为____________,那是由于那种算术表黑式的运算符被置于二个支配数中间. 8.估计机中常常使用___________,那是一种将运算符置于二个支配数后里的算术表黑式.那种表黑式是由波兰科教家开维奇提出的,果此又称为_____________9.行列(Queue)也是一种___________,然而它与栈分歧,行列中所有的插人均规定正在表的一端举止,而所有的简略则规定正在表的另一端举止.允许插人的一端称为_________,允许简略的一端称为_______________. 10.行列的个性是_________,果此行列又被称为_______________.的线性表,大概称为_________________表.11.行列的_________又称为__________,是用一组天面连绝的保存单元依次存搁行列中的元素.12.由于行列中的元素时常变更,对付于行列的简略战插人分别正在队头战队尾举止,果此需要树坐二个指针分别指背__________战__________,那二个指针又称为__________战_____________.13.循环程序行列(Circular Sequence Queue)时常简称为___________,它是将保存程序行列的保存天区瞅成是一个尾尾贯串的一个环,将要队尾战队尾元素对接起去产死一个环形表.尾尾贯串的状态是通过数教上的_________________去真止的.14.正在算法大概步调中,当一个函数间接调用自己大概通过一系列语句间接调用自己的时间,则称那个函数为,也称为____________.函数间接调用自己,则称为__________;当一个函数通过另一个函数去调用自己则称为_________________.15.正在循环行列中确定:当Q->rear= =Q->front的时间循环行列为___________,当(Q->rear+1)%MAXSIZE=front的时间循环行列为____________________.16.用链表办法表示的行列称为____________________. 17.已知栈的输人序列为1,2,3,…,n,输出序列为a1,a2,…,an,切合a2= =n的输出序列公有__________________.18.一个栈的输人序列是12345,则栈的输出序列为43512是________(挖是可大概).19.一个栈的输人序列是12345,则栈的输出序列为12345是_________(挖是可大概).20.设sq[1..maxsize]为一个程序保存的栈,变量top指示栈顶元素的位子,则做进栈支配的条件是______________.21.设sq[1..maxsize]为一个程序保存的栈,变量top指示栈顶元素的位子,如果把栈顶元素弹出并支到X中,则需真止语句______________.22.栈的个性是__________________.23.对付栈举止退栈时的支配是先与出元素,后移动_________.24.设s[1..max]为一个程序保存的栈,变量top指示栈顶位子,栈为谦的条件是____.25.设链栈的栈顶指针为top,则栈非空的条件是___________.26.已知循环行列用数组data[1...n]保存元素值,用f,r分别动做头尾指针,则目前元素个数为____________. 27.正在一个循环行列中,队尾指针指背队尾元素的________位子.(前一个大概后一个)28.行列中允许举止简略的一端称为_______________. 29.链行列本量上是一个共时戴有头指针战尾指针的单链表(1..n),尾指针指背该单链表的第___________个元素.30.设单背链表链列为lq,lq的头指针为lq.Front,尾指针为lq.Rear,则行列为空的条件是____________.31.从循环行列中简略一个元素,其支配是先与出一个元素,后移动____________32.行列中允许举止拔出的一端称为_________.1. 表尾、栈顶、栈底、空栈2. 进栈、进栈、退栈、出栈3. 栈顶元素、栈顶元素、栈顶元素、最先出栈、后进先出、LIFO4. 程序、链式、程序栈、链栈5. 溢出、上溢、溢出、下溢6. 链栈、特殊的单链表7. 中缀表黑式8. 后缀表黑式、波兰式9. 特殊的线性表、队尾、队头10. 进步先出、进步先出、FIFO11. 程序保存结构、程序行列12. 队头元素、队尾元素、队头指针、队尾指针13. 循环行列、与模运算14. 递归函数、自调用函数、间接递归调用、间接递归调用15. 空、谦16. 链行列17. n-118. 不可能的19. 大概的20. top!=maxsize21. x=sq[top]; top=top-122. 进步后出23. 栈顶指针24. top==max25. top!=nil26. (n+r-f)mod n27. 前一个28. 队尾29. n30. lq->front==lq->rear31. 栈顶指针32. 队尾三、推断题1.栈战行列皆是节制存与面的线性结构.()2.分歧的进栈战出栈推拢大概得到相共输出序列.()3.与消递归一定要用栈.()4.循环行列是程序保存结构.()5.循环行列不会爆收溢出.()6.循环行列谦的时间rear= =front.()7.正在对付链行列(戴头结面)搞出队支配时不会改变front指针的值.()1. 精确.2. 过得:分歧的进栈战出栈推拢得到分歧输出序列.3. 过得:某些情况如尾递归不妨变换为递推的形式.4. 精确.5. 过得:循环行列不会爆收假溢出.6. 过得.7. 精确.四、概括题1.设有4个元素A、B、C战D进栈,给出它们所有大概的出栈秩序.大概的出栈序列:(共14个)ABCD ABDC ACBD ACDB ADCBBACD BADC BCAD BCDA BDCACBAD CBDA CDBADCBA不可能的出栈序列:(共10个)ADBCBDACCABD CADB CDABDABC DACB DBAC DBCA DCAB习题四一、采用项l.空串与空格串().A.相共 B.不相共 C.大概相共 D.无法决定2.设有二个申S1与S2,供串S2正在S1中尾次出现位子的运算称做().A.对接 B.供子串 C.模式匹配 D.判子串3.串与一般的线性表相比较,它的特殊性体目前().A.程序的保存结构 B.链接的保存结构C.数据元素是一个字符 D.数据元素不妨任性4.设有串S=‘Computer’,则其子串的数目是().A.36 B.37 C.8 D.91. B2. C3. C4. B二、境空题1.串是由整个大概多个字符组成的____________.常常记做:s=“c1,c2,…,cn”(n=>0),其中,S称为________;串中的Ci(1<=i<=n)不妨是字母、数字字格大概其余字符.用单引号括起去的部分是_________.即串S 的真量.2.串中字符的个数称为串的________.3.不含有所有字符的串称为_________,它的少度为___________.4.由一个大概多个空格形成的串称为____________,它的少度为___________.5.串中任性多个连绝字符组成的子序列称为该串的____________;包罗___________的串称为主串.6.字符正在序列中的序号称为该字符正在串中的________________.7.二个字符串相等是指二个字符串的,也便是道那二个字符串不然而__________,而且对付应位子上的字符也.8.二个串的比较本量上是_________的比较.二个串从第一个位子上的字符启初举止比较,当第一次出现_____________大的串为大,若比较历程中出现一个字符串中断的情况,则另一个串为_________________.9.串的_______________便是把串所包罗的字符序列,依次存人连绝的保存单元中去.10.有些估计机系统中为了充分利用保存空间,允许一个保存单元不妨存搁多个字符,串的那种保存办法是一种__________________.11.串的______________是以保存单元为保存单位,一个保存单元中只存搁__________.正在那种情况下,纵然一个保存单元能存搁多个字符,那时间也只存搁________________.12.串正在非紧缩办法下,串少度的保存是隐式的,__________即串的少度.13.一些估计机是以字节为存与单位,恰好一个字符占用一个字节,自然产死了每个保存单元存搁__________的调配办法,那种办法便是一种__________.那种办法普遍不需要存搁____________的保存单元,而需要以步调中各变量值所、的字符为中断符.14.串的链式保存结构是将保存天区别成一系列大小相共的结面,每个结面有二个乡:____________域战________域.其中___________域用于存搁数据,。
数据结构习题和答案及解析

数据结构习题和答案及解析数据结构是计算机科学中非常重要的一个领域,它关注数据的存储、组织和管理方式。
在学习数据结构的过程中,遇到习题是必不可少的,通过解答这些习题可以更好地理解和掌握数据结构的概念和应用。
以下是一些常见的数据结构习题及其答案和解析,希望可以帮助读者更好地学习和理解数据结构。
习题一:栈的应用题目描述:设计一个栈,使其具有获取栈中最小元素的操作。
解答及解析:可以通过两个栈来实现,一个栈用于存储数据,另一个栈用于存储当前最小元素。
在入栈时,如果新的元素比当前最小元素小,则将新元素同时入栈到数据栈和最小栈;在出栈时,如果当前出栈元素与最小栈的栈顶元素相同,则同时出栈。
这样,最小栈的栈顶元素始终为当前栈的最小元素。
习题二:队列的应用题目描述:设计一个队列,使其具有获取队列中最大元素的操作。
解答及解析:可以通过两个队列来实现,一个队列用于存储数据,另一个队列用于存储当前最大元素。
在入队时,如果新的元素比当前最大元素大,则将新元素同时入队到数据队列和最大队列;在出队时,如果当前出队元素与最大队列的队首元素相同,则同时出队。
这样,最大队列的队首元素始终为当前队列的最大元素。
习题三:链表的操作题目描述:给定一个链表,删除链表中倒数第n个节点,并返回链表的头节点。
解答及解析:使用双指针法来解决该问题。
首先让一个指针从链表的头节点向前移动n+1步,然后再让另一个指针从链表的头节点开始移动。
这样两个指针之间的间隔为n,当第一个指针到达链表末尾时,第二个指针指向的节点就是倒数第n个节点的前一个节点。
接着,将第二个指针指向的节点的next指针指向下下个节点,完成删除操作。
习题四:树的遍历题目描述:给定一个二叉树,按照中序遍历的顺序返回其节点值的集合。
解答及解析:采用递归的方式进行中序遍历,先遍历左子树,然后访问根节点,最后遍历右子树。
对于任意一个节点,递归遍历其左子树,将节点值添加到集合中。
然后访问该节点,并将节点值添加到集合中。
数据结构习题参考答案

数据结构习题参考答案一、栈和队列1. 栈是一种具有后进先出(Last In First Out)特性的线性数据结构。
常用方法:- push(x): 将元素x压入栈顶;- pop(): 弹出栈顶元素;- top(): 返回栈顶元素;- isEmpty(): 判断栈是否为空;例题解答:(1)题目描述:使用栈实现队列的功能。
解答:使用两个栈,一个用于入队操作,一个用于出队操作。
入队操作:直接将元素压入入队栈中;出队操作:如果出队栈为空,则将入队栈的元素逐个弹出并压入出队栈,此时出队栈的栈顶元素即为要弹出的元素。
复杂度分析:入队操作的时间复杂度为O(1),出队操作的平均时间复杂度为O(1)。
(2)题目描述:判断括号序列是否合法,即括号是否完全匹配。
解答:使用栈来处理括号序列,遇到左括号则入栈,遇到右括号则与栈顶元素进行匹配,如果匹配成功则继续处理剩余字符,如果不匹配则判定为非法序列。
算法步骤:- 初始化一个空栈;- 从左到右遍历括号序列,对于每个字符执行以下操作:- 如果是左括号,则将其入栈;- 如果是右括号,则将其与栈顶元素进行匹配:- 如果栈为空,则判定为非法序列;- 如果栈顶元素与当前字符匹配,则将栈顶元素出栈,继续处理剩余字符;- 如果栈顶元素与当前字符不匹配,则判定为非法序列。
- 遍历结束后,如果栈为空,则括号序列合法;否则,括号序列非法。
复杂度分析:时间复杂度为O(n),其中n为括号序列的长度。
2. 队列是一种具有先进先出(First In First Out)特性的线性数据结构。
常用方法:- enqueue(x): 将元素x入队;- dequeue(): 出队并返回队首元素;- getFront(): 返回队首元素;- isEmpty(): 判断队列是否为空;例题解答:(1)题目描述:使用队列实现栈的功能。
解答:使用两个队列,一个用于入栈操作,一个用于出栈操作。
入栈操作:直接将元素入队入栈队列中;出栈操作:如果出栈队列为空,则将入栈队列的元素逐个出队并入队出栈队列,此时出栈队列的队首元素即为要出栈的元素。
数据结构 习题答案

数据结构习题答案数据结构习题答案一、概述数据结构是计算机科学中的重要基础学科,涉及到各种数据的组织、存储、管理和操作方法。
通过学习数据结构,我们可以更好地理解和应用算法,提高程序的效率和可维护性。
以下是一些常见的数据结构习题及其答案。
二、线性结构1. 数组问题:给定一个整数数组,如何判断数组中是否存在重复元素?答案:可以使用哈希表,遍历数组,每次将元素作为键插入哈希表中,若插入失败则表示元素重复。
2. 链表问题:如何判断一个链表是否存在环?答案:使用快慢指针方法,定义两个指针,一个每次移动一个节点,另一个每次移动两个节点,若两个指针相遇,则链表存在环。
三、树形结构1. 二叉树问题:给定一个二叉树,如何判断它是否为平衡二叉树?答案:可以使用递归方法,定义一个函数计算二叉树的高度,然后判断左右子树的高度差是否小于等于1,且左右子树也分别为平衡二叉树。
2. 堆问题:如何实现一个堆的插入操作?答案:将元素插入到堆的末尾,然后进行上浮操作,即与父节点比较大小并交换,直到满足堆的性质。
四、图形结构1. 图的表示问题:如何表示一个图?答案:可以使用邻接矩阵或邻接表来表示一个图。
邻接矩阵是一个二维数组,表示节点与节点之间的连接关系;邻接表则使用链表或者数组来表示每个节点及其相邻节点。
2. 最短路径问题:如何找到图中两个节点之间的最短路径?答案:可以使用Dijkstra算法或者广度优先搜索算法来找到最短路径。
Dijkstra算法通过逐步更新最短路径估计值来求解最短路径;广度优先搜索算法则是按层次遍历图,直到找到目标节点。
五、其他数据结构1. 散列表问题:如何解决散列表中的冲突问题?答案:常用的解决冲突的方法有链地址法和开放地址法。
链地址法使用链表来解决冲突,将具有相同散列值的元素存储在同一个链表中;开放地址法则是通过探测或重新散列的方式寻找下一个可用的位置。
2. 字典树问题:如何实现一个字典树?答案:可以使用多叉树来实现字典树,每个节点存储一个字符,用于表示单词的各个字母,同时包含一个布尔值,用于判断是否为单词的结束。
数据结构习题和答案
数据结构习题和答案习题课填空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. 塔的问题题目描述:有三个塔,分别是A、B和C,A塔上有n个盘子,按照从小到大的顺序叠放。
现在要将这些盘子从A塔移动到C塔,并且每次只能移动一个盘子,并且在移动过程中保持大盘子在下,小盘子在上的顺序。
求移动的步骤。
解析:这道题可以使用递归来解决。
将问题分解为两个子问题:将n-1个盘子从A塔移动到B塔,然后将最后一个盘子从A塔移动到C 塔,最后再将n-1个盘子从B塔移动到C塔。
步骤如下:1)如果n等于1,直接将盘子从A塔移动到C塔;2)否则,执行以下步骤:a) 将n-1个盘子从A塔移动到B塔,使用C塔作为中转塔;b) 将最后一个盘子从A塔移动到C塔;c) 将n-1个盘子从B塔移动到C塔,使用A塔作为中转塔。
2. 链表问题题目描述:给定一个链表,判断链表是否存在环。
解析:这道题可以使用快慢指针的思想来解决。
定义两个指针fast和slow,初始时都指向链表的头节点。
fast指针每次向后移动两个节点,slow指针每次向后移动一个节点。
如果链表中存在环,则fast指针一定会在某个时刻追上slow指针。
步骤如下:1)定义两个指针fast和slow,初始时都指向链表的头节点;2)使用一个while循环,判断条件是fast指针不为空且其下一个节点也不为空;3)在循环中,fast指针每次向后移动两个节点,slow指针每次向后移动一个节点;4)如果fast指针和slow指针相遇,则链表存在环,返回true;5)如果fast指针和slow指针永远不相遇,则链表不存在环,返回false。
3. 栈的应用题目描述:给定一个只包含'('和')'的字符串,判断该字符串是否是有效的括号序列。
解析:这道题可以使用栈来解决。
遍历字符串的每一个字符,如果是左括号,将其压入栈中;如果是右括号,判断栈顶的字符是否与该右括号匹配,若匹配则出栈,若不匹配则该字符串不是有效的括号序列。
数据结构习题集(包含全部答案)
数据结构习题集(自编)第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。
A.结构B.关系C.运算D.算法2.在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.逻辑结构和存储结构3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。
A.正确B.不正确C.无法确定D.以上答案都不对:4.算法分析的目的是()。
A.找出算法的合理性B.研究算法的输人与输出关系C.分析算法的有效性以求改进D.分析算法的易懂性5. 算法的时间复杂度取决于()A.问题的规模B待处理数据的初态C. A和B6.一个算法应该是()。
A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C.7. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现}B.为解决某问题的算法与为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的8.以下与数据的存储结构无关的术语是()。
A.循环队列 B. 链表 C. 哈希表 D. 栈9.在下面的程序段中,对x的赋值语句的频度为()for(i=0;i<n;i++)for(j=0;j<n;j++)x=x+1;A.2n B.n C.n2D.log2n!10.以下数据结构中,()是非线性数据结构A.树B.字符串C.队列D.栈11. 下列数据中,()是线性数据结构。
A.哈夫曼树 B.有向无环图 C. 二叉排序树 D. 栈12.以下属于逻辑结构的是()。
A.顺序表 B. 哈希表 C.有序表 D. 单链表二、填空题1、_______是信息的载体,是对客观事物的符号表示,它能够被计算机识别、存储、加工和处理,________是对能够有效的输人到计算机中并且能够被计算机处理的符号的总称。
(数据、数据)2、数据元素是数据的______,有些情况下也称为元素、结点、顶点、记录等。
《数据结构》教材课后习题+答案
《数据结构》教材课后习题+答案数据结构第一章介绍数据结构是计算机科学中重要的概念,它涉及到组织和存储数据的方法和技术。
数据结构的选择对于算法的效率有着重要的影响。
本教材为读者提供了丰富的课后习题,以帮助读者巩固所学知识并提高解决问题的能力。
下面是一些选定的习题及其答案,供读者参考。
第二章线性表习题一:给定一个顺序表L,编写一个算法,实现将其中元素逆置的功能。
答案一:算法思路:1. 初始化两个指针i和j,分别指向线性表L的首尾两个元素2. 对于L中的每一个元素,通过交换i和j所指向的元素,将元素逆置3. 当i>=j时,停止逆置算法实现:```pythondef reverse_list(L):i, j = 0, len(L)-1while i < j:L[i], L[j] = L[j], L[i]i += 1j -= 1```习题二:给定两个线性表A和B,编写一个算法,将线性表B中的元素按顺序插入到线性表A中。
答案二:算法思路:1. 遍历线性表B中的每一个元素2. 将B中的元素依次插入到A的末尾算法实现:```pythondef merge_lists(A, B):for element in B:A.append(element)```第三章栈和队列习题一:编写一个算法,判断一个表达式中的括号是否匹配。
表达式中的括号包括小括号"()"、中括号"[]"和大括号"{}"。
答案一:算法思路:1. 遍历表达式中的每一个字符2. 当遇到左括号时,将其推入栈中3. 当遇到右括号时,判断栈顶元素是否与其匹配4. 当遇到其他字符时,继续遍历下一个字符5. 最后判断栈是否为空,若为空则表示括号匹配算法实现:```pythondef is_matching(expression):stack = []for char in expression:if char in "([{":stack.append(char)elif char in ")]}":if not stack:return Falseelif (char == ")" and stack[-1] == "(") or (char == "]" and stack[-1] == "[") or (char == "}" and stack[-1] == "{"):stack.pop()else:return Falsereturn not stack```习题二:利用两个栈实现一个队列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1章 绪论 1、填空题 1.常见的数据结构有_线性__结构,__树形___结构,__图形__结构等三种。 2.常见的存储结构有__顺序存储_______结构,__链式存储____结构等两种。 3.数据的基本单位是_数据元素___,它在计算机中是作为一个整体来处理的。 4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类,__线性结构____和__非线性结构___。
2、应用题 1、给出以下算法的时间复杂度. void fun(int n) { int i=1,k=100; while(i{ k=k+1; i=i+2; } } 时间复杂度为____O(n)_____。 2、给出以下算法的时间复杂度.
void fun2(int n) { int i=1,k=100; while(i{ i=i*10; k=k+1; } } 时间复杂度为____O(log n)___________。 第2章 线性表 1、填空题 1. 线性表按照存储结构不同主要有两种实现方式,一种是__顺序_表,另一种是___链___表。
2.顺序表采用__随机___访问机制对数据元素进行访问。 3.若在单链表结点p的后面插入一个新的结点s,则其操作序列为: ①____s->next=p->next_____________; ②____p->next=s___________________; 4.在单向链表中,若要删除某个结点p,一般要找到__p的前趋__结点,才能实现该操作。
2、选择题 1. 将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是 A 。 (A)n (B)2n-1 (C)2n (D)n-1 2. 在单链表中,如果在结点p之后插入一个新结点s,其操作为 A 。 (A)s->next=p->next; p->next=s; (B)p->next=s; s->next=p->next; (C)s->next=p; p->next=s->next; (D)p->next=s; s->next=p; 3.若长度为n的线性表采用顺序存储结构,在其第i个位置删除一个元素的算法的平均时间复杂度为( C )。(1≤i≤n) A.O(0) B.O(1) C.O(n) D.O(n2)
4. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素需要移动的元素个数为( B )。(1≤i≤n+1) A.n-i B.n-i+1 C. i D.n-i-1
3、判断题 1.线性表中每一个元素都有一个前驱和一个后继。( × ) 4、程序设计题 1、单链表的结点结构定义如下: struct LinkNode { LinkNode *next; int data; }; 请根据述函数的功能写程序。 void Insert(LinkNode *h,LinkNode *s) {//h指向链表的头结点(即使链表中没有元素,头结点也存在。) //链表中元素已经递增有序 //函数功能为将结点s插入到链表h中。插入后链表仍然保持递增的顺序 LinkNode *p,*q;//q指向p的前驱 q=h; p=h->next; while(p) { if(p->data>s->data) {//寻找到插入点位置,插入s q->next=s; s->next=p; return; } else { q=p; (1分) p=p->next; (1分) } } //当表中没有比s大的结点时,插入到表尾 s->next=q->next; (2分) q->next=s; (2分) } 2、设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。顺序表的结构定义如下: #define ListSize 100 // 假定表空间大小为100 struct SqList { int elem[ListSize]; // 数组elem用于存放表中的数据 int length; // 当前的表长度 }; //以上为顺序表的结构 //函数头定义如下 void InsertIncreaseList( SqList &L ,int x ) { int i; if ( L.length>=ListSize) cout<<”OVERFLOW”; //判断是否溢出 for ( i=L.length ; i>0 && L.elem[ i-1 ] > x ; i--) L.elem[ i ]=L.elem[ i-1 ] ; // 比较并移动元素 L.elem[ i ] =x; //插入x L.length++; //表长增1 } ///////
3、单链表中结点的结构如下所示: typedef struct node { int data; struct node *next; }node; 请设计满足下述功能的函数。 要求: 建立带头结点的单链表H,要求函数从屏幕上读入m个整数,每读入一个,便生成相应的结点,并且把它插入到链表H的尾部。函数形式为void CreateLinkList(node *H)。 参考程序: void CreateList(node *H) {//H指向头指针 int m,temp; cout<<"输入数据的个数:"; cin>>m;// int i=1; node *tail; H->next=NULL; tail=H; while(i<=m) { cout<<"please input your number:"
第3章 栈和队列 1、填空题 1.栈和队列在本质上都是___线性表__________。 2.栈的操作特点是__后进先出_。队列的操作特点是_先进先出__。
2、选择题 1.消除递归不一定需要使用栈,此说法___A____。 A. 正确 B. 错误 2.对于栈,输入序列为(1,2,3,4),不可能得到的输出序列有__D_____。 (A)(1,2,3,4) (B)(4,3,2,1) (C)(1,3,4,2) (D)(3,1,2,4) 3.用单循环链表表示队列,正确的说法是 B 。 (A)可设一个头指针使入队、出队都方便; (B)可设一个尾指针使入队、出队都方便; (C)必须设头尾指针才能使入队、出队都方便; (D)无论如何,只可能使入队方便。
3、判断题 1.栈的特点是先进先出。( × ) 2.可以在队列的任意位置插入元素。( ×) 3.递归程序化非递归程序必须用到栈。( × ) 4.如果进栈的序列为(1,2,3,4),则(4,2,3,1)不可能是出栈序列。(√) 5.在用顺序表表示的循环队列中,可用标志位来区分队空或队满的条件。(√)
第4章 串 1、选择题 1. 设有两个串p和q,求q在p中首次出现的位置的运算称作( B ) A.连接 B.模式匹配 C.求子串 D.求串长
2、判断题 1.空串和空格串是同一个概念,二者没有区别。( × ) 第5章 数组和广义表 1、填空题 1.二维数组在内存中存储可以有两种存储方式,一种是___行__优先存储,一种是 列 优先存储。 2.设广义表L=((),(),(()))。则head(L)是 () ; tail(L)是 ((),(())) ;L的长度是 3 ;L的深度是 3 。 3.设广义表L=((a),(b),((c))) 则head(L)是__(a)__; tail(L)是_((b),((c)))___。
2、选择题 1.在C语言中,如果有数组定义 int A[8][9];假定每个整型数据占2字节,则数组元素A[4][4]的地址是( A )。 A. A+80 B. A+76 C.A+82 D.以上都不对
2.广义表A=(a,b,(c,d),(e,(f,g))),则下面式子的值为( D ); Head(Tail(Head(Tail(Tail(A))))) A.(g) B.(d) C.c D.d
3、判断题 1.在C语言中,多维数组的存储采取的是行优先的方式。( √ ) 2.广义表在本质上也是线性表。( × ) 3.可以用三元组存储法来压缩存储稀疏矩阵。( √) 4.已知广义表A=((a,b,c),(d,e,f)),从A中取出原子e的运算是head(tail(head(tail(A))))。 ( √ )
第6章 树和二叉树 1、填空题 1.一棵62个叶结点的完全二叉树,最多有___62*2=124______个结点。 2.若规定仅有根的二叉树的高度为1,那么高为h的完全二叉树最多有-____2^h-1___________个结点,最少有___2^(h-1)______个结点。
3.设只包含有根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为-____2^(k+1)-1____________,最小结点数为____k+1____________。 4.设仅包含根结点的二叉树的高度为1,则高度为k的二叉树的最大结点数为-_______2^k-1_________,最小结点数为____k______。
2、选择题 1.具有N个结点的完全二叉树的深度是__B______。 (A)⌊ log2N ⌋ (B) ⌊ log2N ⌋+1 (C) ⌊ log2(N) ⌋ (D) ⌊ log2N ⌋-1 2.设二叉树的树根为第一层,则第i层上至多有__C_____结点。 (A)1 (B)2 (C)2i-1 (D)2i-1
3、判断题 1.二叉树的左右子树次序是严格的,不能够任意改变。( √ )