C语言与数据结构实验指导完整版_第1页
C语言与数据结构实验指导完整版_第2页
C语言与数据结构实验指导完整版_第3页
C语言与数据结构实验指导完整版_第4页
C语言与数据结构实验指导完整版_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、Harbin Institute of TechnologyC语言与数据结构实验指导书刘梅 索莹 田文龙哈工大电子与信息工程学院电子工程系实验1 实验平台一、实验目的1.掌握Microsoft Visual C+ 6.0集成环境的使用方法。2.掌握C程序在Microsoft Visual C+ 6.0开发环境中的编辑、编译、链接和运行全过程二、实验内容1)启动Microsoft Visual C+ 6.0开发环境双击桌面应用程序图标或云兄“开始”菜单程序组中的Microsoft Visual C+ 6.0应用程序,启动VC+,如图所示图1.1 VC+初始界面2)建立C源程序文件方法1:单机工具

2、栏的“新建文本文件”按钮,打开文本文件编辑界面如下图所示图1.2 文本文件编辑界面方法2:执行“文件”->“新建”命令,在“文件”选项卡下选择C+ Source File 文件类型,然后输入C源程序文件名和保存文职,如图 所示,然后单击“确定”按钮,打开源程序文件编辑界面,如图1.4所示。注意:输入C源程序文件名时必须带上扩展“.c”,否则默认创建的是扩展名为“.cpp”的C+文件。3)编辑源文件方法1:在如图1.2所示的文本文件编辑界面中输入源程序代码,如图1.5所示。方法2:在如图1.4所示的C源程序文件编辑界面中编辑源程序代码,如图1.6所示。图1.3 新建文件图1.4 C源程序文

3、件编辑界面图1.5 文本文件编辑界面编辑源文件图1.6 C源程序编辑界面编辑源文件4)保存源文件源文件编辑结束后,执行“文件”->“保存”命令保存文件,文本文件编辑界面中编辑的源文件保存时必须在文件名后加上扩展名“.c”,否则保存的是扩展名为txt的文本文件,不能编译运行。5)组件文件执行“组建”->“组建”命令或直接按F7功能键或单机工具栏Build按钮,可以对源文件进行编译、链接而不运行改程序。当然也可以先执行“组建”->“编译”(快捷键Ctrl+F7)命令编译文件,再执行“组建”->“组建”(快捷键F7)命令链接文件。由于VC+有工作区的要求,所以组建时,系统提示

4、需要建立工作区,如图1.7所示。单机“是”按钮,系统会自动建立工作区,组建后的结果如图1.8所示。图1.7 提示建立工作区图1.8 组建源程序结果注意:图1.8下方的“组建”信息窗口中的内容说明了组建的结果,必须保证错误(error(s))数为0才能运行程序。6)运行文件执行“组建”->“执行”命令或直接按Ctrl+F5键或单机工具栏BuildExecute按钮,可以运行程序, 结果显示在用户输出窗口中,如图1.9所示。图1.9 用户输出窗口注意:如果要编辑下一个C源程序,由于新建的文件不会自动加入工作区,因此需要先关闭当前工作区。方法是执行“文件”->“关闭工作空间”命令,或者关

5、闭后重新启动VC+,再按照上述方法建立、编辑新的C源文件,让VC+自动建立工作区。7)运行“加法”程序在VC+环境中建立并编辑实现加法运算的源程序,然后组建该文件,结果如图1.10所示。运行该文件,并按要求输入数据,得到运行结果。图1.10 VC+环境下组建“加法”程序后的界面实验2 顺序结构程序设计一、实验目的1.掌握上机运行C程序的全过程。2.掌握各种格式说明符的使用方法。3.掌握格式输入输出函数scanf()和printf()的用法。4.熟悉字符输入输出函数getchar()和putchar()的用法。二、实验内容1.格式说明符的使用。创建并编辑输入输出各个类型数据的程序,分析各个格式说

6、明符的作用。2.编写“输入输出字符”程序,功能如下:使用getchar()函数接收一个字符,用printf()函数显示;使用scanf()函数接收一个字符,用putchar()函数显示。3.编写“求三角形面积”程序,功能如下:输入三角形三边长,求三角形的面积。已知三角形的三边长a、b、c,则该三角形的面积公式为:09okm 其中,。4.编写“圆柱体”程序,功能如下:设圆柱体的半径r=2.5,圆柱高h=5.0,求出该圆柱体的表面积和体积。要求:用scanf()函数输入数据,输出时要求有文字说明,取小数点后两位数字。三、实验指导1.格式说明符的使用(参考教材)2. “输入输出字符”程序1)编程分析

