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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

吉林省数据结构专升本习题.docx

1、吉林省数据结构专升本习题概论1、评价一个算法时间性能的主要标准是(算法的时间复杂度)。 2、算法的时间复杂度与问题的规模有关外,还与输入实例的(初始状态)有关。3、一般,将算法求解问题的输入量称为(问题的规模)。4、在选择算法时,除首先考虑正确性外,还应考虑哪三点?答:选用的算法首先应该是正确的。此外,主要考虑如下三点: 执行算法所消耗的时间; 执行算法所消耗的存储空间,其中主要考虑辅助存储空间; 算法应易于理解,易于编码,易于调试等等。6、以下四种排序方法中,不稳定的方法是(D ) A、直接插入排序B、冒泡排序C、归并排序D、直接选择排序7、按增长率由小至大的顺序排列以下各函数:2100,

2、(3/2)n,(2/3)n,nn ,n0.5 , n! ,2n ,lgn ,nlgn, n3/2 答:常见的时间复杂度按数量级递增排列,依次为: 常数0(1)、对数阶0(log2n)、线形阶0(n)、线形对数阶0(nlog2n)、平方阶0(n2)立方阶0(n3)、k次方阶0(nk)、指数阶0(2n)。显然,时间复杂度为指数阶0(2n)的算法效率极低,当n值稍大时就无法应用。先将题中的函数分成如下几类:常数阶:2100对数阶:lgnK次方阶:n0.5、n3/2指数阶 (按指数由小到大排):nlgn、(3/2)n、2n、 n!、 nn注意:(2/3)n由于底数小于1,所以是一个递减函数,其数量级应

3、小于常数阶。根据以上分析按增长率由小至大的顺序可排列如下:(2/3)n 2100 lgn n0.5 n3/2 nlgn (3/2)n 2n n! nn 8、常用的存储表示方法有哪几种? 常用的存储表示方法:顺序存储方法、链接存储方法、索引存储方法、散列存储方法。9、设有两个算法在同一机器上运行,其执行时间分别为100n2和2n,要使前者快于后者,n至少要15。二、线性表1、以下关于线性表的说法不正确的选项是(C )。 A、线性表中的数据元素可以是数字、字符、记录等不同类型。 B、线性表中包含的数据元素个数不是任意的。 C、线性表中的每个结点都有且只有一个直接前趋和直接后继。D、存在这样的线性表

4、:表中各结点都没有直接前趋和直接后继。2、线性表是一种典型的(线性)构造。3、线性表的逻辑构造特征是什么?答:对于非空的线性表: 有且仅有一个开始结点A1,没有直接前趋,有且仅有一个直接后继A2; 有且仅有一个终结结点AN,没有直接后继,有且仅有一个直接前趋AN-1; 其余的内部结点AI2IN-1都有且仅有一个直接前趋AI-1和一个AI+1。4、线性表的顺序存储构造是一种(随机存取)的存储构造。5、在顺序表中,只要知道(基地址和结点大小),就可在一样时间内求出任一结点的存储地址。 6、在等概率情况下,顺序表的插入操作要挪动(一半)结点。 7、在一个长度为n的顺序表中删除第i个元素,要挪动( n

5、-i)个元素8、假设要在第i个元素前插入一个元素,要后移(n-i+1 )个元素。9、采用(顺序)存储构造的线性表叫顺序表。10、 顺序表中逻辑上相邻的元素的物理位置(相邻 )。11、在(C )运算中,使用顺序表比链表好。 A、插入 B、删除 C、根据序号查找D、根据元素值查找12、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是(O(n) )。 13、在无头结点的单链表中,第1个结点的地址存放在头指针中,其他结点的存储地址存放在(前趋)结点的next域中。14、在(循环)链表中,从任何一结点出发都能访问到表中的所有结点。15、(双向 )链表适宜从指点结点开始,寻找直接前趋

6、的运算。16、顺序表相对于链表的优点有节省存储和随机存取。17、在链表的开始结点前设置头结点的优点是什么?答:头结点是在链表的开始结点之前附加一个结点。它具有两个优点:1、由于开始结点的位置被存放在头结点的指针域中,所以在链表的第一个位置上的操作就和在表的其它位置上操作一致,无须进展特殊处理;2、无论链表是否为空,其头指针是指向头结点的非空指针空表中头结点的指针域空,因此空表和非空表的处理也就统一了。18、(双向链表 )适宜作为经常在首尾两端操作线性表的存储构造。19、假设线性表的存储空间变化较大,那么适宜用(链)表。20、当线性表的数据变化不大,主要用于查询时,用(顺序)表比较好。21、在链

