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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构C语言版习题解答DOCWord格式.docx

1、否则从后向前先移动数据,找到合适的位置插入。Status Insert_SqList(SqList &La,int x)/ 把x 插入递增有序表 La 中if(La.le ngth=La.listsize) return ERROR;for(i=La.le ngth-1;La.elemix&i=0;i-)La.elemi+1=La.elemi;La.elemi+1=x;La.le ngth+;return OK;/l nsert_SqList2.5试写一个算法,实现顺序表的就地逆置,即在原表的存储空间将线性表(a1,a 2, ., a n-1, a n)逆置为(a n,a n-1 ,., a

2、2,a 1)/思路就是两个指示变量i,j同时分别从顺序表的开始和结尾处相向改变void reverse(SqList &A)/顺序表的就地逆置ElemT ype p;for(i=1,j=A.le ngth;ivj;i+,j-)/A.elemiA.elemj;p=A.elemi;A.elemi=A.elemj;A.elemj=p;/reverse2.7已知线性表L采用顺序存储结构存放,对两种不同情况分别写出算法,删除 L中多余的元素,使得L中没有重复元素:(1)L中数据元素无序排列;(2)L中 数据元素非递减有序排列。void Delete_SameElem(SqL ink &L,int L.l

3、e ngth)/内层循环移动参数,中层循环寻找相同元,外层循环遍历整个表int i=0; int j=i+1; int len gth=L.le ngth;while (ilength)for (j=i+1;jlength; j+)if (L.EIemj=L.EIemi)for (k=j; kL.EIemi) break;第二小问添加此句 /end for /end while /end functoion2.8已知线性表L采用链式结构存放。对两种不同情况分别写出算法,删除 L中 值相同的多余元素,使得L中没有重复元素:(2)L 中数据元素非递减有序排列。(1) L中数据元素无序排列;由于是无

4、序排列,需要线性表中每个元素都要相互进行比较。Status ListDelete ( Linklist &L )/L 是带头结点的线性表ElemT ype *p ,*q;p=L-next;q=p- / 设定 p变化较慢, q变化较快while( p-n ext)while(q) if(p-data匸q-data)q=q-n ext;elsep-n ext=q;/else/whilep=p-/开始后一结点的寻找return OK ;/ListDelete(2)L中数据元素非递减有序排列。由于是有序的,遍历一次线性表就行了Status ListDelete (Li nkList &L)p=L-n

5、ext)if (p-data!=q-data) /和第一问不同地方/ifelse data=q-/多个连续的重复值next=q;p=q;/删除值重复的结点,并修改相应的指针2.9设有两个非递减有序的单链表 A,B。请写出算法,将A和B就地归并成一个按元素值非递增有序的单链表。/将合并逆置后的结果放在 C表中,并删除B表Status ListMergeO pp ose_L(L in kList &A,L in kList & B,Li nkList &C)Lin kList pa,p b,qa,qb;pa=A;p b=B;qa=pa; / 保存pa的前驱指针qb=pb; /保存pb的前驱指针 p

6、a=pa-pb=pb-A- next=NULL;C=A;while( pa&p b)if(p a-data pa=pa-/将当前最小结点插入 A表表头qa-n ext=A- A-n ext=qa;qb-n ext=qb;while( pa)n ext=A -while( pb) pb=pb-pb=B;free( pb);2.13设以带头结点的双向循环链表表示的线性表 L=(a1,a2,a3,.,a n)。试写一时间复杂度为0(n)的算法,将L改造为L=(ai,a3,.,a n,.,a 4,a2)。void Reform(DuLinkedList &L)/ 按1,3,5,4,2的顺序重排双向循环

7、链表 L中的所有结点p=L.n ext;n ext!=L&n ext- =L)n ext=p- /p指向最后一个奇数结点next=L) /结点个数是奇数,使最后一个奇数结点 next指向最后一个偶数结点n ext=L-p re-pre;else/结点个数是偶数,使最后一个奇数结点 n ext指向最后一个偶数结点p re; /此时p指向最后一个偶数结点 pre!next=L;/最后一个结点next指向头结点调整了 next链的结构,此时pre链仍为原状 调整pre链的结构for(p=L;=L ;n ext) p-pre=p;L- /头结点的pre指向a2结点/Reform第三章栈和队列3.6试写

