资源描述
第一章 绪论一、选择题1. 算法的计算量的大小称为计算的( )。A效率 B. 复杂性 C. 现实性 D. 难度2. 算法的时间复杂度取决于( )A问题的规模 B. 待处理数据的初态 C. A和B3.计算机算法指的是(1),它必须具备(2) 这三个特性。(1) A计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2) A可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 4一个算法应该是( )。 A程序 B问题求解步骤的描述 C要满足五个基本特性 DA和C. 5. 下面关于算法说法错误的是( )A算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的6. 下面说法错误的是( ) (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A(1) B.(1),(2) C.(1),(4) D.(3)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队列的操作方式是先进后出 13以下哪个数据结构不是多型数据类型( )A栈 B广义表 C有向图 D字符串14以下数据结构中,( )是非线性数据结构A树 B字符串 C队 D栈15. 下列数据中,( )是非线性数据结构。A栈 B. 队列 C. 完全二叉树 D. 堆16连续存储设计时,存储单元的地址( )。A一定连续 B一定不连续 C不一定连续 D部分连续,部分不连续17以下属于逻辑结构的是( )。A顺序表 B. 哈希表 C.有序表 D. 单链表18.一个数据对象是( )的集合。 A.相同类型的数据项 B.相同类型的数据元素C.不同类型的数据项 D.不同类型的数据元素19. ( )是数据的基本单位。A.数据项 B.关键字 C.数据元素 D.数据类型 20.数据结构在计算机中的表示称为数据( )。 A.对象 B.的存储结构 C.类型 D.元素21.下列程序段的时间复杂度为( )。 for(i=0;i5;i+) for(j=0;j1) sum=1; for (i=0;sumn;i+) sum+=1; 10计算机执行下面的语句时,语句s的执行次数为 _ 。 FOR(i=l;i=i;j-) s; 11.下面程序段中带下划线的语句的执行次数的数量级是: i:=1; WHILE i0)。 A表元素 B字符 C数据元素 D数据项 E信息项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线性表在链式存储时,查找第i个元素的时间同i的值成正比 B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11 双向链表中有两个指针域,llink和rlink分别指向前趋及后继,设p指向链表中的一个结点,现要求删去p所指结点,则正确的删除是( )(链中结点数大于2,p不是第一个结点)Ap.llink.rlink:=p.llink; p.llink.rlink:=p.rlink; dispose(p);Bdispose(p); p.llink.rlink:=p.llink; p.llink,rlink:=p.rlink;Cp.llink.rlink:=p.llink; dispose(p); p.llink.rlink:=p.rlink;D以上A,B,C都不对。12.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。 (2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。 (3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。以上错误的是( ) A(1),(2) B(1) C(1),(2),(3) D.(2)13. 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( )(1=iLlink=q;q-Rlink=p;p-Llink-Rlink=q;q-Llink=q;B. p-Llink=q;p-Llink-Rlink=q;q-Rlink=p;q-Llink=p-Llink;C. q-Rlink=p;q-Llink=p-Llink;p-Llink-Rlink=q;p-Llink=q;D. q-Llink=p-Llink;q-Rlink=q;p-Llink=q;p-Llink=q;24在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:( )。Ap-next=s;s-next=p-next; B s-next=p-next;p-next=s;Cp-next=s;p-next=s-next; D p-next=s-next;p-next=s;25对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( )Ahead=NULL Bheadnext=NULL Cheadnext=head Dhead!=NULL26. 在双向链表存储结构中,删除p所指的结点时须修改指针( )。A (p.llink).rlink:=p.rlink (p.rlink).llink:=p.llink;B p.llink:=(p.llink).llink (p.llink).rlink:=p;C (p.rlink).llink:=p p.rlink:=(p.rlink).rlinkD p.rlink:=(p.llink).llink p.llink:=(p.rlink).rlink; 二、填空题1当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用_存储结构。2线性表L=(a1,a2,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是_。3设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点 , 若将结点y插入结点x之后,则需要执行以下语句:_; _;4在一个长度为n的顺序表中第i个元素(1=i=n)之前插入一个元素时,需向后移动_个元素。5在单链表中设置头结点的作用是_。6对于一个具有n个结点的单链表,在已知的结点*p后插入一个新结点的时间复杂度为_,在给定值为x的结点后插入一个新结点的时间复杂度为_。7根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成_和_;而又根据指针的连接方式,链表又可分成_和_。8在双向循环链表中,向p所指的结点之后插入指针f所指的结点,其操作是_、_、_、_。9在双向链表结构中,若要求在p 指针所指的结点之前插入指针为s 所指的结点,则需执行下列语句:s .next:=p; s .prior:= _;p .prior:=s;_:=s;10.链接存储的特点是利用_来表示数据元素之间的逻辑关系。11.顺序存储结构是通过_表示元素之间的关系的;链式存储结构是通过_表示元素之间的关系的。12. 对于双向链表,在两个结点之间插入一个新结点需修改的指针共 _个,单链 表为_个。13. 循环单链表的最大优点是:_。14. 已知指针p指向单链表L中的某结点,则删除其后继结点的语句是:_15. 带头结点的双循环链表L中只有一个元素结点的条件是:_16. 在单链表L中,指针p所指结点有后继结点的条件是:_ 17.带头结点的双循环链表L为空表的条件是:_。18. 在单链表p结点之后插入s结点的操作是:_。 三、解答题1线性表有两种存储结构:一是顺序表,二是链表。试问:(1)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。在此情况下,应选用哪种存储结构? 为什么?(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?为什么? 2线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素;其二,由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;其三,表的容量难以扩充。线性表的链式存储结构是否一定都能够克服上述三个弱点,试讨论之。3若较频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构?为什么?4线性结构包括_、_、_和_。线性表的存储结构分成_和_。请用类PASCL语言描述这两种结构。5线性表(a1,a2,an)用顺序映射表示时,ai和ai+1(1=in)的物理位置相邻吗?链接表示时呢? 6. 说明在线性表的链式存储结构中,头指针与头结点之间的根本区别;头结点与首元结点的关系。7. 试述头结点,首元结点,头指针这三个概念的区别. 8有线性表(a1,a2,an),采用单链表存储,头指针为H,每个结点中存放线性表中一个元素,现查找某个元素值等于X的结点。分别写出下面三种情况的查找语句。要求时间尽量少。(1)线性表中元素无序。(2)线性表中元素按递增有序。 (3)线性表中元素按递减有序。9. 在单链表和双向链表中,能否从当前结点出发访问到任何一个结点?10. 如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表?11. 设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。12. 设单链表中某指针p所指结点(即p结点)的数据域为data,链指针域为next,请写出在p结点之前插入s结点的操作(PASCAL语句)。 四、算法设计题1 假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。2. 知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。3在带头结点的单链表上,给出求表长Length(L)的算法,并加入简要的注释或说明。4设单链表具有头结点,且表中元素各不相同,试给出在单链表中查找值为x的结点的算法,并加入简要的注释或说明。5设单链表具有头结点,且表中元素各不相同,试给出在单链表中删除值为x的结点的算法。第三章 栈和队列一、 选择题1. 对于栈操作数据的原则是( )。A. 先进先出 B. 后进先出 C. 后进后出 D. 不分顺序2. 在作进栈运算时,应先判别栈是否( ),在作退栈运算时应先判别栈是否( )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( )。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 ( )分别设在这片内存空间的两端,这样,当( )时,才产生上溢。 , : A. 空 B. 满 C. 上溢 D. 下溢 : A. n-1 B. n C. n+1 D. n/2 : A. 长度 B. 深度 C. 栈顶 D. 栈底 : A. 两个栈的栈顶同时到达栈空间的中心点.B. 其中一个栈的栈顶到达栈空间的中心点. C. 两个栈的栈顶在栈空间的某一位置相遇. D. 两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.3. 一个栈的输入序列为123n,若输出序列的第一个元素是n,输出第i(1=i0) ? x* f(x-1):2); int i ; i =f(f(1);A2 B. 4 C. 8 D. 无限递归19. 表达式a*(b+c)-d的后缀表达式是( )。Aabcd*+- B. abc+*d- C. abc*+d- D. -+*abcd20. 表达式3* 2(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为( ),其中为乘幂 。A. 3,2,4,1,1;(*(+*- B. 3,2,8;(*- C. 3,2,4,2,2;(*(- D. 3,2,8;(*(-21. 设计一个判别表达式中左,右括号是否配对出现的算法,采用( )数据结构最佳。A线性表的顺序存储结构 B. 队列 C. 线性表的链式存储结构 D. 栈22. 用链接方式存储的队列,在进行删除运算时( )。A. 仅修改头指针 B. 仅修改尾指针 C. 头、尾指针都要修改 D. 头、尾指针可能都要修改23. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( )。A仅修改队头指针 B. 仅修改队尾指针 C. 队头、队尾指针都要修改 D. 队头,队尾指针都可能要修改24. 递归过程或函数调用时,处理参数及返回地址,要用一种称为( )的数据结构。A队列 B多维数组 C栈 D. 线性表25. 假设以数组Am存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( )。A(rear-front+m)%m Brear-front+1 C(front-rear+m)%m D(rear-front)%m26. 循环队列A0.m-1存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是( )。A. (rear-front+m)%m B. rear-front+1 C. rear-front-1 D. rear-front27. 循环队列存储在数组A0.m中,则入队时的操作为( )。A. rear=rear+1 B. rear=(rear+1) mod (m-1) C. rear=(rear+1) mod m D. rear=(rear+1)mod(m+1) 28. 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( ) A. 1和 5 B. 2和4 C. 4和2 D. 5和1 29. 已知输入序列为abcd 经过输出受限的双向队列后能得到的输出序列有( )。 A. dacb B. cadb C. dbca D. bdac E. 以上答案都不对 30. 若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列是( )。A. 1234 B. 4132 C. 4231 D. 4213 31. 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是 ( )。 A. (rear+1) MOD n=front B. rear=front Crear+1=front D. (rear-l) MOD n=front32. 栈和队列的共同点是( )。A. 都是先进先出 B. 都是先进后出 C. 只允许在端点处插入和删除元素 D. 没有共同点33. 栈的特点是( ),队列的特点是( ),栈和队列都是( )。若进栈序列为1,2,3,4 则( )不可能是一个出栈序列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4 则( )是一个出队列序列。, : A. 先进先出 B. 后进先出 C. 进优于出 D. 出优于进: A.顺序存储的线性结构 B.链式存储的线性结构 C.限制存取点的线性结构 D.限制存取点的非线性结构, : A. 3,2,1,4 B. 3,2,4,1 C. 4,2,3,1 D. 4,3,2,1 F. 1,2,3,4 G. 1,3,2,434. 栈和队都是( )A顺序存储的线性结构 B. 链式存储的非线性结构C. 限制存取点的线性结构 D. 限制存取点的非线性结构35. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是( )。A 6 B. 4 C. 3 D. 236. 用单链表表示的链式队列的队头在链表的( )位置。A链头 B链尾 C链中37. 依次读入数据元素序列a,b,c,d,e,f,g进栈,每进一个元素,机器可要求下一个元素进栈或弹栈,如此进行,则栈空时弹出的元素构成的序列是以下哪些序列? Ad ,e,c,f,b,g,a B. f,e,g,d,a,c,bC. e,f,d,g,b,c,a D. c,d,b,e,f,a,g二、填空题 1栈是_的线性表,其运算遵循_的原则。2_是限定仅在表尾进行插入或删除操作的线性表。3. 一个栈的输入序列是:1,2,3则不可能的栈输出序列是_。4. 设有一个空栈,栈顶指针为1000H(十六进制),现有输入序列为1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH之后,输出序列是_,而栈顶指针值是_H。设栈为顺序栈,每个元素占4个字节。5. 当两个栈共享一存储区时,栈利用一维数组stack(1,n)表示,两栈顶指针为top1与top2,则当栈1空时,top1为_,栈2空时 ,top2为_,栈满时为_。6两个栈共享空间时栈满的条件_。7在作进栈运算时应先判别栈是否_(1)_;在作退栈运算时应先判别栈是否_(2)_;当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为_(3)_。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的空间时,应将两栈的_(4)_分别设在内存空间的两端,这样只有当_(5)_时才产生溢出。8. 多个栈共存时,最好用_作为存储结构。9用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为_。10. 顺序栈用data1.n存储数据,栈顶指针是top,则值为x的元素入栈的操作是_。11表达式23+(12*3-2)/4+34*5/7)+108/9的后缀表达式是_。12. 循环队列的引入,目的是为了克服_。 13用下标0开始的N元数组实现循环队列时,为实现下标变量M加1后在数组有效下标范围内循环, M= _。14_又称作先进先出表。15. 队列的特点是_。16队列是限制插入只能在表的一端,而删除在表的另一端进行的线性表,其特点是_。17. 已知链队列的头尾指针分别是f和r,则将值x入队的操作序列是_。18区分循环队列的满与空,只有两种方法,它们是_和_。19设循环队列用数组A1.M表示,队首、队尾指针分别是FRONT和TAIL,判定队满的条件为_。20. 设循环队列存放在向量sq.data0:M中,则队头指针sq.front在循环意义下的出队操作可表示为_,若用牺牲一个单元的办法来区分队满和队空(设队尾指针sq.rear),则队满的条件为_。三、基础知识题1名词解释:栈。2名词解释:队列3什么是循环队列?4假设以S和X分别表示入栈和出栈操作,则对初态和终态均为空的栈操作可由S和X组成的序列表示(如SXSX)。(1)试指出判别给定序列是否合法的一般规则。(2)两个不同合法序列(对同一输入序列)能否得到相同的输出元素序列?如能得到,请举列说明。5. 有5 个元素,其入栈次序为:A,B,C,D,E,在各种可能的出栈次序中,以元素C,D最先出栈(即C第一个且D第二个出栈)的次序有哪几个? 6.如果输入序列为1 2 3 4 5 6,试问能否通过栈结构得到以下两个序列:4 3 5 6 1 2和1 3 5 4 2 6;请说明为什么不能或如何才能得到。7. 若元素的进栈序列为:A、B、C、D、E,运用栈操作,能否得到出栈序列B、C、A、E、D 和D、B、A、C、E?为什么?8. 设输入序列为a,b,c,d,试写出借助一个栈可得到的两个输出序列和两个不能得到的输出序列。9. 设输入序列为2,3,4,5,6,利用一个栈能得到序列2,5,3,4,6吗?栈可以用单链表实现吗?10. 试证明:若借助栈由输入序列1,2,n得到输出序列为P1,P2,Pn(它是输入序列的一个排列),则在输出序列中不可能出现这样的情形:存在着ijk,使PjPkPi。11. 设一数列的输入顺序为123456,若采用堆栈结构,并以A和D分别表示入栈和出栈操作,试问通过入出栈操作的合法序列。能否得到输出顺序为325641的序列。能否得到输出顺序为154623的序列。12.(1) 什么是递归程序? (2) 递归程序的优、缺点是什么? (3) 递归程序在执行时,应借助于什么来完成?(4) 递归程序的入口语句、出口语句一般用什么语句实现? 13. 在一个算法中需要建立多个堆栈时可以选用下列三种方案之一,试问:这三种方案之间相比较各有什么优缺点?(1)分别用多个顺序存储空间建立多个独立的堆栈;(2)多个堆栈共享一个顺序存储空间;(3)分别建立多个独立的链接堆栈。14在某程序中,有两个栈共享一个一维数组空间SPACEN、SPACE0、SPACEN-1 分别是两个栈的栈底。(1)对栈1、栈2,试分别写出(元素x)入栈的主要语句和出栈的主要语句。(2)对栈1、栈2,试分别写出栈满、栈空的条件。15. 简述顺序存储队列的假溢出的避免方法及队列满和空的条件。16. 举例说明顺序队的“假溢出”现象,并给出解决方案。17. 怎样判定循环队列的空和满?18. 简要叙述循环队列的数据结构,并写出其初始状态、队列空、队列满时的队首指针与队尾指针的值。 四、算法设计1假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的初始化队列、入队列和出队列算法。2借助栈(可用栈的基本运算)来实现单链表的逆置运算。3假设一个算术表达式中可以包含三中括号:圆括号“(”和“)”,方括号“”和“”以及花括号与“”和“”,且这三种括号可按任意的次序嵌套试用,如(. . . . . . . .( . . . .)。试利用栈的运算编写判断给定表达式中所含括号是否正确 配对出现的算法(可设表达式已存入字符型数组中)。第四章 串一、选择题1下面关于串的的叙述中,哪一个是不正确的?( )A 串是字符的有限序列 B空串是由空格构成的串C 模式匹配是串的一种重要运算 D串既可以采用顺序存储,也可以采用链式存储2 .若串S1=ABCDEFG, S2=9898 ,S3=#,S4=012345,执行concat(replace(S1,substr(S1,length(S2),length(S3),S3),substr(S4,index(S2,8),length(S2)其结果为( )AABC#G0123 BABCD#2345 CABC#G2345 DABC#2345EABC#G1234 FABCD#1234 GABC#012343设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( )A求子串 B联接 C匹配 D求串长4已知串S=aaab,其Next数组值为( )。A0123 B1123 C1231 D12115串 ababaaababaa 的next数组为( )。A012345678999 B012121111212 C011234223456 D01230123223456字符串ababaabab 的nextval 为( )A(0,1,0,1,04,1,0,1) B(0,1,0,1,0,2,1,0,1)C(0,1,0,1,0,0,0,1,1) D(0,1,0,1,0,1,0,1,1 )7模式串t=abcaabbcabcaabdab,该模式串的next数组的值为( ),nextval数组的值为 ( )。
展开阅读全文