7、表中,每个结点中含8个字符,1个指针域。其中每个字符占1个字节,每个指针占4个字节。那么该结点的存储密度是(2/3)。 (1+1+4)/(8+1)=2/3 存储密度=结点数据本身所占的存储量/结点构造所占的存储总量22、链表相对于顺序表的优点有插入和删除操作方便。23、在n个结点的顺序表中插入一个结点需平均挪动n/2个结点,详细任务的挪动次数取决于表长n和插入位置i。24、在n个结点的顺序表中删除一个结点需平均挪动n1/2个结点,详细任务的挪动次数取决于表长n和删除位置i。25、尾指针是指向终端结点的指针查找时间都是O(1),用头指针来表示该链表,那么查找终端结点的时间为O(n)。补充:1、

8、顺序表上实现的根本运算:表的初始化、求表长、取表中第i个结点三种运算的时间复杂度都为O(1)。2、顺序表插入操作算法分析 问题的规模 表的长度L-length设值为n是问题的规模。 挪动结点的次数由表长n和插入位置i决定 算法的时间主要花费在for循环中的结点后移语句上。该语句的执行次数是n-i+1。 当i=n+1:挪动结点次数为0,即算法在最好时间复杂度是0(1) 当i=1:挪动结点次数为n,即算法在最坏情况下时间复杂度是0(n) 挪动结点的平均次数Eis(n) 其中: 在表中第i个位置插入一个结点的挪动次数为n-i+1 pi表示在表中第i个位置上插入一个结点的概率。不失一般性,假设在表中任

9、何合法位置1in+1上的插入结点的时机是均等的,那么 p1=p2=pn+1=1/(n+1) 因此,在等概率插入的情况下, 即在顺序表上进展插入运算,平均要挪动一半结点。3、顺序表删除操作算法分析结点的挪动次数由表长n和位置i决定: i=n时,结点的挪动次数为0,即为0(1) i=1时,结点的挪动次数为n-1,算法时间复杂度分别是0(n)挪动结点的平均次数EDE(n) 其中:删除表中第i个位置结点的挪动次数为n-i pi表示删除表中第i个位置上结点的概率。不失一般性,假设在表中任何合法位置1in上的删除结点的时机是均等的,那么 p1=p2=pn=1/n 因此,在等概率插入的情况下, 顺序表上做删

10、除运算,平均要挪动表中约一半的结点,平均时间复杂度也是0(n)。4、单链表的运算:头插法建表、尾插法建表、尾插法建带头结点的单链表三个算法的时间复杂度均为0(n)。5、单链表的查找运算:按序号查找、按值查找其平均时间复杂度为O(n)。6、单链表的插入运算:算法的时间主要消耗在查找操作GetNode上,故时间复杂度亦为O(n)。7、单链表的删除运算:算法的时间复杂度也是On。8、循环链表:假设在单链表或头指针表示的单循环表上做这种链接操作,都需要遍历第一个链表,找到结点an,然后将结点b1链到an的后面,其执行时间是O(n)。假设在尾指针表示的单循环链表上实现,那么只需修改指针,无须遍历,其执行

11、时间是O(1)。9、双向链表的前插和删除本结点操作:两个算法的时间复杂度均为O(1)。10、结点ai 的存储地址 不失一般性,设线性表中所有结点的类型一样,那么每个结点所占用存储空间大小亦一样。假设表中每个结点占用c个存储单元,其中第一个单元的存储地址那么是该结点的存储地址,并设表中开始结点a1的存储地址简称为基地址是LOCa1,那么结点ai的存储地址LOCai可通过下式计算:LOCai= LOCa1+i-1*c 1in顺序表 链表基于空间考虑分配方式静态分配。程序执行之前必须明确规定存储规模。假设线性表长度n变化较大,那么存储规模难于预先确定估计过大将造成空间浪费,估计太小又将使空间溢出时机

12、增多。动态分配只要内存空间尚有空闲,就不会产生溢出。因此,当线性表的长度变化较大,难以估计其存储规模时,以采用动态链表作为存储构造为好。存储密度为1。当线性表的长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表作为存储构造。top=maxsize-1 )。5、向一个栈顶指针为HS的链栈中将一个S指针所指的结点入栈,执行(S-next=HS-next;HS=s; )。 6、假设一个栈的入栈序列是1,2,3,n,其输出序列是p1,p2,p3,pn,假设p1=n,那么pi=(n-i+1 )。 7、在栈中,可进展插入和删除操作的一端称(栈顶 )。8、在栈的出栈操作中,要先判断栈是否空,

