ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:32.91KB ,
资源ID:23879953      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23879953.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(线性表 栈与队列 数据结构习题及答案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

线性表 栈与队列 数据结构习题及答案.docx

1、线性表 栈与队列 数据结构习题及答案第二章 线性表一、选择题1线性表是( A ) 。A、 一个有限序列,可以为空; B、一个有限序列,不能为空; C、一个无限序列,可以为空; D、一个无序序列,不能为空。 2对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的(A)个元素。A、 n/2 B、(n+1)/2 C、(n -1)/2 D、 n 3线性表采用链式存储时,其地址( D ) 。A、必须是连续的 B、部分地址必须是连续的 C、一定是不连续的 D、连续与否均可以 4用链表表示线性表的优点是( C )。A、便于随机存取 B、花费的存储空间较顺序

2、存储少C、便于插入和删除 D、数据元素的物理顺序与逻辑顺序相同5、某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( D )存储方式最节省运算时间。A、单链表 B、双链表 C、单循环链表 D、带头结点的双循环链表6、循环链表的主要优点是( D ) 。A、不在需要头指针了B、已知某个结点的位置后,能够容易找到他的直接前趋C、在进行插入、删除运算时,能更好的保证链表不断开D、从表中的任意结点出发都能扫描到整个链表7、下面关于线性表的叙述错误的是( B )。A、线性表采用顺序存储,必须占用一片地址连续的单元;B、线性表采用顺序存储,便于进行插入和删除操作;C、线性表采用

3、链式存储,不必占用一片地址连续的单元;D、线性表采用链式存储,便于进行插入和删除操作;8、单链表中,增加一个头结点的目的是为了( C )。A、使单链表至少有一个结点 B、标识表结点中首结点的位置C、方便运算的实现 D、说明单链表是线性表的链式存储9、若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。A、单链表 B、仅有头指针的单循环链表 C、双链表 D、仅有尾指针的单循环链表10、若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用(B )存储方式最节省运算时间。A、 单链表 B、顺序表 C、 双链表 D、单循环

4、链表11、链表不具有的特点是( A )。、可随机访问任一元素 、插入删除不需要移动元素、不必事先估计存储空间 、所需空间与线性表长度成正比12、在一个有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂性为( B ) 。A、O(1) B、O(n) C、O(n2) D、O(log2n)13、在一个单链表HL中,若要向表头插入一个自由指针p指向的结点,则执行( D )。A、 HL=p;p-next=HL; B、 p-next=HL; HL=p;C、 p-next=HL; p=HL; D、 p-next=HL-next;HL-next=p;14、在一个单链表HL中,若要在指针q所指结点的后面插

5、入一个自由指针p所指向的结点,则执行( D )。A 、q-next=p-next;p-next=q; B、 p-next=q-next;q=p;C 、q-next=p-next;p-next=p D、 p-next=q-next;q-next=p;15、在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行( D )。A、 p=q-next;p-next=q-next; B、 p=q-next;q-next=p;C、 p=q-next;p-next=q; D、 q-next=q-next-next;16、给定有n个元素的向量,建立一个有序的单链表的时间复杂度为( C )。A、O(1)

6、 B、O(n) C、O(n2) D、O(nlog2n)17、不带头结点的单链表first为空的判定条件是( A )。A、first=NULL B、first-next=NULL C、first-next=first D、first!=NULL18、在非空的循环双链表中q所指的结点前插入一个由p所指结点的过程依次为:p-next=q; p-prior=q-prior; q-prior=p;和( C )。A、q-next=p 、q-prior-next=p 、p-prior-next=p 、p-next-prior=p19、线性表的链式存储结构与顺序存储结构相比优点是( D )。A、所有的操作算法

7、实现简单 B、便于随机存储C、不便于插入与删除 D、便于利用零散的存储空间20、在双向链表存储结构中,删除P所指向的结点时须修改指针( A )。A、P-next-prior=P-prior P-prior-next=P-nextB、P-next=P-next-next P-next-prior=PC、P-prior-next=P P-prior=P-prior-priorD、P-prior=P-next-next P-next=P-prior-prior21、向一个有127个元素原顺序表中插入一个新元素并保存原来顺序不变,平均要移动(B)个元素。A、8 B、63.5 C、63 D、722、在一

8、个长度为n的顺序存储的线性表中,向第i个元素(1in+1)之前插入一个新元素时,需要从年向前依次移(B )个元素。 A、n-i B、n-i+1 C、n-i-1 D、i二、填空题1、带头结点的单链表H为空的条件是( H-next=NULL )。2、非空单循环链表L中*p是尾结点的条件是( p-next=L )。3、在一个单链表中p所指结点之后插入一个由指针f所指结点,应执行s-next=( p-next );和p-next=( f )的操作。4、在一个单链表中p所指结点之前插入一个由指针s所指结点,可执行以下操作:s-next=( p-next );p-next=s;t=p-data;p-dat

9、a=( s-dada );s-data=( t );5在顺序表中做插入操作时首先检查( 插入位置是否合理 )。6、顺序表、链表分别通过( 存储的相对位置 )、( 指针)体现元素的逻辑关系。7、线性链表中指针的作用是(表示逻辑关系)。8、在顺序表中,插入或者删除一个元素,需要平均移动(一半 )个元素,具体移动的元素个数与(插入与删除的位置有关)有关。9、顺序表中逻辑上相邻的元素的物理位置(一定)紧邻。单链表中逻辑上相邻的元素的物理位置(不一定 )紧邻。10、在单链表中,除了首元结点外,任一结点的存储位置由(前趋结点的指针域 )指示。11、有一个单链表(不同结点的data域可能相等),其头指针为h

10、ead,编写一算法计算数据域为x的结点的个数,请填空。 int count(LinkList head ,ElemType x) Node *p; int n=0; ( p=head-next ); While (p!=NULL) if( (p-data=x) ) n+; ( p=p-next ); return n;12、单链表的逆置,请填空void insert(LikList L)Node *p,*q,*r; p=head; ( q=p-next或q=head-next ); while(q!=NULL) r=q-next; ( q-next=p ); p=q; q=r; head-ne

11、xt=NULL;head=p; 三、判断题1、双循环链表中,任一结点的后继指针均指向其逻辑后继。 (F)2、线性表的逻辑顺序与存储顺序总是一致的。(F)3、顺序存储的线性表可以按序号随机存取。(T)4、顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。 (F)5、线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。(T)6、在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。(F)7、在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。(T)8、线性表的链式存储结构优于顺序存储

12、结构。(F)9、在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。(T)10、线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。(T)11、在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。(F)四、操作题1、下面算法调用方式为unknown(rear);说明该算法的功能,若输入数据为ABCDE回车,画出该算法所得到的存储结构。void unknown(LinkList &rear ) LinkList head,s; DataType ch; rear=head=(ListNode *)malloc(sizeof

13、(ListNode); head-next=head; printf(输入数据以回车键结束!n); while(ch=getchar()!=n) s=(LNode *)malloc(sizeof(LNode); s-data=ch; s-next=rear-next; rear-next=s; rear=rear-next; rear-next=head-next;free(head); 参考答案: rear2、下面算法调用方式为Unknown(root);说明该算法的功能,若输入数据为AB#CD#EF#回车,画出该算法所得到的存储结构。 void Unknown(BiTree &T) cha

14、r ch; if(ch=getchar()=#) T=NULL; elseT=(BiTree)malloc(sizeof(BiTNode);T-data=ch; Unknown(T-lchild); Unknown(T-rchild); 参考答案: root 3、已知线性链表元素为字符(A,B,C,D,E,F),说明下面算法的功能,并画出该算法处理后所得到的存储结构。void Unknown(LinkList &head)/head为链表的表头指针 LinkList p,s; p=head-next;while(p-next) s=p-next; if(s-data%2=1)p=p-next;

15、else p-next=s-next; free(s); /end of while 参考答案:将单链表中ASCII码为偶数的结点删除。4、设单链表的结点的结构为ListNode=(data,link),阅读下面的函数,指出它所实现的功能是什么。 Int unknown(ListNode *Ha) Int n=0; ListNode *p=Ha-link; While(p) n+; p=p-next; Return (n);参考答案:计算单链表的长度或计算单链表的结点的个数。5、假定p1和p2是两个单链表的表头指针,用来表示两个集合,单键表中的结点包括值域data和指向后继的结点的指针域lin

16、k,试根据下面的算法指出算法的功能。 int SS(ListNode *p1,ListNode *p2) ListNode r; while(p2!=NULL) r=p1; while(r!=NULL) if(p2-data=r-data) break; r=r-link;if(r=NULL) return 0;P2=p2-link;return 1;参考答案:判断P2单链表所代表的集合是否为P1单链表所代表的集合的子集,若是则返回1,否则返回0。五、算法题、已知两个单向链表A=(a,b,c);B=(d,e,f),设计算法void MergeList(LinkList &A,LinkList

17、B),实现将两个链表合并为一个单向链表A=(d,e,f,c,b,a),其中A,B为两个链表的表头指针,小写字母为表中元素。void merger(LinkList *A ,LinkList B)参考答案:void MergrList(LIstList &A,LinkList B) for (R=B;R-next;R=R-next); P=A-nextwhile(P) S=P;P=P-next; S-next=R-next; R-next=S; A=B;、假定在一个带头结点的单链表L中所有结点的值按递增顺序排列,试写下面的函数,功能是删除表L跌所有的值大于等于min,同时小于等于max的结点。

18、单链表的结构定义如下:void rangeDelete(ListNode *L,ElemType min,ElemType max)参考答案: void rangeDelete(ListNode *L,ElemType min,ElemType max) listNode *q=L,*p=L-next; while(p!=NULL) if(p-data=min&p-datanext=p-next;free(p);p=q-next;else q=p;p=p-next;3、线性顺序表及链表就地逆置算法.int revSqList(SqList *L) int revLinkList(LinkLis

19、t L)参考答案:int revSqList(SqList *L) int i; ElemType temp; for(i=0;ilength/2;i+) temp=L-elemi; L-elemi=L-elemL-length-1-i; L-elemL-length-1-i=temp; return OK;int revLinkList(LinkList L) LinkList P,Q; P=L-next; if(L-next&P-next) Q=P-next; P-next=NULL; while (Q) P=Q; Q=Q-next; P-next=L-next; L-next=P; re

20、turn OK;4、设 A和B是两个单链表,其表中元素递增有序。试写一算法将A和B归并成一个按元素值递增有序的单链表C,并要求辅助空间为O(1)。LinkList MergeList_L(LinkList La,LinkList Lb) 参考答案: LinkList MergeList_L(LinkList La,LinkList Lb) LinkList Lc,pa,pb,pc; pa=La-next; pb=Lb-next; Lc=pc=La; while(pa&pb) if (pa-datadata)pc-next=pa;pc=pa;pa=pa-next;else pc-next=pb;

21、pc=pb;pb=pb-next; pc-next=pa?pa:pb; free(Lb); return La;5、已知一个的链表A,表中元素为整数,设计算法把表中的所有的负整数排列在所有非负整数之后。 void Divide(LinkList *A)参考答案: void Divide(LinkList *A) P=A-next;q=A; while(p) if(p-data=0) q-next=p-next; p-next=A-next; A-next=p; P=q-next;else q=p;p=p-next;第三章 栈与队列一、选择题1、一个栈的输入序列为1,2,3,4,下面哪一个序列不

22、可能是这个栈的输出序列(C)。A、 1,3,2,4 B、2,3,4,1 C、 4,3,1,2 D、3,4,2,12、将一个递归算法改为对应的非递归算法时,通常需要使用( A )。A、 栈 B、 队列 C、 循环队列 D、优先队列3、若用数组S1.n作为两个栈S1和S2的共同存储结构,对任何一个栈,只有当S全满时才不能作入栈操作。为这两个栈分配空间的最佳方案是( C )。A、S1的栈底位置为0,S2的栈底位置为n+1 B、S1的栈底位置为0,S2的栈底位置为n/2C、S1的栈底位置为1,S2的栈底位置为n D、S1的栈底位置为1,S2的栈底位置为n/24、 在一个具有n个单元的顺序栈中,假设栈底

23、是存储地址的低端,现在我们以top 作为栈顶指针,则作退栈操作时,top的变化是( A )。A、top =top -1 B、top = top +1 C、top 不变 D、top不确定5、 链栈和顺序栈相比较,有一个明显的特点是( A )。A、链栈通常不会出现栈满的情况B、链栈通常不会出现栈空的情况C、链栈的插入操作更加方便D、链栈的删除操作更加方便。6、 在一个链队中,假设f和r分别为队首和队尾指针,删除一个结点的运算是( C )。A、r = f nextB、r = r nextC、f = f nextD、f = r next7、 向一个栈顶指针为top的链栈中插入一个s 所指结点时,其操作

24、步骤是( B )。A、top next = sB、s next = top ; top = s;C、s next =top next; top next = s;D、s next =top ; top = top next8、栈的插入与删除操作在 ( A ) 进行。A、 栈顶 B 、栈底 C、 任意位置 D、 指定位置9、当利用大小为N的数组顺序存储一个队列时,该队列的最大长度为 ( B )。A、 N-2 B 、N-1 C、 N D、 N+110、假定一个顺序队列的队首和队尾指针分别为f和r,则判断队空指针的条件为(D )。A、f+1=r B、 r+1=f C、 f=0 D、 f=r11、在系

25、统实现递归调用时需利用递归工作记录保存( C ),当递归调用结束时通过它将控制转到上层调用程序。A、调用地址 B、递归入口 C、返回地址 D、递归出口12、设栈的输入序列是1,2,3,4n若输出序列的第一个元素是n,则第i个输出元素( B)。A、不确定 B、n-i+1 C、i D、n-i二、填空题1、已知顺序存储的循环队列中,front,rear分别为队头、队尾指针,MAX为队列中存储单元的最大个数,若当队列中仅有一个空闲单元时视为队满,则队满条件为(rear+1)%MAX=front );一般情况下,队列中元素个数可表示为( (rear-front+MAX)%MAX )。2、已知元素入栈先后

26、为ABCDE,若C为第一个出栈元素,则下一个出栈的元素可能是( B 、D 、 E )。3、已知仅设尾指针的单循环链表rear(指针域为next)表示队列,链表前端为队头,则结点*s入队的语句依次为( s-next=rear-next );( rear-next=s );rear=rear-next;4、已知仅设尾指针rear的无头结点的单循环链表(指针域为next)表示栈,链表前端为栈顶,则结点*new进栈的语句依次为(new-next=rear-next );( rear-next=new );(rear=new);5、 在对栈的操作中,其插入和删除都是在栈的( 同一端 )进行的,所以导致后

27、进栈的元素必定先被删除,也就是说,栈的修改是按照( 后进先出 )的原则进行的,所以栈又称为( LIFO )表。 6、 在队列的操作中,其插入和删除工作是在表的两端进行的,它允许在表的一端进行插入,一端进行删除,则允许插入的一端称为(队尾 ),允许删除的一端称为( 队首 ),先进入队列的成员必定先离开队列,所以队列又称为( FIFO )表。 7、向一个栈顶找针为HS的链栈中插入一个S所指的结点时,则执行( S-next=HS;HS=S; )。8、在顺序队列中,应该有队头和队尾两个指针来指示,队头指针和队尾指针的初值在队列的初始化时均应该设置为( 0 ),当对队列进行插入和删除的操作后,如果头指针

28、和尾指针相等时,队列为( 空 )。9、 向栈中压入元素的操作是(压栈 )。对栈进行出栈时的操作是( 出栈 )。10、在具有n个存储单元的队列中,队满时队中共有( n-1 )个元素。11、假设有一个顺序栈A,其中元素a1,a2,a3,a4,a5,a6依次进栈,如果已知六个元素出栈的顺序是a2,a3,a4,a6,a5,a1,则此栈容量至少应该为( 3 )。12、 线性表、栈和队列都是( 线性结构 )结构,可以在线性表的( 任意 )位置上插入和删除。13、判断单链表是否对称,对称返回1,否则返回0,请填空。 int xyz(LinkList L) Node *p,*q; int n1,n,i,x;

29、Stack s; P=L-next; q=p; n=0; while(q!=NULL) n+; q=q-next;n1=( n/2 ); for(i=1;idata); ( p=p-next );if( (n%2!=0) ) p=p-next; while(p!=NULL) pop(s,x); if (p-data!=x) break; ( p=p-next );if ( p=NULL 或!p ) return 1; else return 0;三、判断题1、栈与队列都是限制存取点的表,只是它们的存取特征不一样。(T)2、在链队列中,即使不设置尾指针也能进行入队操作。(T)3、递归调用算法与相同的功能的非递归算法相比,主要问题在于重复计算太多,而且本身需要分配额外的空间和传递数据

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1