7、(1)需要定义字符型变量存放输入的数据;(2)用scanf()函数输入字符时,要注意不要接收缓冲区中已有的字符。2)参考程序#include "stdio.h"main()char a,b,c;printf("1.Input a character:n");a=getchar();c=getchar();printf("The character is:%cnn",a);printf("2.Input a character:n");scanf("%c",&b);printf("

8、;The character is:");putchar(b);putchar('n');3. “求三角形面积”程序1)编程分析(1)该问题的解决过程如下:(2)需要定义实型(float或double)变量存放相应的数据;(3)计算面积需要用到开平方函数sqrt(),该函数原型包含在头文件math.h中,因此需要在程序开始将头文件包含进来;(4)根据实际情况确定各个变量在输出时的宽度和小数位数。2)参考程序#include “stdio.h”#include “math.h”main()float a,b,c,s,area;printf(“Input a,b,c:n”

9、);scanf(“%f ,%f,%f”,&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*s(s-a)*(s-b)*(s-c);printf(“a=%7.2f,b=%7.2f,c=%7.2fn”,a,b,c);printf(“area=%9.2fn”,area);3. “圆柱体”程序1)编程分析(1)该问题的解决过程如下:(2)需要定义实型(float或double)变量存放相应的数据;(3)计算过程中需要用到常数,为使用方便,在程序开始用宏定义命令define将常数3.14159(即)用PI表示;(4)输出数据时根据要求确定各个变量的宽度和小数位数(

10、本例采用10.2)。2)参考程序#include “stdio.h”#define PI 3.14159main()float r,h;double s,v;printf(“Input the value of r and h:n”);scanf(“%f ,%f”,&r,&h);s=2*PI*r*r+2*PI*r*h;v=PI*r*r*h;printf(“The value of s is:%10.2fn”,s);printf(“The value of v is:%10.2fn”,v);实验3 选择结构程序设计一、实验目的1.学会使用逻辑表达式表示条件的方法。2.掌握swit

11、ch语句的用法。二、实验内容1.switch语句的应用编写计算器程序。要求从键盘任意输入两个数值,然后输入一个四则运算符,自动完成运算后输出结果。三、实验指导1.switch语句的应用1)编程分析(1)四则运算共有加(+)、减(-)、乘(*)、除(/)4种运算,要做出判断需使用switch语句。(2)当输入符号为四则运算之外的符号时,不进行任何运算,但应给出相应的提示信息。当使用提示信息时,switch语句应含有default子句。2)参考程序#include “stdio.h”void main()float x,y;char p;scanf(“%f,%f”,&x,&y);p

12、=getchar();switch(p)case +:printf(“%f+%f=%fn”,x,y,x+y);break;case -:printf(“%f-%f=%fn”,x,y,x-y);break;case *:printf(“%f*%f=%fn”,x,y,x*y);break;case /:printf(“%f/%f=%fn”,x,y,x/y);break;default:printf(“Input is error!n”);3)程序调试调试程序时,+、-、*、/及非四则运算符的情况都应予以调试。实验4 循环结构程序设计一、实验目的1.通过本实验,加深对循环控制结构有关概念的理解。2.

13、掌握二重循环结构程序的设计方法。二、实验内容1.阶乘累加问题。编写程序,求1!+2!+3!+n!的值。2.取彩球问题。有12个彩球:3个白色,5个红色,4个黄色,从中任意取n个球,求出所有不同的取法。三、实验指导1.阶乘累加问题1)编程分析(1)本实验内容为求解阶乘问题。(2)求n!用一个循环即可实现。(3)求1!+2!+3!+n!的值,需要在求阶乘程序之外增加一个外重循环。2)参考程序#include “stdio.h”void main()long int s=1,t;int i,j,n;printf(“n=”);scanf(“%d”,&n);for(i=2;i<=n;i+)

14、for(t=1,j=1;j<=i;j+)t*=j;s+=t;printf(“s=%ldn”,s);3)程序调试(1)输入一个不大的正整数,分析程序执行结果。(2)输入一个零或者负数,分析程序执行结果。(3)输入一个很大的正整数,分析程序执行结果。(4)当程序结果不符合要求时,修改程序,直到对任何输入数据都能输出正确的执行结果,或者给出一个明确的提示信息。例如,当输入数据非法时,给出一个错误的提示信息。2.取彩球问题1)编程分析本题用到“穷举”算法。穷举的基本思想是对问题的所有可能性一一测试,直到找到解或将全部可能状态都测试过为止。“穷举”的核心是依次测试循环体。循环控制有两种办法:计数法

