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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构C语言版》习题指导与解答Word下载.docx

1、第2大题略习题二解答1.填空表长的一半,表长,该元素在表中的位置144第5个元素的存储地址=第1个元素的存储地址(71)4=144p-next=(p-next)-next为了运算方便(1),(n)在p所指结点后插入一个新结点只需修改指针,所以时间复杂度为(1);而在给定值为x的结点后插入一个新结点需要先查找值为x的结点,所以时间复杂度为(n)。(6)两个,直接后继,直接前驱,尾结点,头结点.(7)顺序2.选择题A顺序存储的特点是“逻辑上相邻,物理上也相邻”,所以无需存储元素间的关系,故存储密度大。D线性表的链接存储是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以连续,也可以不连续,

2、甚至可以零散分布在内存中任意位置。C因为有prior指针A因为单链表属于顺序存储结构BB(7)B(8)B(9)B(10)BLoc(a6)=Loc(a1)+(6-1)*5=90+10=1003.简答题(1)顺序结构存储时,相邻数据元素的存放地址也相邻,即逻辑结构和存储结构是统一的,要求内存中存储单元的地址必须是连续的。优点:一般情况下,存储密度大,存储空间利用率高。缺点:a.在做插入和删除操作时,需移动大量元素;b.由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;c.表的容量难以扩充。链式结构存储时,相邻数据元素可随意存放,所占空间分为两部分,一部分存放结点值,另一部分存放

3、表示结点间关系的指针。插入和删除元素时很方便,使用灵活。存储密度小,存储空间利用率低。(2)带头结点的单链表和不带头结点的单链表的区别主要体现在其结构上和算法操作上。在结构上,带头结点的单链表,不管链表是否为空,均含有一个头结点,不带头结点的单链表不含头结点。在操作上,带头结点的单链表的初始化为申请一个头结点。无论插入或删除的位置是地第一个结点还是其他结点,算法步骤都相同。不带头结点的单链表,其算法步骤要分别考虑插入或删除的位置是第一个结点还是其他结点。因为两种情况的算法步骤不同。4算法设计从数组的两端向中间比较,设置两个变量i和j,初始时i=0,j=n-1,若Ai为偶数并且Aj为奇数,则将A

4、i与Aj交换。具体算法如下:voidadjust(intA,n)i=0;j=n-1;while(ij)while(Ai%2!=0)i+;while(Aj%2=0)j-;if(ij)swap(Ai,Aj);/*swap是交换两个元素*/分析算法,两层循环将数组扫描一遍,所以,时间复杂度为(n)。顺序表的逆置,即是将对称元素交换,设顺序表的长度为n,则将表中第i个元素与第n-i-1个元素相交换。voidreverse(elemtyped,intn)for(i=0;inext=C;/创建空循环链表C存放字符D=(Linklist)malloc(sizeof(Lnode);D-next=D;/创建空循

5、环链表D存放数字p=A;q=p-next;while(q)if(q-data=A)&(q-data=a)&=z)p-next=q-q-next=C-next=q;elseif(q-=0)&=9)next=D-elsep=q;p-next=A;R=A;从头到尾扫描单链表,若当前结点的元素值与后继结点的元素值不相等,则指针后移;否则删除该后继结点。voiddel(LinklistA)p=A-while(p-next)if(p-data=p-next-data)q=p-deleteq;elsep=p-因为是在有序单链表上的操作,所以,要充分利用其有序性。在单链表中查找第一个大于mink的结点和第一个

6、小于maxk的结点,再将二者间的所有结点删除。voiddelbtween(LinklistA,intmink,intmaxk)p=A;next&=mink)p=p-while(q-maxk)x=q-q=x;习题三解答23,1003H顺序存储结构和链接存储结构(或顺序栈和链栈),栈顶指针top=-1和top=NULL,栈顶指针top等于数组的长度和内存无可用空间后进先出,先进先出,对插入和删除操作限定的位置不同假溢出(1),(n)在带头指针的循环链表中,出队即是删除开始结点,这只需修改相应指针;入队即是在终端结点的后面插入一个结点,这需要从头指针开始查找终端结点的地址。D此时,输出序列一定是输入

