《部编版第二章 线性表实验.doc》由会员分享,可在线阅读,更多相关《部编版第二章 线性表实验.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章习题与解答一推断题1线性表的逻辑次序与存储次序老是分歧的。2次序存储的线性表能够顺次号随机存取。3次序表的拔出跟删除操纵不需求支付非常年夜的时刻价值,由于每次操纵均匀只要近一半的元素需求挪动。4线性表中的元素能够是种种百般的,但统一线性表中的数据元素存在一样的特征,因而是属于统一数据工具。5在线性表的次序存储构造中,逻辑上相邻的两个元素在物理地位上并不必定紧邻。6在线性表的链式存储构造中,逻辑上相邻的元素在物理地位上不必定相邻。7线性表的链式存储构造优于次序存储构造。8在线性表的次序存储构造中,拔出跟删除时,挪动元素的个数与该元素的地位有关。9线性表的链式存储构造是用一组恣意的存储单位来
2、存储线性表中数据元素的。10在单链表中,要获得某个元素,只需明白该元素的指针即可,因而,单链表是随机存取的存储构造。二单项选择题(请从以下A,B,C,D选项当选择一项)1线性表是()。(A)一个有限序列,能够为空;(B)一个有限序列,不克不及为空;(C)一个有限序列,能够为空;(D)一个无序序列,不克不及为空。2对次序存储的线性表,设其长度为n,在任何地位上拔出或删除操纵基本上等概率的。拔出一个元素时均匀要挪动表中的个元素。(A)n/2(B)n+1/2(C)n-1/2(D)n3线性表采纳链式存储时,其地点()。(A)必需是延续的;(B)局部地点必需是延续的;(C)必定是不延续的;(D)延续与否
3、均能够。4用链表表现线性表的长处是。(A)便于随机存取(B)破费的存储空间较次序存储少(C)便于拔出跟删除(D)数据元素的物理次序与逻辑次序一样5 某链表中最常用的操纵是在最初一个元素之后拔出一个元素跟删除最初一个元素,那么采纳()存储方法最节约运算时刻。(A)单链表(B)双链表(C)单轮回链表(D)带头结点的双轮回链表6 轮回链表的要紧长处是()。(A)不在需求头指针了(B)曾经明白某个结点的地位后,能够轻易寻到他的直截了当前趋(C)在进展拔出、删除运算时,能更好的保障链表不时开(D)从表中的恣意结点动身都能到全部链表7 上面对于线性表的表白过错的选项是()。(A) 线性表采纳次序存储,必需
4、占用一片地点延续的单位;(B) 线性表采纳次序存储,便于进展拔出跟删除操纵;(C) 线性表采纳链式存储,不用占用一片地点延续的单位;(D) 线性表采纳链式存储,便利于进展拔出跟删除操纵;8 单链表中,添加一个头结点的目标是为了。(A)使单链表至多有一个结点(B)标识表结点中首结点的地位C便利运算的完成(D)阐明单链表是线性表的链式存储9 假定某线性表中最常用的操纵是在最初一个元素之后拔出一个元素跟删除第一个元素,那么采纳存储方法最节约运算时刻。(A)单链表(B)仅有头指针的单轮回链表(C)双链表(D)仅有尾指针的单轮回链表10 假定某线性表中最常用的操纵是取第i个元素跟寻第i个元素的前趋元素,
5、那么采纳存储方法最节约运算时刻。(A)单链表(B)次序表(C)双链表(D)单轮回链表三填空题1带头结点的单链表H为空的前提是_。1 非空单轮回链表L中*p是尾结点的前提是_。3在一个单链表中p所指结点之后拔出一个由指针f所指结点,应履行s-next=_;跟p-next=_的操纵。4在一个单链表中p所指结点之前拔出一个由指针f所指结点,可履行以下操纵:s-next=_;p-next=s;t=p-data;p-data=_;s-data=_;5在次序表中做拔出操纵时起首反省_。四算法计划题1 设线性表寄存在向量Aarrsize的前elenum个重量中,且递增有序。试写一算法,将x拔出到线性表的恰当
6、地位上,以坚持线性表的有序性。同时剖析算法的时刻庞杂度。2 曾经明白一次序表A,其元素值非递加有序陈列,编写一个函数删除次序表中过剩的值一样的元素。3 编写一个函数,从一给定的次序表A中删除值在xy(x=y)之间的一切元素,请求以较高的效力来完成。提醒:能够先将次序表中一切值在xy之间的元素置成一个特别的值,并不破刻删除它们,而后从最初向前顺次,发觉存在特别值的元素后,挪动其前面的元素将其删撤除。4 线性表中有n个元素,每个元素是一个字符,现存于向量Rn中,试写一算法,使R中的字符按字母字符、数字字符跟别的字符的次序陈列。请求应用本来的存储空间,元素挪动次数最小。研545 线性表用次序存储,计
7、划一个算法,用尽能够少的辅佐存储空间将次序表中前m个元素跟后n个元素进展全体调换。马上线性表a1,a2,am,b1,b2,bn改动为:b1,b2,bn,a1,a2,am。6 曾经明白带头结点的单链表L中的结点是按整数值递增陈列的,试写一算法,将值为x的结点拔出到表L中,使得L依然有序。同时剖析算法的时刻庞杂度。7 假定有两个已排序的单链表A跟B,编写一个函数将他们兼并成一个链表C而不改动其排序性。8 假定长度年夜于1的轮回单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写一个函数删除该结点的前趋结点。9 曾经明白两个单链表A跟B分不表现两个聚集,其元素递增陈列,编写一个函数求
8、出A跟B的交加C,请求C异样以元素递增的单链表方法存储。10 设有一个双向链表,每个结点中除有prior、data跟next域外,另有一个访咨询频度freq域,在链表被升引之前,该域其值初始化为零。每当在链表进展一次Locata(L,x)运算后,令值为x的结点中的freq域增1,并调剂表中结点的次第,使其按访咨询频度的递加序列陈列,以便使频仍访咨询的结点老是接近表头。试写一个算法满意上述请求的Locata(L,x)算法。五上机练习标题1 Josephu咨询题Josephu咨询题为:设编号为1,2,n的n团体围坐一圈,商定编号为k1=k0)团体按顺时针偏向围坐一圈,每团体持有一个正整数暗码。开场
9、时任选一个正整数做为报数下限m,从第一团体开场顺时针偏向自1起次序报数,报到m是停顿报数,报m的人出列,将他的暗码作为新的m值,从他的下一团体开场从新从1报数。如斯下去,直到一切人全体出列为止。令n最年夜值取30。请求计划一个次序模仿此进程,求出出列编号序列。源次序代码:在TubroC2.0测试经过#include#includestructnodeintnumber;/*人的序号*/intcipher;/*暗码*/structnode*next;/*指向下一个节点的指针*/;structnode*CreatList(intnum)/*树破轮回链表*/inti;structnode*ptr1,
10、*head;if(ptr1=(structnode*)malloc(sizeof(structnode)=NULL)perror(malloc);returnptr1;head=ptr1;ptr1-next=head;for(i=1;inext=(structnode*)malloc(sizeof(structnode)=NULL)perror(malloc);ptr1-next=head;returnhead;ptr1=ptr1-next;ptr1-next=head;returnhead;main()inti,n=30,m;/*人数n为30个*/structnode*head,*ptr;r
11、andomize();head=CreatList(n);for(i=1;inumber=i;head-cipher=rand();head=head-next;m=rand();/*m取随机数*/i=0;/*由于我没方法删除head指向的节点,只会删除head的下一节点,因而只能从0数起。*/while(head-next!=head)/*当剩下最初一团体时,加入轮回*/if(i=m)ptr=head-next;/*ptr记载数到m的那团体的地位*/printf(number:%dn,ptr-number);printf(cipher:%dn,ptr-cipher);m=ptr-cipher;/*让m即是数到m的人的暗码*/head-next=ptr-next;/*让ptr从链表中摆脱,将前后两个节点衔接起来*/head=head-next;/*head移向后一个节点*/free(ptr);/*开释ptr指向的内存*/i=0;/*将i从新置为0,从0再开场数*/elsehead=head-next;i+;printf(number:%dn,head-number);printf(cipher:%dn,head-cipher);free(head);/*让最初一团体也出列*/
限制150内