数据结构Java版第二章习题_第1页
数据结构Java版第二章习题_第2页
数据结构Java版第二章习题_第3页
数据结构Java版第二章习题_第4页
数据结构Java版第二章习题_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构Java版第二章习题1/2〔按照自己的情况选作部分习题,不要抄袭第二章习题顺序存储线性表一判断题1.线性表的逻辑顺序与存储顺序总是一致的。×2.顺序存储的线性表可以按序号随机存取。√3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。×4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。√5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。×6.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。√二单选题<请从下列A,B,C,D选项中选择一项>1.线性表是<A>。<A>一个有限序列,可以为空;<B>一个有限序列,不能为空;<C>一个无限序列,可以为空;<D>一个无序序列,不能为空。2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的〔A个元素。<A>n/2<B>n+1/2<C>n-1/2<D>n三填空题1.在顺序表中做插入操作时首先检查___表是否满了______________。四算法设计题设线性表存放在向量A[arrsize]的前elenum个分量中,且递增有序。试写一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。并且分析算法的时间复杂度。已知一顺序表A,其元素值非递减有序排列,编写一个函数删除顺序表中多余的值相同的元素。编写一个函数,从一给定的顺序表A中删除值在x~y<x<=y>之间的所有元素,要求以较高的效率来实现。提示:可以先将顺序表中所有值在x~y之间的元素置成一个特殊的值,并不立即删除它们,然后从最后向前依次扫描,发现具有特殊值的元素后,移动其后面的元素将其删除掉。数据结构Java版第二章习题全文共13页,当前为第1页。线性表中有n个元素,每个元素是一个字符,现存于向量R[n]中,试写一算法,使R数据结构Java版第二章习题全文共13页,当前为第1页。线性表用顺序存储,设计一个算法,用尽可能少的辅助存储空间将顺序表中前m个元素和后n个元素进行整体互换。即将线性表〔a1,a2,…,am,b1,b2,…,bn改变为:〔b1,b2,…,bn,a1,a2,…,am。五上机实习题目约瑟夫环问题约瑟夫环问题:设编号为1,2,3,……,n的n<n>0>个人按顺时针方向围坐一圈,每个人持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m是停止报数,报m的人出列,将他的密码作为新的m值,从他的下一个人开始重新从1报数。如此下去,直到所有人全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。package算法设计;importjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;publicclassYueSeFu{publicstaticvoidmain<String[]args>{Scannerscan=newScanner<System.in>;System.out.print<"请输入总人数:">;inttotalNum=scan.nextInt<>;System.out.print<"请输入报数的大小:">;intcycleNum=scan.nextInt<>;yuesefu<totalNum,cycleNum>;scan.close<>;}publicstaticvoidyuesefu<inttotalNum,intcountNum>{//初始化人数List<Integer>start=newArrayList<Integer><>;for<inti=1;i<=totalNum;i++>{start.add<i>;}//从第K个开始计数intk=0;while<start.size<>>0>{k=k+countNum;数据结构Java版第二章习题全文共13页,当前为第2页。数据结构Java版第二章习题全文共13页,当前为第2页。k=k%<start.size<>>-1;//判断是否到队尾if<k<0>{System.out.println<start.get<start.size<>-1>>;start.remove<start.size<>-1>;k=0;}else{System.out.println<start.get<k>>;start.remove<k>;}}}}链式存储线性表一判断题1.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。×2.线性表的链式存储结构优于顺序存储结构。×3.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。√4.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。×二单选题<请从下列A,B,C,D选项中选择一项>1.线性表是<A>。<A>一个有限序列,可以为空;<B>一个有限序列,不能为空;<C>一个无限序列,可以为空;<D>一个无序序列,不能为空。2.线性表采用链式存储时,其地址<D>。<A>必须是连续的;<B>部分地址必须是连续的;<C>一定是不连续的;<D>连续与否均可以。3.用链表表示线性表的优点是〔C。<A>便于随机存取<B>花费的存储空间较顺序存储少<C>便于插入和删除<D>数据元素的物理顺序与逻辑顺序相同4.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用<D>存储方式最节省运算时间。<A>单链表数据结构Java版第二章习题全文共13页,当前为第3页。<B>数据结构Java版第二章习题全文共13页,当前为第3页。<C>单循环链表<D>带头结点的双循环链表循环链表的主要优点是<D>。<A>不在需要头指针了<B>已知某个结点的位置后,能够容易找到他的直接前趋<C>在进行插入、删除运算时,能更好的保证链表不断开<D>从表中的任意结点出发都能扫描到整个链表下面关于线性表的叙述错误的是<B>。线性表采用顺序存储,必须占用一片地址连续的单元;线性表采用顺序存储,便于进行插入和删除操作;线性表采用链式存储,不必占用一片地址连续的单元;线性表采用链式存储,不便于进行插入和删除操作;单链表中,增加一个头结点的目的是为了〔C。<A>使单链表至少有一个结点<B>标识表结点中首结点的位置〔C方便运算的实现<D>说明单链表是线性表的链式存储若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用〔D存储方式最节省运算时间。<A>单链表<B>仅有头指针的单循环链表<C>双链表<D>仅有尾指针的单循环链表若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用〔存储方式最节省运算时间〔C。<A>单链表<B>顺序表<C>双链表<D>单循环链表三填空题1.带头结点的单链表H为空的条件是__H->next==NULL_____。非空单循环链表L中*p是尾结点的条件是___p->next==L________。3.在一个单链表中p所指结点之后插入一个由指针f所指结点,应执行s->next=__p->next___;和p->next=____s_________的操作。4.在一个单链表中p所指结点之前插入一个由指针f所指结点,可执行以下操作:s->next=_p->next_______;p->next=s;t=p->data;p->data=___s->data________;s->data=____t_______;四算法设计题数据结构Java版第二章习题全文共13页,当前为第4页。1.已知带头结点的单链表L中的结点是按整数值递增排列的,试写一算法,将值为x的结点插入到表L中,使得L数据结构Java版第二章习题全文共13页,当前为第4页。packagexiti;classLii{intdata; Liinext;publicLii<>{ data=0; }publicLii<intid>{ data=id; }publicvoiddisplay<>{ System.out.print<data+"">; } }classLii_2{publicLiifirst;publicLii_2<>{ first=newLii<>; }publicbooleanisEmpty<>{return<first.next==null>; }publicbooleaninsert_2<intid>{ Liinewnode=newLii<id>; Liip=first;while<p.next!=null&&p.next.data<id> p=p.next; newnode.next=p.next; p.next=newnode;returntrue; }publicvoidlistdisplay<>{ Liip=first; System.out.println<"显示链表:">;while<p!=null>{ p.display<>; p=p.next; }数据结构Java版第二章习题全文共13页,当前为第5页。 System.out数据结构Java版第二章习题全文共13页,当前为第5页。 System.out.println<"**************">; } }publicclassL{publicstaticvoidmain<String[]args>{ Lii_2s1=newLii_2<>;for<inti=1;i<=9;i=i+2>{ s1.insert_2<i>; } s1.listdisplay<>; s1.insert_2<2>; s1.listdisplay<>; }}时间复杂度:O<elenum>2.假设有两个已排序的单链表A和B,编写一个函数将他们合并成一个链表C而不改变其排序性。packagexiti1;classlink{intdata;//数据域〔结点关键字 linknext;//指针域〔指向下一结点publiclink<intid>{//结点构造方法 data=id;//结点构造方法 }publicvoiddisplay<>{//显示自身的数据域 System.out.print<data+"">; }}classlink_1{ linkfirst;//单链表的头指针publiclink_1<>{//构造方法 first=null;//空单链表,头指针为空 } //从单链表最前面插入一个新结点,作为第一个结点publicbooleaninsert_1<intid>{ linknewLink=newlink<id>; linkp;if<first==null>数据结构Java版第二章习题全文共13页,当前为第6页。数据结构Java版第二章习题全文共13页,当前为第6页。else{ p=first;while<p.next!=null>p=p.next; p.next=newLink; } returntrue; }publicintget<intindex>{ linkp=first;if<p!=null&&index>=0>{intj=0;while<p!=null&&j<index>{ j++; p=p.next; }if<p!=null>returnp.data; }return0; }publicintLength<>{ linkp=first;inti=0;while<p!=null>{ p=p.next; i++; }returni; } //显示全部链表publicvoidlistdisplay<>{ linkp=first; System.out.println<"显示链表:">;while<p!=null>{ p.display<>; p=p.next; } System.out.println<>; System.out.println<"*****************">; }数据结构Java版第二章习题全文共13页,当前为第7页。数据结构Java版第二章习题全文共13页,当前为第7页。publicclassAB{publicstaticlink_1Merge<link_1A,link_1B>{intl=A.Length<>+B.Length<>; link_1C=newlink_1<>;intj=0,iA=0,iB=0;while<iA<A.Length<>&&iB<B.Length<>>{if<A.get<iA><B.get<iB>> C.insert_1<A.get<iA++>>;else C.insert_1<B.get<iB++>>; }for<;iA<A.Length<>;> C.insert_1<A.get<iA++>>;for<;iB<B.Length<>;> C.insert_1<B.get<iB++>>;returnC; }publicstaticvoidmain<String[]args>{ link_1s1=newlink_1<>; link_1s2=newlink_1<>; s1.insert_1<12>; s1.insert_1<15>; s1.insert_1<19>; s1.insert_1<20>; s1.insert_1<23>; s1.listdisplay<>; s2.insert_1<10>; s2.insert_1<14>; s2.insert_1<17>; s2.insert_1<21>; s2.insert_1<26>; s2.listdisplay<>; link_1s3=Merge<s1,s2>; s3.listdisplay<>; }}3.假设长度大于1的循环单链表中,既无头结点也无头指针,p为指向该链表中某一结点的指针,编写一个函数删除该结点的前趋结点。数据结构Java版第二章习题全文共13页,当前为第8页。4.已知两个单链表A和B分别表示两个集合,其元素递增排列,编写一个函数求出A和B的交集C,要求C数据结构Java版第二章习题全文共13页,当前为第8页。packagexiti;classlink{publicintdata;//数据域〔结点关键字publiclinknext;////指针域〔指向下一结点publiclink<intid>{//结点构造方法 data=id; }publicvoidDisplay<>{//显示自身的数据域 System.out.print<data+"">; }}classlinkList{ linkfirst;//单链表的头指针publiclinkList<>{//构造方法 first=null;//空单链表,头指针为空 } //在单链表尾部插入一个新结点publicbooleaninsertBack<intid>{ linknewlink=newlink<id>;//诞生新结点newlink4 linkp;//辅助结点指针 if<first==null> first=newlink;else{ p=first;//指向第一结点while<p.next!=null> p=p.next;//把p移到最后一个结点 p.next=newlink;//把新结点接在p所指结点的后面 } returntrue; }publicvoidlistDisplay<>{//显示链表 linkp=first;//指向第一个结点 System.out.println<"显示链表:">;while<p!=null>{ p.Display<>;//显示结点 p=p.next; }数据结构Java版第二章习题全文共13页,当前为第9页。 System.out数据结构Java版第二章习题全文共13页,当前为第9页。 }publiclinkListinterSection<linkListA,linkListB>{ linkListC; linkpa,pb; C=newlinkList<>; pa=A.first; pb=B.first;while<pa!=null>{while<pb!=null>{//和B链表的每个元素遍历if<pa.data==pb.data>//相等的时候给C链表插入pa.fd C.insertBack<pa.data>; pb=pb.next; } pa=pa.next; pb=B.first; }returnC; }}publicclassABC{publicstaticvoidmain<String[]args>{ linkListA=newlinkList<>; linkListB=newlinkList<>; linkListC=newlinkList<>; A.insertBack<10>; A.insertBack<12>; A.insertBack<15>; A.insertBack<18>; A.listDisplay<>; B.insertBack<13>; B.insertBack<10>; B.insertBack<12>; B.insertBack<18>; B.listDisplay<>; C=C.interSection<A,B>; C.listDisplay<>; }}数据结构Java版第二章习题全文共13页,当前为第10页。5.设有一个双向链表,每个结点中除有prior、data和next域外,还有一个访问频度freq域,在链表被起用之前,该域其值初始化为零。每当在链表进行一次Locata<L,x>运算后,令值为x的结点中的freq域增1,并调整表中结点的次序,使其按访问频度的递减序列排列,以便使频繁访问的结点总是靠近表头。试写一个算法满足上述要求的Locata<L,x>数据结构Java版第二章习题全文共13页,当前为第10页。五上机实习题目一元多项式的相加提示:一元多项式的表示问题:对于任意一元多项式:Pn<x>=P0+P1X1+P2X2+…+PiXi+…+PnXn可以抽象为一个由"系数-指数"对构成的线性表,且线性表中各元素的指数项是递增的:P=<<P0,0>,<P1,1>,<P2,2>,…,<Pn,n>><2>用一个单链表表示上述线性表,结点结构为:coefexpnexttypedefsturctnodecoefexpnext{floatcoef;/*系数域*/intexp;/*指数域*/structnode*next;/*指针域*/}PloyNode;package一元多项式的加法;import一元多项式的加法.Elem.Node;publicclassLinkedAdd{publicNodeadd<Eleme1,Eleme2>{Nodepre=e1.getNode<>;Nodeqre=e2.getNode<>;Nodep=pre.next;Nodeq=qre.next;Noderesult=p;while<p!=null&&q!=null>{if<p.exp<q.exp>{pre=p;p=p.next;}elseif<p.exp>q.exp>{Nodetemp=q.next;pre.next=q;q.next=p;q=temp;}else{p.coef=p.coef+q.coef;数据结构Java版第二章习题全文共13页,当前为第11页。if<p.coef==0>{数据结构Java版第二章习题全文共13页,当前为第11页。pre.next=p.next;p=pre.next;}else{pre=p;p=p.next;}qre.next=q.next;q=qre.next;}}if<q!=null>{pre.next=q;}returnresult;}publicstaticvoidmain<String[]args>{Elemnode1=newElem<>;node1.insert<7,0>;node1.insert<12,3>;node1.insert<2,8>;node1.insert<5,12>;Elemnode2=newElem<>;node2.insert<4,1>;node2.insert<6,3>;node2.insert<2,8>;node2.insert<5,20>;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论