1、3(线性表的顺序存储及链式存储情况下,其不同和优缺点比较,及其各自适用的场合。单链表中设置头指针、循环链表中设置尾指针而不设置头指针的各自好处;4(能分析所写算法的时间和空间复杂度。分析:线性表是一种最简单的数据结构,在线性表方面,主要考查线性表的定义和基本操作、线性表的实现。在线性表实现方面,要掌握的是线性表的存储结构,包括顺序存储结构和链式存储结构,特别是链式存储结构,是考查的重点。另外,还要掌握线性表的基本应用。线性表一章在线性结构的学习乃至整个数据结构学科的学习中,其作用都是不可低估的。线性表一章小的知识点比较少,一般会出一个综合题,并且容易和第三章、第九章和第十章的内容结合来考,注意
2、对基本知识的理解,能够利用书上的理论解决具体问题。学习过程中要注意多积累,多看、多写一些相关算法。三、考研真题 (一)选择题 近几年第2章没有考选择题,只有两个计算时间复杂度的题目,因为此章主要是线性表的操作,而且又是这门课的一个基础,考综合题的可能性比较大,可以和第3章、第9章和第10章的内容结合来出题。1(11年)设n是描述问题规模的非负整数,下面程序片段的时间复杂度是( A )。x=2;while(x=0)的阶乘的算法如下,其时间复杂度是( B )。int fact(int n) if(nk时,指针p随着每次遍历,也向前移动一个结点。当遍历完成时,p或者指向表头结点,或者指向链表中倒数第
3、k个位置上的结点。(3)算法描述:nt locate(Linklist list, int k) ip1=list-link;p=list;i=1;while(p1) p1=p1-i+;if(ik)p=p-next; /如果ik,则p也后移 if(p=list)return 0; /链表没有k个结点 else printf(“%n”,p-data);return 1;2.(10年)设将n(n,1)个整数存放到一维数组R中,试设计一个在时间和空间两方面尽可能有效的算法,将R中保有的序列循环左移P(0,P,n)个位置,即将R中的数据由(X0 X1 Xn-1)变换为(Xp Xp+1 Xn-1 X0
4、X1 Xp-1)要求:(1)给出算法的基本设计思想。(2)根据设计思想,采用C或C+或JAVA语言表述算法,关键之处给出注释。(3)说明你所设计算法的时间复杂度和空间复杂度 此题考查的是数组的操作,线性表的顺序存储的核心就是数组,因此此题实质上是考查的线性表的顺序存储的操作及其应用。做此题时要考虑算法的时间和空间复杂度。解法一:(1)算法的基本设计思想:可以将这个问题看做是把数组ab转化成数组ba(a代表数-1组的前p个元素,b代表数组中余下的n-p个元素),先将a逆置得到ab,再将b逆置得-1-1-1-1-1-1-1到ab,最后将整个ab逆置得到(ab)=ba。设reverse函数执行将数组
5、元素逆置的操作,对abcdefgh向左循环移动3(p=3)个位置的过程如下:reverse(0,p-1)得到cbadefgh;reverse(p,n-1)得到cbahgfde;reverse(0,n-1)得到defghabc。注:reverse中,两个参数分别表示数组中待转换元素的始末位置。(2)算法描述:void reverse(int R, int low, int high) /将数组中从low到high的元素逆置 int temp;for(i=0;i=1)的生序列S,处在第?L/2?个位置的数称为S的中位数,例如,若序列S1=(11,13,15,17,19),则S1的中位数是15,两个
6、序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现在有两个等长升序序列A和B,试设计一个在时间和空间方面都尽可能高效的算法,找出两个序列A和B的中位数。(2)根据设计思想,采用C或C+或JAVA语言描述算法,关键之处给出注释。此题考查线性表的顺序存储,主要是线性表的基本操作的应用。做此题时要把握算法的效率。(1)算法的基本设计思想如下:分别求出序列A 和B的中位数,设为a和b,求序列A和B的中位数过程如下:1)若a=b,则a或b即为所求中位数,算法结束;2)若ab,则舍弃序列A中较大的一半,同时舍弃序列B中较小的一半,要求舍弃
7、的长度相等;在保留的两个升序序列中,重复过程1)-3),直到两个序列中只含一个元素时为止,较小者即为所求的中位数。(2)算法实现如下:int M_search(int A,int B.int n) int s1=0,d1=n-1,m1,s2=0,d2=n-1,m2;/分别表示序列A和B的首位数、末尾数和中位数 While(s1!=d1|s2!=d2) m1=(s1+d1)/2;m2=(s2+d2)/2;if(Am1=Bm2) return Am1;else if(Am1Bm2) if(s1+d1)%2=0 s1=m1;d2=m2;elses1=m1+1;d1=m1;s2=m2;elsed1=m1+1;return As1len2) long=str1- short=str2- k=len1-len2;else long=str2- short=str1- k=len2-len1;while(k) long=long- k-;while(long) if(long=short) return long;else
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1