8、一个算法,识别依次读入的一个以砂结束符的字符序列是否为形如“序列1&序列2”模式的字符序列。其中,序列1和序列2中都不包含字符 & ,且序列2是序列1的逆序。例如,“ a+b&b+a是属于该模式的字符序列,而“ 1 + 3&31”则不是。算法:int SeqReverse()/判断输入的字符串中 &前和&后部分是否为逆串,是则返回1,否则返回0Ini tStack(s);while(e=getchar()!=)if(e= return 0;/不允许在& 之前岀现 push(s,e);/序列1输入完毕while( (e=getchar()!if(StackE mp ty(s)pop (s,c);

9、if(e!=c)if(!StackE mp ty(s)/序列1元素还有剩余return 1;/lsReverse3.7假设一个算术表达式中可以包含三种符号: 圆括号“(”和“)”、方括号“”和“”、花括号“ ”和“ ”,且这三种括号可按任意次序嵌套使用。编写判别 给定表达式中所含的括号是否正确配对的算法 (已知表达式已存入数据元素为字符的顺序表中)。算法:Status BracketTest(char *str)/判别表达式中三种括号是否匹配 for(p=str;* p;p+)if(*p=( | * p=T | *p=push(s,* p);elseif(* P= ) | * P= ) ret

10、urn ERROR;if(* p=)c!) if(* p=T&) if(* p=) /if/forStackE mp ty(s) return OK; /必须与当前栈顶括号匹配/进栈的符号还有剩余, Error/BracketTest3.8设表达式由单字母变量、双目运算符和圆括号组成(如 :“(a*(b+c)-d)/e )”。试写一个算法,将一个书写正确的表达式转换为逆波兰式。1.遇到数字直接发送 2.遇到(直接入栈 3遇到)则将栈内元素发送直至遇到 (4.栈空则直接入栈5.栈非空时若优先级大于栈内则入栈,否则栈内元素出栈int Ran kOfO perator(char c)switch(c

11、)case#:return+1 1 .-1;0;case case case 1*1/return 2;intPrecede( char c, char ch) retur n Ran kOfO perator(c)Ra nkOfO perator(ch);break ;default : if (IsEmpty(s)p ush(s,* exp);suffixi+=pop( s);exp -;/与后面的exp+相抵消,使得栈内优先级大于等于栈外的都出栈 /end switch /end else exp +;while (!lsEmpty(s) suffixi+=pop(s); suffixi

12、=0;3.10假设以带头结点的单循环链表表示队列,只设一个尾指针指向队尾元素,不设头指针。试编写相应的队列初始化、入队和出队算法(在出队算法中要传回 队头元素的值)要点:定义好数据类型,带头结点的单循环链表,只有尾指针,注意删除元素时 只有一个元素的特殊性typ edef int DataT ypestruct Node DataT ype data; Node * next;struct CycleListQueue Node * tail;void In itCycleListQueue(CycleListQueue&L)L.tail = new Node;L.tail-n ext = L

13、.tail;void En terQueue(CycleListQueue&L,DataT ype value) Node* p = new Node;data = value;n ext = L.tail-n ext = p;L.tail = p;voidifDep arQueue(CycleListQueue&L,DataT ype & d) (L.tail-n ext != L.tail-Node *p = L.tail-n ext = p-d = p-data;if (p=L.tail) L.tail=p-delete p;假设将循环队列定义为:以rear和length分别指示队尾元素

14、和队列长度。return d;3.11试给出此循环队列的队满条件,并写出相应的入队和出队算法(在出队算法中要 传递回队头元素的值)。此循环队列的队满条件:Q.le ngth=MAXQSIZE;入队算法:Status EnCyQueue(CyQueue &Q,int x)/ 带 length 域的循环队列入队算法 if(Q.le ngth=MAXSIZE) return OVERFLOW;Q.rear=(Q.rea 叶1)%MAXSIZE;Q.baseQ.rear=x; /rear 指向队尾元素Q.le ngth+;/E nCyQueue出队算法:Status DeCyQueue(CyQueue

15、 &Q,int &x)/带length域的循环队列岀队算法, 用x返回队头元素的值if(Q.length=0) return Error;/ 空队列,错误head=(Q.rear-Q.le ngth+1)%MAXSIZE; /head 指向队头x=Q.basehead;Q.le ngth-;/DeCyQueue3.12试写一个算法:判别读入的一个以为结束符的字符序列是否是“回文” (所谓“回文”是指正读和反读都相同的字符序列,如“ xxyzyxx ”是回文,而“abcab”则不是回文)。Status Test()/判别输入的字符串是否回文序列 ,是则返回1,否则返回0In itStack(S)

16、;Ini tQueue(Q);while(c=getchar()!Push(S,c);EnQueue(Q,c); /同时使用栈和队列两种结构while(!StackE mp ty(S)Pop (S,a);DeQueue(Q,b);if(a!=b) return ERROR;/ Test第五章多维数组5.4设有一个准对角矩阵ra11 a12a 21 a22a33 a34a43 a44按以下方式存于一维数组 B4m中:a11a12a21a22a33a34a43.aija2m-1,2ma2m,2m6k4m-2 4m-10 1 2 3 4 5写出由一对下标(i,j)求k的转换公式。因为i行前有2(i-

17、1)个元素。现考虑i行情况,当j是奇数,i行有1个元素,k=2(i-1)+1-1=2(i-1); 否则i行有2个元素,k=2(i-1)+2-1=2i-1。故:1)腐奇数 k=bni /为翩5.5已知稀疏矩阵A4X 5如下:(1)用三元组表作为存储结构,绘出相应的三元组表示意图;(2)用十字链表作为存储结构,绘出相应的十字链表示意图。(1)三元组表:ijv12547 (2)十字链表2 1 4data);lchild) En Queue(Q, p-lchild);rchild) En Queue(Q, p- rchild);return Ok;/LevelOrderTraverse6.19写出判断

18、两棵给定二叉树是否相似的算法。(注:两棵二叉树B1和B2相似是指:B1和B2皆空,或者皆不空且B1的左、右子树和B2的左、右子树分别相似。采用递归进行比较判断bool BiTreeSimilar (BiTree T1,BiTree T2)if(T1=Null& T2=Null)else if(T1=Null | T2=Null)return (BiTreeSilimar(T1-lchild,T2-lchild )&BiTreeSimilar(T1-rchild,T2-rchild);6.21写出统计树中叶子结点个数的算法,树用孩子兄弟链表表示。在孩子兄弟链表中,若结点的 firstchild为

19、Null,则为叶子结点;采用递归方法。int CountLeaves(Tree T,int &num)/num 传递的初值为 0if(T-n extsibli ng!=Null)nu m+=Co un tLeaves (T-n extsibli ng);firstchild!nu m+=Co un tLeaves(T- firstchild);num+=1;/firstchild 域为空,则为叶子结点return num;第七章图请给出该图的(1)邻接矩阵示意图邻接表示意图逆邻接表所有强连通分量图7-1(1)邻接矩阵0L1(2)邻接表0v1v2v3v4v5v6(3 )逆邻接表HZlZ(4)强连通分量7.2已知图G的邻接矩阵如图7-2所示。写出该图从顶点1出发的深度优先搜索 序列和广度优先搜索序列,并画出相应的深度优先生成树和广度优先生成树。1 23456789 1010图7-2深度优先序列:1 7 3 4 5 6 2 10 9 8深度优先生

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

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