数据结构第二章线性表习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构第二章线性表习题
02线性表
【单选题】
1.以下不属于线性结构特点的就是(c)。
a、存有且仅有一个数据元素并无轻易前
驱b、存有且仅有一个数据元素并无轻易后继
c、有且仅有一个数据元素既无直接前驱又无直接后继
d、大多数据元素存有且仅有一个轻易前驱,存有且仅有一个轻易后继
2.线性表是具有n个(c)的有限序列。
a、信息项b、字符c、数据元素d、数据项
3.线性表的逻辑顺序与存储顺序总是一致的,这种说法(b)。
a、正确b、不正确
4.在顺序表,数据元素e1与其轻易后继e2在存储边线上(a)。
a、必相连b、必
不相连c、可以相连可不相连
5.在长为n的顺序表中删除一个数据元素,平均需移动(d)个数据元素。
a、nb、
n-1c、n/2d、(n-1)/2
6.在短为n的顺序表填入一个数据元素,平均值须要移动(c)个数据元素。
a、nb、n-1c、n/2d、(n-1)/2
7.单链表是一种(b)存取的存储结构a、随机b、顺序c、索引d、连续
8.以下属顺序存储结构优点的就是(a)。
a、存储密度大b、插入运算方便c、删除运算方便d、可方便地用于各种逻辑结构
的存储表示
9.以下属于单链表中优点的就是(c)。
a、顺序存取b、插入操作能在o(1)的时间复杂度上完成c、插入时不需移动数据元素d、节省存储空间
10.在单链表,数据元素e1与其轻易后继e2在存储边线上(c)。
a、必相连b、必
不相连c、可以相连可不相连
11.以下属单链表与循环链表区别的是(b)。
a、结点结构相同b、搜寻结点的算法中,循环完结条件相同c、对存储空间连续性
的建议相同d、对与否涵盖头结点的建议相同
12.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(a)存储方式最节省时间。
a、顺序表中b、双链表中c、率先垂范结点的双向循环链表d、单循环链表
13.若某线性表最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(d)存储方式最节省运算时间。
a、单链表中b、仅有头指针的单循环链表c、双链表中d、仅有尾指针的单循环链
表
14.若某线性表最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用(d)存储方式最节省运算时间。
a、单链表中b、单循环链表c、拎尾指针的单循环链表d、率先垂范结点的双循环
链表
【计算题】
1.建有单链表如图,试画出来继续执行如下程序段后,各指针变量及单链表的示意图。
⑴p=l;while(p){p.data=p.data*2;p=p.next;}
参考答案:
⑵
s=newonelinknode(8);p=l;while(p.next)p=p.next;s.next=p.next;p.next=s;
参考答案:
【算法题】
1.建有结点类onelinknode和单链表类onelinklist如下:
publicclassonelinknode{publicintdata;
publiconelinknodenext;publiconelinknode(intx){data=x;next=null;}
}//onelinknode
publicclassonelinklist{
privateonelinknodehead;//单链表的头指针
publiconelinklist(){head=newonelinknode(0);}}
⑴试在onelinklist类中添加方法publicintdeleteall(intx),用于删除单链表中所有值为x的数据元素,并返回所删除的数据元素的总个数;参考答案:
publicintdeleteall(intx){p=head;count=0;
while(p.next!=null){
if(p.next.data==x){p.next=p.next.next;count++;}else{p=p.next;}}//whilereturnco unt;}//deleteall
⑵试在onelinklist类中添加方法publicvoidselectsort(),用于按直接选择排序法对单链表中的数据元素进行排序。
参考答案:
publicvoidselectsort(){p=head;
while(p.next!=null){min=p;q=p.next;do{
if(q.dataif(min!=p){temp=min.data;min.data=p.data;p.data=temp;}p=p.next;}//whi le}//selectsort⑶先行在onelinklist类中嵌入方法publicvoidreverse(),用作对单链表中展开就地逆置。
分析:⑴将头结点与表其它结点断裂,独自形成一新空表;⑵将原表中结点逐一摘下并填入新表,每次填入均在头结点之后展开。
参考答案:publicvoidreverse(){r=head.next;//r指向余下链表head.next=null;//断裂单链表的头结点while(r!=null){p=r;//p指向当前待处理结点
r=r.next;p.next=head.next;head.next=p;//将当前待处理结点填入在头结点之
后}//while}//reverse2.建有顺序表类sqlist如下:
publicclasssqlist{privateobject[]table;privateintlen;publicsqlist(intmaxsize){ table=newobject[maxsize];len=0;}}并存有结点类onelinknode和单链表类onelinklist 如下:
publicclassonelinknode{publicobjectdata;publiconelinknodenext;publiconelinknod e(objectobj){data=obj;next=null;}publiconelinknode(){this(null);}}//onelinknod epublicclassonelinklist{privateonelinknodehead;//单链表的头指针publiconelinklist(){head=newonelinknode();}}先行在onelinklist类中嵌入构造函数publiconelinklist(sqlistl)。
参考答案:先在sqlist类中嵌入以下方法:publicobjectget(inti){if(i<0||i>len)returnnull;elsereturntable[i];}publicintle ngth(){returnlen;}然后在onelinklist中嵌入如下构造函数:
publiconelinklist(sqlistl){head=newonelinknode();for(i=l.length()-1;i>=0;i--
){s=newonelinknode(l.get(i));s.next=head.next;head.next=s;}//for}//onelinklist 3.建有循环链表如下,先行定义适当的循环链表类,并在其中嵌入一个可以将链表中指针方向row的方法。
参考答案:
publicclassonelinknode{publicobjectdata;publiconelinknodenext;publiconelinknod
e(objectobj){data=obj;next=null;}publiconelinknode(){this(null);}}//onelinknod e。