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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构习题集答案c版清华大学严蔚敏.docx

1、数据结构习题集答案c版清华大学严蔚敏 void print_descending(int x,int y,int z)果采用递归编程(大多数人都会首先想到递归方法),则时间复杂度将高达O(km). typedef structchar *sport;enummale,female gender;char schoolname; otalscore+=;if=0) score 0 .malescore+=;else score 0 .femalescore+=;break;case B:+=;if=0) +=;else +=;break;i+;for(i=0;i5;i+)printf(Schoo

2、l %d:n,i);printf(Total score of male:%dn,;printf(Total score of female:%dn,;printf(Total score of all:%dnn,; void polyvalue()float ad;float *p=a;printf(Input number of terms:);scanf(%d,&n);printf(Input the %d coefficients from a0 to a%d:n,n,n);for(i=0;inext;A=(CiList*)malloc(sizeof(CiLNode);p=A;B=(C

3、iList*)malloc(sizeof(CiLNode);q=B;C=(CiList*)malloc(sizeof(CiLNode);r=C; .4,2的顺序重排双向循环链表L中的所有结点p=;while(p-next!=L&p-next-next!=L)p-next=p-next-next;p=p-next; 同时进行调整的话,必须使用堆栈保存偶数结点的指针,否则将会破坏链表结构,造成结点丢失. DuLNode * Locate_DuList(DuLinkedList &L,int x) int x; int y; coordinate;void Repaint_Color(int gmn

4、,int i,int j,int color)归形式的算法该怎么写呢?void NiBoLan(char *str,char *new)题中暂不考虑串的具体操作的实现,而将其看作一种抽象数据类型stringtype,对其可以进行连接操作:c=link(a,b).Status g(int m,int n,int &s)void InitCiQueue(CiQueue &Q)Status EnCyQueue(CyQueue &Q,int x)省掉这一句,则在某些情况下,会引起不希望的后果,虽然在大多数情况下没有影响.请思考:设S=place, T=ace, V=face,则省掉i+=Strlen(

5、V);运行时会出现什么结果 int Delete_SubString(Stringtype &s,Stringtype t)读者用此程序取代作者早些时候对题给出的程序. void StrAssign(Stringtype &T,char chars&#;)h&Tj.ch!=c) j+; h) Tj.num+; else Tj=c,1; h;j+) printf(%c: %dn,Tj.ch,Tj.num); 前一个程序的区别在于,串s业已存在. for(p=s-next,q=t-next;p&q;p=p-next,q=q-next) p-ch=q-ch;pre=p; while(q) p=(LS

6、trNode*)malloc(sizeof(LStrNode); p-ch=q-ch; pre-next=p;pre=p; p-next=NULL; 算法的思想是,依次把串S的一个副本S2向右错位平移1格,2格,3格,.与自身S1相匹配,如果存在最长重复子串,则必然能在此过程中被发现.用变量lrs1,lrs2,maxlen来记录已发现的最长重复子串第一次出现位置,第二次出现位置和长度.题目中未说明重复子串是否允许有重叠部分,本算法假定允许.如不允许,只需在第二个for语句的循环条件中加上k=i即可.本算法时间复杂度为O(Strlen(S)2). void Get_LPubSub(Stringt

7、ype S,Stringtype T)for(k=0,j=jmin;jmaxlen) lps1=j-k+1;lps2=j-i-k+1;maxlen=k; 一的区别是,由于A,B互不相同,因此B不仅要向右错位,而且还要向左错位,以保证不漏掉一些情况.当B相对于A的位置不同时,需要匹配的区间的计算公式也各不相同,请读者自己画图以帮助理解.本算法的时间复杂度是o(strlrn(s)*strlen(t)。 void RSh(int An,int k)第二条链:A1-A7,A7-A13,A13-A4,A4-A10,A10-A1. 第三条链:A2-A8,A8-A14,A14-A5,A5-A11,A11-A

8、2. 恰好使所有元素都右移一次. 虽然未经数学证明,但作者相信上述规律应该是正确的. void Get_Saddle(int Amn) pc.i=x; pc.j=pb.j; pc.e=pb.e; pb+;pc+; else pc.i=x; pc.j=pa.j; pc.e=pa.e pa+;pc+; =x; pc.j=pa.j; pc.e=pa.e pa+;pc+; whilepb=x) =x; pc.j=pb.j; pc.e=pb.e; pb+;pc+; pb.j) pc.i=x; pc.j=pb.j; pc.e=pb.e; pb+;pc+; else pc.i=x; pc.j=pa.j; p

9、c.e=pa.e pa+;pc+; =x; pc.j=pa.j; pc.e=pa.e pa+;pc+; whilepb=x) =x; pc.j=pb.j; pc.e=pb.e; pb+;pc+; void MPList_PianDao(MPList &L) void GList_PrintList(GList A)是层序遍历的基本思想. int Is_Descendant_C(int u,int v) int Bitree_Sim(Bitree B1,Bitree B2)次根据栈顶元素的mark域值决定做何种动作. typedef struct int data; EBTNode *lchil

10、d; EBTNode *rchild; EBTNode *parent; enum 0,1,2 mark; EBTNode,EBitree; typedef struct int data; PBTNode *lchild; PBTNode *rchild; PBTNode *parent; PBTNode,PBitree; . scanf(%d,&k); c=0; . void LayerOrder(Bitree T)相比,作了一个修改,不管当前结点是否有左右孩子,都入队列.这样当树为完全二叉树时,遍历时得到是一个连续的不包含空指针的序列.反之,则序列中会含有空指针. Status Crea

11、teBitree_Triplet(Bitree &T)意:为了能用一个统一的公式计算子孙数目,所以当T为空指针时,要返回-1而不是0. BTNode *PreOrder_Next(BTNode *p)不是哪儿理解错了 Bitree PostOrder_Next(Bitree p)irstchild) return 1; for(sd=1,p=T.firstchild;p;p=p-next) if(d=SubDepth(p-child)sd) sd=d; return sd+1; arent) dep+; . Build_Sub(1,n,1,n); . 分析:本算法利用了这样一个性质,即一棵子树

12、在前序和中序序列中所占的位置总是连续的.因此,就可以用起始下标和终止下标来确定一棵子树.Pre_Start,Pre_End,In_Start和In_End分别指示子树在前序子序列里的起始下标,终止下标,和在中序子序列里的起始和终止下标. typedef struct CSNode *ptr; CSNode *lastchild; NodeMsg; astchild) tr-firstchild=; astchild-nextsib=; astchild=; tr=(CSNode*)malloc(sizeof(CSNode); Tree0.data=c; Tree0.ptr-data=c; wh

13、ile(p=getchar()!=&(c=getchar()!=) Treen.ptr=(CSNode*)malloc(sizeof(CSNode); Treen.data=c; Treen.ptr-data=c; for(k=0;Treek.data!=p;k+); ata!=p) return ERROR; tr; if(!r-firstchild) r-firstchild=Treen.ptr; else Treek.lastchild-nextsib=Treen.ptr; Treek.lastchild=Treen.ptr; Status CreateBiTree_GList(BiTr

14、ee &T)ata); irstchild;p;p=p-next) Print_CSTree(p-child,i+1); . Print_CTree,0); . 算法另一个改进之处在于加入了广义表格式是否合法的判断. void PrintGlist_CSTree(CSTree T)ata=c; i=pos+; void PrintGList_CTree(CTree T,int i)ata=getchar(); firstarc) elsefor(q=q-nextarc=p;p-adjvex=j;p-nextarc=NULL;dj)j.adj=1;+;return OK;dj=0;return

15、OK;Status Delete_Arc(MGraph &G,char v,char w)dj)j.adj=0;return OK;余算法请自行写出.Status Insert_Arc(ALGraph &G,char v,char w)余算法请自行写出.Status Delete_Vex(OLGraph &G,char v)余算法请自行写出.Status Delete_Arc(AMLGraph &G,char v,char w)irstedge-ivex=i)j.firstedge=j.firstedge-jlink;elsefor(p=j.firstedge;p&p-jlink-ivex!=

16、i;p=p-jlink);if (!p) return ERROR; ata=getchar(); irstedge) j.firstedge=p;elseq=while(q)r=q;if(q-jvex=j) q=q-jlink;else q=q-ilnk;if(r-jvex=j) r-jlink=p;else r-ilink=p;int Pass_ALGraph(ALGraph G)irstarc;p;p=p-nextarc)y=p-adjvex;for(q=y.firstarc;q;q=q-nextarc)z=q-adjvex;if(z!=x&!is_adj(G,x,z) return 0

17、;irstarc;p;p=p-nextarc)if(p-adjvex=n) return 1;return 0;于是强连通图,所以从第一个结点出发一定能够访问到所有结点.见书后解答.Status TopoNo(ALGraph G)int visitedMAXSIZE;int exist_path_len(ALGraph G,int i,int j,int k).Find_All_Path(G,u,v,0); .irstarc;p;p=p-nextarc)w=p-adjvex;if(!visitedw) DFS(G,w,k+1);else 此一旦遍历中发现当前结点visited为真,即表示发现了

