数据结构递归与广义表_第1页
数据结构递归与广义表_第2页
数据结构递归与广义表_第3页
数据结构递归与广义表_第4页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、5-A中的最大整数。n 个整数的和。n#include class RecurveArray publicRecurveArray/MaxSize=10 ) ArraySize(MaxSize),5-A中的最大整数。n 个整数的和。n#include class RecurveArray publicRecurveArray/MaxSize=10 ) ArraySize(MaxSize),Elements(RecurveArray() delete Elements;MaxSize)void/MaxKeySumn n /和 n /voidRecurveArray: InputArray( /c

2、outInputthenumberofArray: fori =0;iRecurveArray:MaxKeyn )/if(n=1)returnElements0; temp = MaxKey ( n -1 );if(Elementsn-1 temp)returnElementsn-elsereturnRecurveArray: Sumn ) /if(n=1) returnelsereturnElementsn-1+Sum(n-floatRecurveArray:Averagen ) /if(n =1) return(float)elsereturn(float)Elementsn-1 +(n-

3、1)*elsereturn(float)Elementsn-1 +(n-1)*Average(n -1)/mainsize=-argc, char*argv)coutNo.oftheElements:; while ( size size; RecurveArray ra ( size ); coutnThemaxis: ra.MaxKey(ra.MaxSize)endl; cout nThe sum is: ra.Sum ( ra.MaxSize ) endl; cout nthe avr is: ra.Average ( ra.MaxSize ) 0, n =/ m0, n (2) 为了将

4、递归算法改成非递归算法,首先改写原来的递归算法,将递归语句从unsignedakm( unsignedm,unsignedn) unsignedif(m=0 ) returnif(n=0)returnakm(m-1,1); v = akm ( m, n-1 ) );returnakm( m-1,v/m=/ m0, n / m0, n :akm=v =akm=v=akm=v=v=v=vm vm vm akm(m-akm(m-v=n+1= v = n+1 = 3akm(m-vm vm vm akm(m-v=n+1 =akm(m-1,v) akm(m-1,v) akm(m-栈空, vv=n+1 =v

5、=n+1 =v=n+1 =#include #include “stack.h” #definemaxSize3500;unsignedakm(unsignedm,unsignedn) struct node unsigned vm, vn; stackst(maxSize); akm=v =akm=v=akm=v=v=v=vm vm vm akm(m-akm(m-v=n+1= v = n+1 = 3akm(m-vm vm vm akm(m-v=n+1 =akm(m-1,v) akm(m-1,v) akm(m-栈空, vv=n+1 =v=n+1 =v=n+1 =#include #includ

6、e “stack.h” #definemaxSize3500;unsignedakm(unsignedm,unsignedn) struct node unsigned vm, vn; stackst(maxSize); nodew; w.vm= m; w.vn = n; st.Push (w); do while(st.GetTop().vm0) while(st.GetTop().vn0unsigned/akm(m-1akm(mn-1/akm(mn-1), akm(mw.vn-; st.Push( w);w=st.GetTop(); st.Pop(w.vm-; w.vn=1; st.Pus

7、h(w/akm(m-103021201111210112100122121212121akm(0,2) =v= akm(1,akm(0,1) =akm(0,3) =v= akm(1,akm(0,2) =v=akm(1,akm(0,1) =akm(0,4) =v= akm(1,akm(1,v=akm(2,akm(1,akm(2,w=st.GetTop(); st.Pop(); v=w.vn+; if ( st.IsEmpty( ) = 0 )/akm0akm1, */vakm1, */如果栈不空, 改栈顶为( m-1vw=w=st.GetTop(); st.Pop(); v=w.vn+; if

8、( st.IsEmpty( ) = 0 )/akm0akm1, */vakm1, */如果栈不空, 改栈顶为( m-1vw=st.GetTop(); st.Pop(); w.vm-; w.vn=v; st.Push(w);while(st.IsEmpty()=0 return5-3 sn 件物品,重量分别为 w1w2, wnn件物品中选择若干件放入此背包中,使得放入的重量之则称此背包问题无解(或称其解为假)(s s s 0且ns 0且n物品件数不能为负KNAP(s,n) KNAP(sn1)False,Truen )if(s=0 ) returnif(s0 &n1)returnFalse; if

9、 ( Knap ( s Wn, n-1 ) = True )coutWn,; returnTrue;returnKnap(s,n-1w0,1,2,4,8,1632,s51,n6 Knap(51,returnTrue, Knap(51-32,returnTrue, Knap(19-16,returnTrue, Knap(3-8,returnKnap(3,returnTrue, s= -5 returnKnap(3-4,returnKnap(3,returnTrue, s= -1 returnKnap(3-2,returnTrue, Knap(1-1,returnTrue, s=return j+

10、1 列。)0# 1# 2# 01233# 4# 01235# 6# 0# 1# 2# 3# 4# 5# 6# 8 i 1 n 试探j j+1 列。)0# 1# 2# 01233# 4# 01235# 6# 0# 1# 2# 3# 4# 5# 6# 8 i 1 n 试探j1,nj j j i+1行皇后。解题时设置 4 个数组:coln :coli i md2n-1 :mdk k sd2n-1 :sdk k qn i ij计算主对角线ki+j。nvoidi ) k forj =0; j n; j+)if(colj =0 &mdn+i-j-1=0 &sdi+j =0) colj=mdn+i-j-1=

11、sdi+j=1; qi=j; if ( i = n ) for(j=0;jn;j+)coutqj,; cout endl;else Queen (i+1colj =mdn+i-j-1 =sdi+j =0; qi =/第 i j /在第 i j /i+1 /撤消第 i j 5-5 f为单链表的表头指针#includeiostreamclassclass ListNode friendclassList; ListNode *link; ListNode( classList/定义在头文件RecurveList5-5 f为单链表的表头指针#includeiostreamclassclass Lis

12、tNode friendclassList; ListNode *link; ListNode( classList/定义在头文件RecurveListh/itemdata(itemlink(NULL) /ListNode , Max(ListNode *f); Num( ListNode *ffloatAvg(ListNode&n List() (NULL),current(NULL) List () /创建链表结点, /建立链表, retvalue/ListNode*NewNode( item voidNewList(voidPr List ( retvalue GetMax ( ) re

13、turn Max ( GetNum() returnNumfloatGetAvg()returnAvg); ); ); ListNode*List :NewNode( item) /ListNode*newnode=new ListNodereturnvoidList:NewList( retvalue ) /建立链表, retvalue=value; ListNode cout value;while(value!=retvalue ) q=NewNode(value/value/空表时, /非空表时, cout value;while(value!=retvalue ) q=NewNode

14、(value/value/空表时, /非空表时, /if =NULL=current =current=q; else current-link=cincurrent-link=/voidList :Pr List ( ) coutnThe Listis : /ListNode*p;while(p != NULL) cout data coutlink; List:Max(ListNode *f )if(f-link= NULL)return f -temp =Max ( f-linkif(f-datatemp)returnf-data; else return temp;/: /如果当前结点

15、的值还要大, /List:Num(ListNode*f) if(f=NULL) returnreturn1+Num( f-link/: /空表, /否则, ist:Avg(ListNode*fif( f-link=NULL&n ) /: /链表中只有一个结点, n =1; return( float)(f-data); else floatSum=Avg( f-link,n )*n; return( f -data+Sum) /n; #include/mainargc,char*argv)Listcoutcin finished; test.NewList(finished); test.Pr

16、 List ( );cout nThe Max is : test.GetMax ( ); coutnTheNumis:test.GetNum();coutnTheAveis:test.GetAve() finished; test.NewList(finished); test.Pr List ( );cout nThe Max is : test.GetMax ( ); coutnTheNumis:test.GetNum();coutnTheAveis:test.GetAve()value.listname:elem-value.atom;classGenList GenListNode

17、/;/lsvoidtraverse(GenListNode *ls voidRemove( GenListNode*lsGenlist(char&valueGenList ( ); voidtraverse();(2) voidGenList :traverse() /构造函数value/traverse#includeiostreamvoidGenList:traverse(GenListNode*lsGenlist(char&valueGenList ( ); voidtraverse();(2) voidGenList :traverse() /构造函数value/traverse#in

18、cludemark=/私有函数, if(ls-utype=0)coutvalue.listnameutype = 1 ) couttlink!=NULL) coututype=2 ) if(ls-value.hlink-mark=0)traverse(ls-value.hlink); else cout value hlink-value.listname;if(ls-tlink!=NULL) couttlink/elsecout对上图所示的广义表进行遍历,得到的遍历结果为A(C(E(x,yaD(E,e)(3) #includeiostream#include“stackvoidGenList

19、:traverse(GenListNode *ls) 01y01x00E01e0200D01a0200C020200AStackGenListNode*st; while ( ls != NULL ) ls-mark=if(ls-utype=2 ) if(StackGenListNode*st; while ( ls != NULL ) ls-mark=if(ls-utype=2 ) if(ls-valuehlink-mark=0 st.Push(ls-tlink); ls=ls-valuehlink; else coutvalue.hlink-if(ls-tlink!=NULL)couttl

20、ink;elseif(ls-utype=0)coutvalue.listnameutype = 1 ) couttlink!=NULL) couttlink=NULL) cout );if(st.IsEmpty()=0) ls=st.GetTop(); st.Pop(if(ls!=NULL)cout,; else cout );elsels= ls-/过/暂存下一结点地址/该子表过, 仅输出表/子完, 子表结束处/(4) #include #include #include “stack h”maxSubListNum=/GenList:GenList(char&value) Stackst(maxSubListNum); SeqList Name (maxSubListNum);SeqListPo r /GenListNode*p,q,m=0, ad,/m为已建表计数, br coutcout开始输入广义表数据, A(C(E(xyaD(E(xyecin=q = new GenListNode(0,ch /if(chcout开始输入广义表数据, A(C(E(xyaD(E(xyecin=q = new GenListNode(0,ch /if(ch!=value)Name.Insert(ch,m); else retur

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论