7、序列的逆序。C解题技巧:在输出序列中任意元素后面不能出现比该元素小并且是升序(指的是元素的序号)的两个元素。B每个右括号与它前面的最后一个没有匹配的左括号配对,因此具有后进先出性。C栈和队列的逻辑结构都是线性的,都有顺序存储和链接存储,有可能包含的运算不一样,但不是主要区别,任何数据结构在针对具体问题时包含的运算都可能不同。A两栈共享空间首先两个栈是相向增长的,栈底应该分别指向两个栈中的第一个元素的位置,并注意C+中的数组下标是从0开始的。(6)C队列长度为(rear-front+20)mod20=15(8)C(9)A递归算法里会用到递归工作栈(10)B先进先出的特性3.问答题(1)栈是一种先

8、进后出的线性表,栈的插入和删除操作都只能在栈顶进行,队列是一种先进先出的线性表,队列的插入只能在队尾进行,队列的删除只能在队头进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作。(2)因为链栈只在链头插入和删除结点,不可能在链表中间插入和删除结点,算法实现很简单,所以一般不设置头结点。4.算法设计(1)出队操作是在循环链表的头部进行,相当于删除开始结点,而入队操作是在循环链表的尾部进行,相当于在终端结点之后插入一个结点。由于循环链表不带头结点,需要处理空表的特殊情况。入队算法如下:voidEnqueue(*rear,Elemtypex)s=new;S-data=x;if(rear=N

9、ULL)rear=s;rear-next=s;elses-next=rear-=s;rear=s;出队算法如下:ElemtypeDequeue(*rear)if(rear=NULL)throw”underflow”;elses=rear-if(s=rear)resr=NULL;elserear-next=s-free(s);(2)算法思想:利用栈和队列的操作特点,可以先将队列中所有元素出队并入栈,然后再将栈中所有元素出栈并入队即可。voidInverse(StackS,QueueQ)while(!EmptyQueue(Q)a=DeQueue(Q);Push(S,a);while(!EmptyS

10、tack(S)a=Pop(S);EnQueue(Q,a);习题四解答数据元素的类型是一个字符长度相同且对应位置的字符相等例如abc,bca。14模式匹配(5)由空格字符(ASCII值32)所组成的字符串,空格个数(6)该串所包含的的字符的个数(7)a.21b.1c.DataBaseStructureCoursed.DataCoursee.Structuref.6g.DataBaseCourse2.简答题(1)不含任何字符的串称为空串,其长度为0。仅含有空格字符的串称为空格串,其长度为串中空格字符的个数。空格符可用来分割一般的字符,便于人们识别和阅读,但计算串长时应包括这些空格符。空串在串处理中

11、可作为任意串的子串。用引号(数据结构教学中通常用单引号,而C语言中用双引号)括起来的字符序列称为串常量,其串值是常量。串值可以变化的量称为串变量。串中任意个连续的字符组成的子序列被称为该串的子串。包含子串的串又被称为该子串的主串。子串在主串中第一次出现时的第一个字符的位置称子串在主串中的位置。串变量与其它变量一样,要用名字引用其值,串变量的名字也是标识符,串变量的值可以修改。(2)concat(replace(S1,substr(S1,length(S2),length(S3),S3),substr(S4,index(S2,8),length(S2)=concat(replace(S1,sub

12、str(S1,4,3),S3),substr(S4,2,4)=concat(replace(S1,DEF,S3),1234)=concat(ABC#G,1234)=ABC#G1234(3)j123456789101112串abnextj3.算法设计先判断串S中要删除的内容是否存在,若存在,则将第i+j-1之后的字符前移j个位置。voidDele(chars,inti,intj)/*数组s的0号单元存放串的长度*/if(i+js0)for(k=i;k0;i-)if(si=ch)for(j=i+1;j=s0;j+)sj-1=sj;s0-;(3)两个指针,一个从头开始,一个从为开始依次交换直至开头小

13、于结尾时候停止。#includestringvoidmain()intstrbegin,strend;stringstr;chartmp;charname100=abcdeabc;str=name;printf(“%sn”,str);strbegin=0;strstrend=str.size()-1;while(strbegin=0&ch=9)/*拼数*/num=num10+ch-;ai+=num;if(ch!=#)/*若拼数中输入了#,则不再输入*/scanf(“%c”,&elsescanf(“%c”,&ch);/*输入非数字且非时,继续输入字符*/printf(“共有%d个整数,它们是:n

14、”,i);for(j=;i;printf(“%6d”,aj);if(j+1)10=0)printf(“n”);/*每10个数输出在一行上*/算法讨论假定字符串中的数均不超过32767,否则,需用长整型数组及变量。(5)本题是模式匹配问题。将文本行看作主串,先用子串定位函数确定子串在主串中的位置,如子串在主串中,则计数,并将子串后的部分主串当作新主串,继续查子串是否在主串中,如此下去,直到子串不在主串中为止。下面用串的基本操作编写求解本题的算法。并给出子串定位函数Index。intIndex(StringS,StringT)/*子串定位函数,成功返回子串T的第一字符在S中的位置,否则返回0*/n

15、=StringLength(S);m=StringLength(T);i=1;=n-m+1)/*当i加上T的长度超过串S的长度时结束*/StringAssign(sub,SubString(S,i,m);/*取字串sub*/if(StringEqual(sub,T)!elsereturni;return0;/*S中不存在与T相等的子串*/intNumberofSub(Stringmain,Stringsub)/*某一个不包含空格的子串在文本行中出现的次数*/inti=0,j;intn=StringLength(main),m=StringLength(sub);j=Index(main,sub

16、);while(j!=0)i+;StringAssign(main,SubString(main,j+m,n-(j+m)+1);/*新主串*/n=StringLength(main);/*求新主串长度*/returni;(6)略习题五解答1. 填空题对称,三角,对角k=i*(i-1)/2+j-1n(n+1)*n/2(n+1)*n/2稀疏行号,列号,值nABCDE= (a,b) b (c,d) (d)2. 选择题ADloc(a22)=loc(a00)+(2-0)*4+(2-0)*2=1020DACCAADD习题六解答2. 度,孩子,双亲2h-1,2h-1最小结点个数的情况是第1层有1个结点,其他

17、层上都只有2个结点。2i-1,(n+1)/2,(n-1)/2设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。64128个结点的完全二叉树中最后一个结点的编号为128,其双亲即最后一个分支结点的编号为64,也就是说,从编号65开始均为叶子。21根据二叉树性质3的证明过程,有n0=n2+2n3+3n4+1(n0、n2、n3、n4分别为叶子结点、度为2、度为3和度为4的结点的个数)。FGDBHECA根据前序遍历序列和中序遍历序列将该二叉树构造出来。3n,n-1,

18、n-1,n+2n-1,2n-1n-1个分支结点是经过n-1次合并后得到的。n-1n-1因为根结点没有双亲(11)完全二叉树,斜树(12)队列D结点B一共有5个孩子B此题注意是序列正好相反,则左斜树和右斜树均满足条件。D叶子结点没有左右孩子,所以它的左右孩子域均是线索D满二叉树中没有度为1的结点,所以有m个叶子结点,则根据性质3可知度为2的结点个数为m-1。A三种遍历次序均是先左子树后右子树。DC完全二叉树中左子树的深度与右子树的深度相等或大1C因为0是00的前缀,1是11的前缀。B因为线索就是用来记录某结点的前驱或后继的。(11)C因为有n+1个空链域来作为线索(12)B(13)D(14)D(

19、15)D因为这些分支结点共有N1+2*N2+m*Nm个指针域,其中有N1+N2+Nm-1个指针指向分支结点,所以余下的指针指向的是叶子结点。(16)A森林的第1棵树形成根及左子树3.【证明】因为在满二叉树中没有度为1的结点,所以有:n=n0+n2设B为树中分枝数,则n=B+1所以B=n0+n2-1再由二叉树性质:n0=n2+1代入上式有:B=n0+n0-1-1=2(n0-1)4.(1)以各字符出现的次数作为叶子结点的权值构造的哈夫曼编码树如下图所示。其带权路径长度=25+15+34+53+92+43+43+72=98,所以,该字符串的编码长度至少为98位。(2)1)已知深度为k的二叉树最多有2k-1个结点(K1),29-1892lchild);n+;rchild);本算法的要求与前序遍历算法既有相同之处,又有不同之处。相同之处是打印次序均为前序,不同之处是此处不是打印每个结点的值,而是打印出其中的叶子结点,即为有条件打印。为此,将前序遍历算法中的访问操作

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

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