18、一条回路结点序列(例如,142857)存入thiscycle中;由于这种算法中,一条回路会被发现好几次,所以必须先判断该回路是否已经在cycles中被记录过,如果没有才能存入cycles的一个行向量中.把cycles的每一个行向量取出来与之比较.由于一条回路可能有多种存储顺序,比如142857等同于285714和571428,所以还要调整行向量的次序,并存入temp数组,例如,thiscycle为142857第一个结点为1,cycles的当前向量为857142,则找到后者中的1,把1后部分提到1前部分前面,最终在temp中得到142857,与thiscycle比较,发现相同,因此142857和

19、857142是同一条回路,不予存储.这个算法太复杂,很难保证细节的准确性,大家理解思路便可.希望有人给出更加简捷的算法.int visitedMAXSIZE;int finishedMAXSIZE;int count; irstout;p;p=p-tlink)w=p-headvex;if(!visitedw) DFS1(G,w);irstin;p;p=p-hlink)w=p-tailvex;if(!visitedw) DFS2(G,w);void Forest_Prim(ALGraph G,int k,CSTree &T)irstarc;p;p=p-nextarc)if(p-adjvex=k)

20、 closedgej.lowcost=p-cost;owcost=0;for(i=1;i;i+)k=minimum(closedge);if(closedgek.lowcostnextarc)if(p-costadjvex.lowcost)closedgep-adjvex=k,p-cost;.T=(CSTNode*)malloc(sizeof(CSTNode); .typedef struct int vex; cno) return 1;else return 0;cno); 这个结构上实现了初始化,判断元素是否等价(两个结点是否属于同一个连通分量),合并等价类(连通分量)的操作.Statu