15、和标志法。计数法要先确定循环次数,然后逐次测试,完成测试次数后循环结束;标志法是达到某一目标后循环结束。2)参考程序#incude “stdio.h”void main()int n,white,red,yellow,count=0;printf(“Input”);scanf(“%d”,&n);printf(“white red yellown”);for(white=1;white<=3;white+)for(red=1;red<=5;red+)yellow=n-white-red;if(yellow>=1&&yellow<=4)printf(

16、“%5d%5d%5dn”,white,red,yellow);count+;printf(“Total:%dn”,count);3)程序调试(1)输入不小于2并且不大于12的整数值,查看并分析程序结果。(2)输入小于2或者大于12的整数值,查看并分析程序结果。(3)修改程序,使得程序运行时只接受的输入值,并能获得正确结果。实验5 数组一、实验目的1.了解数组的特点,掌握一维数组的定义、初始化及其使用方法。2.掌握二维数组的定义、初始化及其使用方法。3.能用一维数组和二维数组解决简单的实际问题。二、实验内容1.鞍点问题在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二

17、维数组的鞍点。要求从键盘输入一个二维数组,当鞍点存在时,把鞍点找出来。2.选择法排序问题将存储在一维数组中的10个整数用选择法进行排序。三、实验指导1.鞍点问题1)编程分析(1)对二维数组按行处理。(2)对每一行首先找出它的最大值元素,然后看它在该列上是否为最小值,若是,则找到一个鞍点。(3)找到鞍点后输出元素值及其所在的行列值。2)参考程序#define M 3#define N 4void main()int aMN,i,j,k;printf(“请输入二维数组的数据:n”);for(i=0;i<M;i+)for(j=0;j<N;j+)scanf(“%d”,&aij);f

18、or(i=0;i<M;i+)k=0;for(j=1;j<N;j+)if(aij>aik)k=j;for(j=0;j<M;j+)if(ajk<aik)break;if(j=M)printf(“%d %d %dn”,aik,I,k);3)程序调试(1)输入有鞍点的一组数据,查看并分析程序的运行结果。例如:9 80 215 4060 -60 89 1210 -3 101 89(2)输入没有鞍点的一组数据,查看并分析程序的运行结果。例如:9 80 215 4060 -60 189 1210 -3 101 892.选择法排序问题1)编程分析(1)我们已经学习了冒泡法排序,冒

19、泡法排序依次,就有可能交换一次,需要交换的次数越多,效率越低。(2)选择法的基本思路是:第一趟,从所有元素中选择一个最小元素后放在a0中,最多交换一次;第二趟,从a1开始到最后的各元素中选择一个最小元素,放在a1中;以此类推,M个数需要进行M-1趟比较,但交换的次数比冒泡排序法少得多。2)参考程序#define M 10#include “stdio.h”void main()int aM,n,i,j,min,temp;printf(“请输入排序数据:n”);for(i=0;i<M;i+) scanf(“%d”,&ai);printf(“排序前数列:n”);for(i=0;i&l

20、t;M;i+) printf(“%d”,ai);for(i=0;i<M-1;i+)min=i;for(j=i+1;j<M;j+)if(aj<amin)min=j;temp=ai;ai=amin;amin=temp;printf(“n排序后数列:n”);for(i=0;i<M;i+)printf(“%d”,ai);3)程序调试(1)运行程序,任意输入10个整数,查看并分析程序执行结果。(2)运行程序,输入多余10个的整数,查看并分析程序执行结果。(3)运行程序,输入一组升序排列的有序整数,查看并分析程序执行结果。(4)运行程序,输入一组降序排列的有序的整数,查看并分析程序

21、执行结果。实验6 函数一、实验目的1.掌握自定义函数的一般结构及定义函数和函数调用的方法。 2.熟练掌握一维数组作函数的参数时函数的定义和调用方法,熟悉用函数求解二维数组问题的函数定义及调用方法。二、实验内容1.选择法排序函数的定义及使用 编写一个用选择法对一维数组升序排序许的函数,并在主函数中调用该排序函数,实现对任意20个整数的排序。三、实验指导1. 选择法排序函数的定义及使用1)编程分析这是一维数组作函数参数的问题。(1)设计一个对一维数组的前n个数用选择法进行排序的函数select()。select()函数有两个形参,一个是排序元素数形参,一个是一维数组形参。select()函数不需要

