版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件基础实验报告作者: 日期:计算机软件技术基础实验报告姓名:X XX班级:XX 0X01学号:30X05050XX实验一线性表:1、建立单向链表,表长任意;2、可交互输出单链表中的内容;3、编写算法计算出自己所建单链表的长度并输出;4、 删除自己所建单链表中的第K个结点,并将剩余结点输出5、将单链表倒排,输出结果。源程序如下:# in c lud e <stdio.h>#inclu d ev mall o c.h>t ypedef i n t da t aty p e;typed ef st ru ct no de/链表结构体 /dataty pe da t a;st r
2、uct no de *ne x t;li nk 1 ist ;li n k1 ist *creat 1 i s t()/ 建立链表/ /i nt x ;1 in k l is t * h e a d, *s ;he a d=N ULL;p r intf("n输入链表数据:");scan f ("%d",& x );whi 1 e (x!=0 )s=ma 1 lo c(si zeof( 1 in klist) ;/ 为链表开辟一系列的空间 /s-> da t a = x;s > n ext=he a d;head=s;p r i ntf
3、("n输入链表数据:");s can f(" %d" ,&x);re t ur n h e ad;v oid lis t Con te nt (li n k 1ist *h )/ / 输出链表内容 /link 1 ist * s;s=h;w hi l e (s!=NULL )p r int f ("%4 d ",s- > data);s= s -> n ext;i nt 1i stLon g (li n klist *h )/ / 计算链表长度 /i n t i=0;lin klist *s;s=h;while(s
4、!=N U LL )i+;s = s ->next;retur n (i);vo id DeleteN o de (li nk 1i st * h ,in t k)/ / 删除第 K 个节点/ /in t i = 0;lin k li st *p, * q;P =h;i f (k=1)h = h>n ext;free (p);el s ew h ile(i< k -1&&p! =N UL L)i +;q=p;P =p->ne xt ;q >next=p- >n ext;fre e (p);lin k li s t *DaoXu(linklis
5、t *h )/ 逆序排列链表 / /l i nkli s t *r, *q p;r=h;p =r> ne x t;q=p->n ext;i f (h=NULL)p r i nt f("链表为空n ");while(q ! =N ULL&& h! = N U LL)p- > n ex t =r;r =p;p=q;q=q- >n ext;h-> n ext= N U L L;p _>next= r;return(p);ma in ()i n t k,x;linkli s t *h ;dopr i n tf ("n 功
6、能:n ");p r i nt f ("1 建立链表 n");pr in t f( "2.输出链表内容;n");printf("3.获得链表长度n”);pr intf ("4删除第K个节点n ");p ri nt f (" 5将链表倒序输出n");p r intf(" 6 .退出 n");p r i ntf("请输入功能号: n");scan f("%d", & x);if(x<1|x > 6)printf(&quo
7、t;错误! n");elseswitch(x)ca se 1: h= crea tl i st();break;c ase 2:list L o n g( h );break;c a s e3: pr in t f ("链表的长度是:%d", li stLong (h) ); break;ca se 4:p ri ntf("请输入要删除的节点:n");'sc anf("%d",&k);'Del e te Node (h,k);lis t Con tent (h ); b re a k; cas e 5
8、: h =DaoXu(h);listC onte nt ( h);b r e a k; cas e 6: e xit(O);bre a k;whil e (1 );运行结果:安箱跑5K骨也+ +姑烤丟出入输入搭表数据;為 输入错表数据目叫 输入槌表数据沖弓 输入槌表数据:" 输入错耒数据:騎 输入镇表数据個畫表灯倒 的:T7WW出人 3辟功2_* - - -fe'nr3 1 « -r-J 1号LZJ功二逢玄链表變出锈表内容:|8|5%: 内长代序# 衷奠眄倒能 槌餐量功 :立出出入 ' D:宝M牧祇仁丰4富權文阵夹8卵輕一巧实验总结:1 .在编写倒排链表的程
9、序时, 对于循环的计数的控制 没有搞好,以致无法得到想要的链表;2.要给一个指针创立空间 之后才能调用它,否则会出错。解决办法:1.通过单步调试程序,调整循环次数,来使循环中的 个参数达到自己想要的 通过查阅资料,完成对链表程序的实现。在写每一个子函数时,常常会遗漏小的判断条件, 比如遗漏了判 断是否为空等;还有就是在对指针操作时,有时多加了 *,或者分号写成逗号;在调试程序的过程中有很多小的错误或者判断条件错 误等。实验二在交互方式完成下列任务:1、动态交互建立二叉树,结点个数任意;2、分别用DLR LD R、LR D三种方式对二叉树进行便 利并输出结果;3、计算二叉树中的结点个数并输出;4
10、、计算二叉树的深度并输出;源程序如下:# incl u de "stdio . h"# inc 1 ud e " mal 1 o c .h"str uct BTN odei nt d a t a ;?struc t BTN o de *Lch i1 d,*R c hi 1d ;st ruct BTNode *build(st r uc t BTNode *p);s truct B TN o de *creatren t (struc t BTNod e *p );void DLR(s tru c t BTNode *T);str uct B TNode
11、*crea tr ent(st r uc t BTNod e *p)?int x;? pr in t f("输入根:rent=");?scanf ("% d", &x);? if(x= 1 00 0 ) p=N U LL; e Ise?p-> da ta=x;p> Lch i I d =(s t ru ct B TNod e *) malloc(s i zeof(st ructBTNode);?retup- > Rchil d =( s tr u ct BTNod e *) i f ( p=NULL) r eturn p ;p&
12、gt; Lch il d =build(p >Lchi p->Rchil d =build( p >Rch il d ); r n p;m a lloc(size o f (struc t BT Node);Id ); st r? iuctBTNo de *bui 1 d( s truct BTN o d ent x ;printf("输入数据(输入值为时,表示该结点为空 sc a nf ("%d", &x);? i f(x= 1 0 00) p =NUL L;e lsep >d at a = x;? p -> L child
13、= (s tru ct BT N o de *)m al loc( s p >Rch ild = (st r uct B T Nod e *) m all):v a lue=");?i zeof( s true t oc (sizeof(s trBTNode); u ct B TNod e );? i f( p =NULL) r etur n p;p >Lchi1 d= build(p- > Lch il d); p->Rchild= b u i ld(p- > Rchi ld);?retur n p;?vo i d DLR(st r u ct BTNo
14、d e *T)i f(T= NU LL)r et ur n;p r int f ("% d ", T->da t a );DLR(T > Lch ild);DL R(T >Rc h i ld);v o i d LD R(s tr u ct BTNod e *T)?if (T =NUL L) r et u rn;LD R (T->L chi 1 d)?pr i ntf("%d", T ->da t a);LDR(T >Rchi 1 d);voi d LR D(s t rue t BTN o d e * T )?i f (
15、T= =N ULL) re turn ;?LRD (T >Lc h i1 d);?LRD(T->R h i1 d);? p r i ntf(” %d ",T->dat a );v o id m ai n ()?struct B TNo d e * r en t =NU LL;int flag ;?while( 1 )?n3 :后序 n ")BT Node);? prin t f("选择输入的操作:n 1:创建2 :先序n 3:中序 ?scanf("%d",& f la g );?swi tch (flag)? case
16、 1 :? r ent=( s truc t B TNode *) ma lloc( s iz e of( s t r uct rent=crea tr en t(rent);?br e a k;ca se 2 :DLR(rent) ;printf("n " ) ;br e ak ;case 3: LDR ( r en t);p r intf ("n") ; br e ak ;?ca se 4:L RD(re n t);pri nn") ;b re ak;运行结果: 5 AUserspU«5ktopL>ebug-,e11入入入入
17、入择 心刖一 刖 j 刖.!_刖. .刖II刖.1-!.-刖4 刖.>._ 刖二刖二- :为旺为 Hl 000! 为 0- 1000. jAjK1000l, 为辰,为 H10H0P为詁 为氐为* 1她,1000,1000,1000,1080,1Q00,寛工空空空空空空空工 占善苦苫苫RE占苫苫警小 士 口士 口士 口士口士 口士 口士 口士口士 口士 n 该该阂雷囂该该该 丞疋示示-巫血亦示示亦 Ex ulKjllyEv.-.-V my _!/_<valiia=l vlue=10B0 u alkie =2=5 ualue =1000 uluc =10B0 ualue=1000MAl
18、ue -8 value=1000 value=100H总作操石的卫彎先中后8 B8.liI I实验总结:通过查资料完成程序,还是在调试程序的过程中出 现恩多的错误,除了一些基本的错误,也出现了判断错误,比 如在进行先序,中序,后序遍历的时候都没加 i f ( k ! = NU LL)这个条件,导致在执行程序的时候,只进行先序遍历,然后 出错退出。实验三在交互方式下完成下列任务:1、根据教材上算法,完成图的深度和广度优先遍历,要求任意给定起始 点,输出结果;2、根据教材上算法,完成图的单源最短路径的算法,要求任意给定源 点,输出结果;源程序如下:#i n cl ude <stdi o .
19、h># in elude <m a llo c. h> #def i ne Q 1 0 0 0 #d e f i ne VNum 6st r u ct GLink i nt No; in t Right;s t ruct G Lin k *Relat; ;int G VNu mVN um =/对图进行初始化/ /0 ,23,1 6 ,Q , 4 5 , Q,? Q,0,15,5 0,1 0 ,Q,2 0,Q,0,1 5,Q,Q,Q,2 0,Q, 0,35,Q,? Q,Q,Q,30,0,Q,Q,;5 ,4,Q,Q, 0s truct GLink * GLV Num;int Vi
20、sitedVNum;v o id Creat e GLink(int GVNumVNum ) 立邻接表/ in ti, j;f or ( i =0 ;i v VNum; i +)GLi =q = NULL;fo r (j = 0 ; j v VNu m ; j+)if (i != j)if (Gi: j > 0 )&&(Gij < K)/点存在有向路径/? p = (struc t GL ink *)m al loc(si z eof(struct G L in k );p->N o = j ;/ /点加入邻接表/?p->Righ t = G i: j;
21、if (GLi = = N ULL)?GLi = p;?e l se?q >Re l a t = p;q = p;/建该两将该s tru ct G L i n k * p,* q;vo id DF S(int A V Nu m VN um, int V) 起点/用于进行深度优先遍历的子函数 ,是访问/ /int i;print f (" %d ", V);Vi s ited : V = 1;/for (i =0; i < VN um; 1 +)i > 0)&& (A Vi v K) && (V isite/将其标记为已1 f
22、 (A V/该结点未被访问过d 1 != 1)DFS(A,);/访问该点/ /fo r (1= 0;1 f (Visitedi 点,访问该点/i < V Num; 1 +)=1) DFS(A,i);/ /仍有未必访问过的/用于广度v o 1 d B FS(int AVN u m VNum , i n t V)优先遍历的子函数/1 nt CQVNum ;i n t a 0,b,c;int i,k= 1;fo r (i= 0 ;i<VNu m ;i+)CQ1 =K;Vi s i t ed V = 1;志为访问过/CQ : 0 = V;pr 1 ntf(" %d ",
23、V);放入队列/while(k v 6&& a <k) /仍有结点未被访问并且队列中仍有结点的后继结点未被/ 标/ /将该结点访问/b=C Q a ;for(c=0 ; cv VNum; c+ +) /依次将队列中以结点为首的邻接表中的结点插入队列/ /f(Vis 1 ted prCQ:c=0&& A b c<K&& A b c! = 0) in t f ("%d", c);+ +k=c;/未被访问过,将其插入到队列中/Vi sit ed c =1;/标志为访问过/a+ ;for(i=0;if(V 1 sit e
24、di=0) BF S(A, i);v VNu m;i+)void Short(i nt A V NumV N um , i nt V) 起点/用于计算最短路径的子函数,V是 int Di s tV N um, PathVNum;int S = 0;in t i, k ;i n t wm, u;for (i=0;i<VN um; i + +) D ist i = A Vi;/ /默认这两点之间即为最短路径/if (Dis t i< K)P athi: = V;/ 存储该路径/S = S 1(1 VV V);for ( k = 0 ; k<VNum;k+ +) wm = K;u
25、= V;fo r (i = 0; iv VNu m; i + +)if (S &(1 v < i)=0)&& (Dis t : i < wm)/该两点间存在路径/ /u = i;?wm = Di st i;S = S |(1 << u);fo r (i = 0; iv VNum; i+)if (S &(1 v < i)=0) & & (D istu: + A ui) v Disti)? Di s t : i = Distu + Au: i ;/ 找到新的最短路径 /P at h i = u;/更新路径长度/? f o
26、 r (i = 0 ; iv VN um; i+)/ 输出该源结点到其他各点的最短路径 /if (S &(1 << i)!= 0)k = i;w h i le ( k !=V) p r in t f("%d <-" , k);?k = Pat hk;print f (" %d ",V);p r i n t f("n ", Di sti);else pr i ntf (" No Path : %d", i);m a in ()in t i, j, a, b;Cre ateGLin k (G)
27、;p rint f ("1 .深度优先遍历n");/打印菜单/ /p r i nt f ("2.广度优先遍历n");p ri ntf(" 3 寻找单源最短路径n ")prin tf ("4 .退出 n");/w h ile(1)完成菜单功能/ / print f ("n功能项选择从1到 4 :”);scanf ("% dH, & a );if (a=1) fo r (i=0; i <VNum; i + +)Vis i ted : i = 0;?printf(”请输入第一个节点:&q
28、uot;);sc anf("%d", & j);?prin t f n 深度遍历 DFS是:");DFSG ,j);p rint f( "n");i f (a=2) fo r (i= 0 ; i<VNum ;i+)Visite d i = 0 ; p rin t f ("请输入第一个节点:");?sc anf(” d ",& j);?p rint f ("n广度遍历结果 BFS是:");?BFS(G,j);pr in tf("、n");? if (a=3
29、)printf("请输入源点:");sc a nf(" %d", &b);p r int f(" n单源最短路径是:n ");Short(G,b);if (a= =4) bre a k;运行结果:jgDebugkjh7.exc,-search the grapl deejj first.sedvch tliebt'oad fIvst-find the sfiortest path-exitplease inyut a nun from 1 to 4 :1lease ih)put tlie F±Vst node
30、 = 1The Result of DFS is: 112 J 101413 J 51jpljease 土npu七 己 num £rom 1 to 4 :2lease infjut tlie first node = 1The Result of BFS is:lJ 12J 3J<J0J5Jplease input a num front 1 tn 4 S 3input tlie source node ;1The Eesult of Shortest path is:M <-2 <-1= 351 = 62 <-1= 153 <-2 <-1= 30
31、4 <-1- 10Ng Path - Eplease input a nunt From 1 to 4 ;4i*bss ani/ kev to continue实验总结:1运行时,2表示深度优先遍历,3表示广度优先遍历。碰到问题:1 建立图时,指针太过复杂,很容易搞混;2.广度优先遍历中,编写时,打印输出进入死循环;解决办法:1 通过单步调试找出赋值错误和参数调用的错误;2.将函数中的q移位移到循环外面。实验四检索和排序在交互方式下完成下类任务:1、任意给定无序系列,用快速排序法对其进行排序,并统计交换次数。2、任意给定的无序序列,用对半检索法交互检索任意给定的关键字K EY3、任意给定
32、无序系列,用冒泡排序法对其进行排序,并统计交换次数和排序的趟数源程序如下:# inclu d e vs td io .h>i n t ji;vo id duiban(int a10,i n t n,in t ke y)i nt l ow , h ig h ,mid ,f lag ;1 ow=0; h igh= n -1 ;flag=0;while( 1 ow<=hi gh)m id=(low+ h igh)/2;if(a mid = = key ) flag=1; b re a k;e lse i f( k e y >am i d) 1 ow= m i d+1 ;el se
33、high=mi d -1;i f(flag = = 1) pri n tf("是第 %d 个元素 ”,mid+1);el se pri n tf ("E");v oid mao pa o(i n t a10 ,in t n ) in t i,j,temp, f la g;int jia o ,ta n g;j i a o=ta n g=0;f o r (i= 0; i<n-1 ;i+ +) f la g=1;for(j=0;j<n_i_ 1; j+)?if (aj+1: <aj) tem p = aj:; a: j = aj+1;a : j+1=
34、t e mp;jiao + +;fl a g=0; ?ta ng+;if(fla g = 1 ) b r eak;pri nt f(”n交换次数和排序趟数分别是%d和小",jiao,t a ng);vo id kuaishu (i nt a : 10 ,in t 1 ow,i n t h ig h )in t i,j;i nt t e mp;i f (lo w>=h i gh ) retu rn(0);i=low;j=hig h ;temp=ai ;while(i! = j) w hil e(a j> = temp ) &&(j>i ) j;if(j
35、 > i) a i+= a j;ji+; while(a i <=temp)&&( j >i ) i + +;i f( j >i) a :j - -=ai;ji + +;ai = temp;kua is hu(a,low,i 1);kua i shu ( a ,i+ 1,h i gh);ma in ()int i, a 10,n, q, p, t ;d o prin t n 1用对半检索法,交互检索任意给定的关键字KEY");pri n tf (" n2用快速排序法对其进行排序,并统计交换次数");p ri ntf( n 3
36、.用冒泡排序法对其进行排序,并统计交换次数和排序的趟数");pr in plea se w rite th e or der:");scan f("%d", & i);w h il e(i< 1 |i>4)prin t f(" n T h e o r d e r you print is wron g! ,please print a g ai n!"); scan f("%d" , &i);swi t ch (i) cas e 1:p r int f ("please i n
37、 put : n");f o r( n =0;nv 10; n+ +) s ca nf (" %d" ,&an);dop ri n tf ("please inp u t : n");?sc anf ("%d",&q);duiban (a ,10, q);?p r int f (":n ");? sc an f ("% d ",& p );?while( p =1);b r eak ;case 2: j i=0;?pri n tf(" pl ease i np u t d a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中二年级音乐《彝族舞曲》跨学科审美教学设计
- 心向阳光逐梦青春:高一心理健康教育主题班会教案
- 初中二年级英语《社区生活场景描述与倡议书写作》教案
- 九年级化学“人类与水环境的和谐共生-水资源保护与科学利用”单元教学设计
- 关于产品协作会议的邀请函(6篇)
- 初中化学教师实验安全操作指导书
- 中医护理的国际化趋势
- 乙型脑炎护理知识课件及练习题答案
- 2025-2030年智能口腔吸引系统行业跨境出海战略分析研究报告
- 一次性冲泡奶茶包企业制定与实施新质生产力战略分析报告
- 口腔护理入编试题及答案
- 桥梁钢筋劳务分包合同
- 湖南农发环保科技有限责任公司招聘笔试题库2026
- 2026-2030中国高油酸花生油市场供需趋势与营销推广渠道分析报告
- 2026年招聘消防文员笔试题库附答案
- 汽车零部件清洁生产办法
- 航空发动机设计与维护手册
- 2026年产品经理考试题库含答案详解
- 2026年人教版初中七年级语文上册文言文古今异义卷含答案
- 中国航天科技集团校招面笔试题及答案
- 2025年杭州市西湖区社区工作人员(网格员)考试题库真题及答案
评论
0/150
提交评论