13、否那么会产生(下溢 )现象。9、当程序中同时使用(2 )个栈时,让它们共享同一向量空间可减少上溢的发生。10、栈的特点是(后进先出 )。当问题满足(先进后出)原那么时可使用队列作数据构造。当问题满足(后进先出)原那么时可使用栈作数据构造。11、由于链栈的操作只在链表头部进展,所以没有必要设置(头 )结点。12、假设内存空间充足,(链 )栈可不定义栈满运算。13、一个队列的入列序列是1 2 3 4,那么队列的输出序列是(1 2 3 4)。 14、队列与一般的线性表的区别在于(运算是否受限制 )。15、“假上溢现象会出如今(顺序队列 )中。16、在一个链队中,假设F和R分别是队首和队尾指针,那么删

14、除一个结点的运算是(F=F-next; )。 17、假设以数组sequm存放循环队列,同时设变量rear和quelen分别指示循环队列中队尾元素的位置和内含的元素个数,那么判别队满的条件是(quelen=m )。18、为了抑制“假上溢,一般可用(循环 )向量存储队列中的元素。19、在顺序队列中,假设队列非空,(队头 )指针指向队头元素,队尾指针指向队尾元素的下一位置。20、循环队列采用的是(顺序)存储构造。21、设F和R是循环队列的队头指针和队尾指针,那么判断队空的条件是(F=R )。22、在(队列中只有一个元素 )情况下,链队列的出队操作需要修改尾指针。23、说出解决循环队列中,判断队空和队

15、满情况的三种方法。答: 另设一布尔变量以区别队列的空和满; 少用一个元素的空间,约定入队前,测试尾指针在循环意义下加1后是否等于头指针,假设相等那么认为队满注意:REAR所指的单元始终为空; 使用一个计数器记录队列中元素的总数实际上是队列长度。24、设计一个判别表达式中左、右括号是否配对出现的算法,采用(线性表的顺序存储构造)数据构造最正确。25、在计算递归函数时,如不使用递归过程,那么一般情况下必须借助于(栈 )数据构造。26、计算机在运行递归程序时,要用到(系统)提供的栈。27、什么是递归算法?设计递归算法要分哪两个步骤?答:所谓递归是指:假设在一个函数、过程或者数据构造定义的内部又直接或

16、间接出现有定义本身的应用,那么称它们是递归的,或者是递归定义的。递归算法的设计步骤第一步骤递归步骤:将规模较大的原问题分解为一个或多个规模更小、但具有类似于原问题特性的子问题,即较大的问题递归地用较小的子问题来描绘,解原问题的方法同样可用来解这些子问题;第二步骤:确定一个或多个无须分解、可直接求解的最小子问题称为递归的终止条件。28、在栈构造中,允许插入、删除的这一端为栈顶Top,另一端称为栈底Bottom。29、在有n个元素的栈中,进栈和退栈操作的时间复杂度为O(1)和O(1)。30、在队列构造中,允许插入的一端称为队尾,允许删除的一端称为队头。31、设长度为n的链队列用单循环链表,假设只设

17、头指针,那么入队和出队操作的时间复杂度分别为O(n)和O(1);假设只设尾指针,那么入队和出队操作的时间复杂度分别为O(1)和O(1)。32、设循环向量有m个元素,循环向量中有一个循环队列。在循环队列中,设头指针front指向队头元素,队尾指针指向队尾元素后的一个空闲元素。1在循环队列中,队空标志为front=rear;队满标志为front=(rear+1)%QueueSize。2当rear=front时,队列长度为rear-front;当rearfront;队列长度是rear+Queue-front;33、设将整数1,2,3,4依次进栈,但只要出栈时栈非空,那么可将出栈操作按任何次序夹入其中

18、,请答复下述问题:(1)假设入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),那么出栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈)?(2)能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。(3)请分析 1,2 ,3 ,4 的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。答:(1)出栈序列为:1324 (2)不能得到1423序列。因为要得到14的出栈序列,那么应做Push(1),Pop(),Push(2),Push (3),Push(4),Pop()。这样

19、,3在栈顶,2在栈底,所以不能得到23的出栈序列。能得到1432的出栈序列。详细操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。(3)在1,2 ,3 ,4 的24种排列中,可通过相应入出栈操作得到的序列是: 1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321 不能得到的序列是:1423,2413,3124,3142,3412,4123,4132,4213,4231,431234、指出下述程序段的功能是什么?(1) void Demo1