22、返回值,函数类型说明为void型。(2)在进行函数调用时,实参和形参要按照参数的意义在位置上对应一致。2)参考程序#define M 20#include “stdio.h”void select(int,int a);/*函数声明*/void main()int aM,n,i;printf(“请输入排序数据:n”);for(i=0;i<M;i+) scanf(“%d”,&ai);printf(“排序前数列:n”);for(i=0;i<M;i+) printf(“%d”,ai); select(M,a);printf(“n排序后数列:n”);for(i=0;i<M;i

23、+)printf(“%d”,ai);void select(int n,int a)int I,j,min,temp;for(i=0;i<n-1;i+)min=i;for(j=i+1;j<n;j+)if(aj<amin)min=j;temp=ai;ai=amin;amin=temp;3)程序调试(1)运行程序,任意输入20个整数,查看并分析程序执行结果。(2)把主函数中的函数调用select(M,a)改为select(M,&a0),用(1)中使用的数据运行程序,查看并分析程序执行结果。(3) 把主函数中的函数调用select(M,a)改为select(M,a0),用(

24、1)中使用的数据运行程序,查看并分析程序执行结果。(4) 把主函数中的函数调用select(M,a)改为select(a,M),用(1)中使用的数据运行程序,查看并分析程序执行结果。实验7 指针一、实验目的1.掌握指针变量的定义和基本使用方法。2.熟悉指针和一维数组的关系,熟练使用指针变量访问一维数组元素。3.熟练掌握用简单指针变量作函数的参数时函数的定义和调用方法。4.明确数组名作函数的参数和指向数组的指针作函数的参数的异同,学会相关的函数定义和调用。二、实验内容1.用指针法在一维有序数组中插入数据如下是具有10个整数的升序数列,存储在一维数组中,要求在其中插入任意一个整数后数列仍然有序。数

25、列:10,20,30,40,50,60,70,80,90,99。2.数据插入函数编写在一维有序数组中插入数据的函数insert(),并调用该函数实现数据插入。要求插入数据后的数组仍然有序。三、实验指导1.用指针法在一维有序数组中插入数据1)编程分析按照下标访问数组元素的方法,用指针解决该问题。2)参考程序#define M 10#include “stdio.h”void main()int aM+1=10,20,30,40,50,60,70,80,90,99;int i,n,*p,*q;printf(“请输入要插入的数据:n”);scanf(“%d”,&n);aM=n;/*将要插入的

26、数据放在数组的最后位置*/for(p=a,i=0;i<=M;i+)/*确定要插入的位置p*/if(n<=*(p+i)p=p+i;/*p指向要插入的数据*/break;for(q=a+M-1;q>=p;q-)/*元素后移*/*(q+1)=*q;*p=n;/*插入数据*/printf(“n插入数据后的数列:n”);for(p=a,i=0;i<=M;i+)printf(“%d”,*(p+i);2.数据插入函数1)编程分析(1)在实验内容1中,解决了用指针法在一维有序数组中插入数据的问题。现只需对数据的插入处理部分函数化即可。(2)插入函数insert()需要有三个形参:第一个

27、int型简单形参,表示要插入的数据;第二个int型简单形参,表示数组中数据的个数;第三个为int型指针形参,它将指向一个一维数组。(3)在进行函数调用时insert()函数的第一个实参为要插入的数据:第二个实参是数组数据个数;第三个实参是数组名,即数组首地址。2)参考程序#define M 10#include “stdio.h”void insert(int,int,int *); /*函数声明*/void main()int aM+1=10,20,30,40,50,60,70,80,90,99;int i,x;printf(“请输入要插入的数据:n”);scanf(“%d”,&x)