21、s TopoSeq(ALGraph G,int new )irstarc;p;p=p-nextarc)w=p-adjvex;if(!visitedw) DFS(G,w);PL=0) k=Get_MPL(G,j);if(kmax) max=k; irstarc;p;p=p-nextarc)Dp-adjvex=*p-info; irstarc;p;p=p-nextarc)w=p-adjvex;if(!finalw&(min+(*p-info)| return ERROR;return i;int Search_Bin_Recursive(SSTable ST,int key,int low,int

22、 high)ey=key) return mid;else ifmid.keykey)return Search_Bin_Recursive(ST,key,low,mid-1);else return Search_Bin_Recursive(ST,key,mid+1,high);ey) return ;low=1;high=;while(low=rmid.key&keymid-1.maxkey)found=1;else if(keymid.maxkey)low=mid+1;else high=mid-1;i=mid.firstloc; typedef struct LNode *h; 微积分

23、可得,在等概率情况下,平均查找长度约为n/3.typedef struct DLNode *pre;int data;DLNode *next; DLNode;typedef struct DLNode *sp;int length; DSList; int last=0,flag=1;int Is_BSTree(Bitree T)果试图在删除x结点的同时修改线索,则问题反而复杂化了.void BSTree_Merge(BiTree &T,BiTree &S)合并过程中,并不释放或新建任何结点,而是采取修改指针的方式来完成合并.这样,就必须按照后序序列把一棵树中的元素逐个连接到另一棵树上,否则

24、将会导致树的结构的混乱.void BSTree_Split(BiTree &T,BiTree &A,BiTree &B,int x)种情况,树中没有待插入关键字的同义词,此时只要新建一个叶子结点并连到分支结点上即可.另一种情况,有同义词,此时要把同义词的叶子结点与树断开,在断开的部位新建一个下一层的分支结点,再把同义词和新关键字的叶子结点连到新分支结点的下一层.Status TrieTree_Delete_Key(TrieTree &T,StringType key)ey;j=(j+1)%hashsizesizeindex) ey)=i) printf(%sn,j);if(m1) return ERROR;T=malloc(m*sizeof(WORD); 算法不考虑排序问题.ey&!EQh.key,key)h=(h+1)%20000;if(EQh.key,key) k=h;else k=NULL;矩阵的元素是随机分布时,查找的时间复杂度为O(1). 精心搜集整理,只为你的需要

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

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