20、(SeqStack *S)int i; arr64 ; n=0 ;while ( StackEmpty(S) arrn+=Pop(S);for (i=0, i n; i+) Push(S, arri); /Demo1答:程序段的功能是将一栈中的元素按反序重新排列,也就是原来在栈顶的元素放到栈底,栈底的元素放到栈顶。此栈中元素个数限制在64个以内。(2) SeqStack S1, S2, tmp;DataType x;./假设栈tmp和S2已做过初始化while ( ! StackEmpty (&S1)x=Pop(&S1) ;Push(&tmp,x);while ( ! StackEmpty (

21、&tmp) )x=Pop( &tmp);Push( &S1,x);Push( &S2, x);答:程序段的功能是利用tmp栈将一个非空栈s1的所有元素按原样复制到一个栈s2当中去。(3) void Demo2( SeqStack *S, int m) / 设DataType 为int 型SeqStack T; int i;InitStack (&T);while (! StackEmpty( S)if( i=Pop(S) !=m) Push( &T,i);while (! StackEmpty( &T)i=Pop(&T); Push(S,i);答:程序段的功能是利用栈T,将一个非空栈S中值等于

22、m的元素全部删去。(4)void Demo3( CirQueue *Q) / 设DataType 为int 型int x; SeqStack S;InitStack( &S);while (! QueueEmpty( Q )x=DeQueue( Q); Push( &S,x);while (! StackEmpty( &s) x=Pop(&S); EnQueue( Q,x );/ Demo3答:程序段的功能是将一个循环队列Q经过S栈的处理,反向排列,原来的队头变成队尾,原来的队尾变成队头。(5) CirQueue Q1, Q2; / 设DataType 为int 型int x, i , n=

23、0;. / 设Q1已有内容, Q2已初始化过while ( ! QueueEmpty( &Q1) ) x=DeQueue( &Q1 ) ; EnQueue(&Q2, x); n+;for (i=0; i n; i+) x=DeQueue(&Q2) ;EnQueue( &Q1, x) ; EnQueue( &Q2, x);答:这段程序的功能是将队列1的所有元素复制到队列2中去,但其执行过程是先把队列1的元素全部出队,进入队列2,然后再把队列2的元素复制到队列1中。补充:1、 顺序栈的根本操作 前提条件: 设S是SeqStack类型的指针变量。假设栈底位置在向量的低端,即S-data0是栈底元素。

24、1 进栈操作 进栈时,需要将S-top加1 注意: S-top=StackSize-1表示栈满上溢现象-当栈满时,再做进栈运算产生空间溢出的现象。 上溢是一种出错状态,应设法防止。2 退栈操作 退栈时,需将S-top减1 注意:S-top0表示空栈 下溢现象当栈空时,做退栈运算产生的溢出现象。下溢是正常现象,常用作程序控制转移的条件。2、顺序队列中的溢出现象 下溢现象 当队列为空时,做出队运算产生的溢出现象。“下溢是正常现象,常用作程序控制转移的条件。 真上溢现象当队列满时,做进栈运算产生空间溢出的现象。“真上溢是一种出错状态,应设法防止。 假上溢现象由于入队和出队操作中,头尾指针只增加不减小

25、,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为假上溢现象。为充分利用向量空间,抑制假上溢现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列Circular Queue。四、串1、串是一种特殊的线性表,其特殊性表达在(数据元素是一个字符 )。 2、有两个串P和Q,求P和Q中首此出现的位置的运算称 (求子串 )。 3、设串s1=ABCDEFG,s2=PQRST,函数con(x,y)返回x和y串的连接串,subs(s,I,j)返回串s的从序号i的

26、字符开始的j个字符组成的子串,len(s)返回串s的长度,那么con(subs(s1,2,len(s2),subs(s1,len(s2),2)的结果串是( D)。 A、BCDEF B、BCDEFG C、BCPQRST D、BCDEFEF4、在空串和空格串中,长度不为0的是(空格串 )。5、在串的形式匹配中,一般(有效位移的个数小于合法位移的个数 )。 6、在顺序串中,根据空间分配方式的不同,可分为(静态分配和动态分配 )。 7、按存储构造不同,串可分为(顺序串和链串 )。通常在程序中使用的串可分为:串变量和串常量。8、在C语言中,以字符(#CONTENT# )表示串值的终结。9、在链串中,为了进步存储密度,应该增大(结点的大小 ).10、假设每个字符占1个字节,假设结点大小为4的链串的存储密度为50%,那么其每个指针占( 4)个字节。11、顺序串上的子串定位运算算法分析: 该算法最坏情况下的时间复杂度为O(n-m+1)m)。 分析:当目的串和形式串分别是an-1b和am-1b时,对所有n-m+1个合法的位移,均要比较m个字符才能确定该位移是否为有效位移,因此所需比较字符的总次数为n-m+1m。12、串String是零个或多个字符组成的有限序列。一般记为S=a1a2an。13、长度为零的串称为空串Empty String,它不包

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

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