28、;insert(x,M,a);/*在有M个元素的一维数组a中插入x*/printf(“n插入数据后的数列:n”);for(i=0;i<=M;i+)printf(“%d”,ai);void insert(int x,int ,n,int* p)int *t,*q,i;t=p+n;/*将要插入的数据放在数组的最后位置*/for(i=0;i<=n;i+)/*确定要插入的位置p*/if(x<=*(p+i)t=p+i;/*p指向要插入的数据*/break;for(q=p+n-1;q>=t;q-)/*元素后移*/*(q+1)=*q;*t=x;/*插入数据*/实验8 线性表的顺序存储

29、系统维护一、实验目的1.掌握线性表的顺序存储的定义和基本使用方法。2.掌握线性表的顺序存储存储单元的排列特点。3.掌握线性表的顺序存储系统的建立、查找 、修改、插入、删除操作,学会相关的函数定义和调用。二、实验内容1.建立一个顺序表。2.能够对建立的顺序表进行查找、修改、插入、删除等操作。当输入指令错误时,能够提示错误信息。主函数中可以选择由switch case 语句构成主菜单,再根据提示进行相应操作。3.使用C语言程序编写。三、实验指导1)编程分析(1)在线性表的建立时,可直接用数组赋初值;(2)在查找功能中要实现的功能为:当能找到时该值时返回该值所在节点,找不到时返回-1;(3)修改功能

30、是在查找的基础上,将找到的值加以修改;(4)在插入功能中要实现的功能为:在找到指定节点后,当线性表满时,提示不能插入,当线性表不满时,插入数据;(5)删除功能主要实现:当线性表为空或者删除位置超出线性表长度时,都显示位置错误,其他情形进行删除操作。2)参考程序#include <stdio.h>#define max 20int last=20;int nodemax=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19;int find(int find_num);void insert(int insert_pot,int inse

31、rt_num);void delet(int delete_pot);void modify(int renew_pot,int renew_num);void list_printf();int main()printf("please enter number:n1,查找n2,删除n3,修改n4,插入n5,退出系统n");int flag=0;int find_num,delete_pot;int renew_pot,renew_num;int insert_pot,insert_num;int findresult;int choice; do scanf("

32、;%d",&choice); switch(choice) case 1: printf("please enter the find_numn"); scanf("%d",&find_num); findresult =find(find_num); printf("findresult=%dn", findresult); break; case 2: printf("please enter the delete_pot n"); scanf("%d",&

33、delete_pot); list_printf(); printf("n"); delet(delete_pot); printf("after deleten"); list_printf(); break; case 3: printf("please enter the renew_pot and renew_num n"); scanf("%d %d",& renew_pot,& renew_num); printf("before modifyn"); list_pr

34、intf(); modify(renew_pot, renew_num); printf("after modifyn"); list_printf(); break; case 4: printf("please enter the insert_pot and insert_num n"); scanf("%d %d",& insert_pot,& insert_num); printf("before insertn"); list_printf(); insert(insert_pot, i

35、nsert_num); printf("after insertn"); list_printf(); break; case 5: flag=1; break; default: printf("input errorn"); break; while(!flag); return(0);int find(int find_num) /*查找值为find_num 的节点*/ int k=0,findi; int flag=0; findi=0; while(k<=last-1&&!flag) if(nodek= find_num)

36、 findi=k+1; /*记录节点标号*/ flag=1; else k+; if(!flag) findi=-1; return(findi);void delet(int delete_pot)/*删除指定节点 */ int i; if(delete_pot>last-1| delete_pot <0) printf("wrong position!n"); else for(i= delete_pot;i<=last-1;i+) nodei-1=nodei; last-; void modify(int renew_pot,int renew_nu

37、m) /*在指定节点修改为指定值 */ noderenew_pot-1= renew_num;void insert(int insert_pot,int insert_num)/*在指定节点插入指定值 */ int i; if(last=max) printf("the list is full!n"); else for(i=last-1;i>= insert_pot-1;i-) nodei+1=nodei; nodep-1= insert_num; last=last+1; void list_printf()/*输出表的内容*/ int i; for(i=0;

38、i<=last-1;i+) printf("%d ",nodei); printf("n");实验9 线性表的链式存储系统维护一、实验目的1.掌握线性表的链式存储的定义和基本使用方法。2.掌握线性表的链式存储存储单元的排列特点。3.掌握线性表的链式存储系统的建立、遍历、插入、查找 、删除操作,学会相关的函数定义和调用。二、实验内容1.建立一个链表。2.能够对建立的链表进行查找、修改、插入、删除等操作。当输入指令错误时,能够提示错误信息。主函数中可以选择由switch case 语句构成主菜单,再根据提示进行相应操作。3.使用C语言程序编写。三、实验

39、指导1)编程要求(1)以循环的方式建立一个有表头的链表;(2)遍历链表,并计算链表结点个数;(3)在查找功能中要实现:当能找到时打印该值的前驱结点,找不到时输出“没找到”;(4)在插入功能中要实现:在某个特定的结点之后插入一个结点;(5)在删除功能主要实现:删除特定值的结点,注意区分该节点是否为链表结尾。2)参考程序#include<stdio.h>#include<stdlib.h>struct Node int data; struct Node *next;void Build(struct Node * L) /*建立一个带头结点的单链表*/ int n; st

40、ruct Node *p,*q; p=L; printf("请输入n和n个数据元素:n"); scanf("%d",&n); while(n-) q=( struct Node *)malloc(sizeof(struct Node); scanf("%d",&q->data); q->next=NULL; p->next=q; p=q; void Print(struct Node * L)/*计算单链表的长度,然后遍历输出单链表*/ int num=0; struct Node * p; p=L-

41、>next; while(p) num+; printf("%d ",p->data); p=p->next; printf("n长度为%d:n",num);void Tips()/*选择函数*/ printf("按数字键选择相应操作n"); printf("<1> 输出单链表及其长度:n"); printf("<2> 查找值为x的前驱结点:n"); printf("<3> 删除值为x的结点:n"); printf(&qu

42、ot;<4> 在值为y的结点后插入值为x的结点:n"); printf("<0> 退出:n");void Find(struct Node * L,int x)/*查找值为x的直接前驱结点p*/ struct Node * p; p=L; while( p->next &&p->next->data!=x) p=p->next; if(p->next) printf("%d的前驱结点为:%dn",x,p->data); else printf("没找到!n&q

43、uot;);void Delete(struct Node * L,int x)/*删除值为x的结点*/ struct Node * p,*q; p=L; while( p->next &&p->next->data!=x) p=p->next; if(p->next) if(p->next->next) q=p->next; p->next=q->next; free(q);else q=p->next; p->next=NULL; free(q); printf("删除成功!n");

44、 else printf("链表中没有%dn",x);void Insert(struct Node *L, struct Node *x,int y) /*在值为y的结点后插入值为x的结点*/ struct Node *p; p=L; while(p->next!=NULL&& p->data!=y) p=p->next; if(p->data!=y) printf("No Find Y !");elsex->next= p->next;p->next=x;printf("插入成功!n

45、");int main() int choice,x,y,flag; struct Node * L,*p; L=(struct Node *)malloc(sizeof(struct Node); L->next=NULL; L->data=-1; Build(L);/*建立一个带头结点的单链表*/ Tips();/*选择函数*/ scanf("%d",& choice); while(choice) switch(choice) case 1: Print(L); /*计算单链表的长度,然后遍历输出单链表*/ break; case 2:

46、printf("请输入要查找的元素X:n"); scanf("%d",&x); Find(L,x); /*查找*/ break; case 3: printf("请输入要删除的元素X:n"); scanf("%d",&x); Delete(L,x); /*删除*/ break; case 4: printf("请输入要插入的元素X及其前结点Y: (X,Y)n"); scanf("%d,%d",&x,&y); p=(struct Node *)m

47、alloc(sizeof(struct Node); p->data=x; Insert(L,p,y); /*插入*/ break; default: break; Tips(); scanf("%d",&choice); /*下一步操作选择*/ return 0;实验10 二叉树的遍历一、实验目的1.理解二叉树的原理,掌握二叉树的存储方法。2.掌握二叉树前、中、后序顺序遍历的过程。3.掌握前、中、后序遍历二叉树程序的编写,并用递归与非递归方法分别实现。二、实验内容1.输入数据建立一棵二叉树。2.输出其前、中、后序遍历的结果,分别用递归与非递归方法实现。3.使

48、用C语言程序编写。三、实验指导1)编程分析(1)在二叉树的建立时,先用递归算法建立一颗二叉树,以所输入的字母为其数据项,当输入为#时,所对应的节点为空;(2)分别以前、中、后序遍历二叉树,打印相应的节点值。2)参考程序(1)前序非递归遍历二叉树#include<stdio.h>#include<malloc.h>#define MAX 100struct node int data; struct node *llink; struct node *rlink;*shutree=NULL;void preorder(struct node *t);int main()

49、struct node *createtree(struct node *tree); shutree=createtree(shutree); preorder(shutree); return(0);void preorder(struct node *tree) struct node*p; struct node*sMAX; int top; top=-1; p=tree; do while(p!=NULL) printf(" %c",p->data); if(p->rlink!=NULL) top=top+1; stop=p->rlink; p=p->llink; if(top!=-1) p=stop

温馨提示

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

评论

0/150

提交评论