您的位置:

c语言检索树实验报告,c语言实验报告总结

本文目录一览:

c语言_树

我很奇怪,不用先序中序或者中序后序,你如何能确定一棵唯一的树呢,不能确定树如何来遍历等等。。。。。。。。。。

参考一下

一、 实验名称:二叉树的建立和遍历

二、 实验目的:练习递归算法

三、 实验内容:在上一次实验的基础之上增加以下功能

a) 统计二叉树深度

b) 统计二叉树中叶子个数

c) 二叉树中所有左右子树交换

四、 实验步骤

#includestdio.h

#includeiostream.h

#includestdlib.h

#define size 100

typedef struct BiTNode

{

char data;

struct BiTNode *lchild, *rchild;

} binode, *bitree;

typedef struct

{

bitree data[size];

int tag[100];

int top;

}sqstack;

void initstack(sqstack t)

{

t.top=-1;

}

int stackempty(sqstack t)

{

if(t.top==-1)

return 1;

else

return 0;

}

int gettop(sqstack t,bitree a)

{

if(t.top==-1)

return 0;

else

{

a=t.data[t.top];

t.top--;

return 1;

}

}

int push(sqstack t,bitree a)

{

if(t.top==size-1)

return 0;

else

{

t.data[++t.top]=a;

return 1;

}

}

int pop(sqstack t,bitree a)

{

if(t.top==-1)

return 0;

else

{

a=t.data[t.top--];

return 1;

}

}

void createbitree(bitree T,char a[],int la,int ha,char b[],int lb,int hb)

{

int m;

char c;

if(laha)

T=NULL;

else

{

if(!(T=(bitree)malloc(sizeof(binode))))

exit(0);

else

{

T-data=a[la];

m=lb;

while(b[m]!=a[la]) m++;

createbitree(T-lchild,a,la+1,la+m-lb,b,lb,m-1);

createbitree(T-rchild,a,la+m-lb+1,ha,b,m+1,hb);

}

}

}

int createbitree(bitree T)

{

char a[5], b[5];

int i, j, n;

char ch;

n=0;

printf("abcd*badc\n");

scanf("%c", ch);

while( ch!='*' ) { a[n++]=ch; scanf("%c", ch);}

for(i=0; in; i++) scanf("%c", b[i]);

createbitree(T, a, 0, n-1, b, 0, n-1);

}

int preorder (bitree p)

{

sqstack S;

initstack(S);

printf("先序遍历\n");

while(!stackempty(S) || p!=NULL)

{

while(p!=NULL) //指向左子树

{

printf("%c ",p-data);

push(S,p); //非空时入栈

p=p-lchild;

}

pop(S,p); //指针出栈

p=p-rchild;

}

printf("\n");

}

int inorder (bitree p)

{

sqstack s;

initstack(s);

printf("中序遍历\n");

while(!stackempty(s)||p)

{

if(p)

{

push(s,p);

p=p-lchild;

}

else

{

pop(s,p);

printf("%c ",p-data);

p=p-rchild;

}

}

return 1;

}

void postorder(bitree p)

{

printf("\n");

sqstack s;

initstack(s);

printf("后序输出\n");

while(p||!stackempty(s))

{

while(p)

{

s.top++;

s.data[s.top]=p; //子树根结点进栈

s.tag[s.top]=0; //设此根结点标志初始化为0,表示左右孩子都没访问,当访问完左子树 tag 变为1

p=p-lchild; //进入左子树访问。(左子树根结点全部进栈)

}

while((s.top-1)(s.tag[s.top]==1))

{

p=s.data[s.top];

coutp-data" "; //没有孩子的根结点,也就是它父亲的左孩子或右孩子

s.top--;

}

if(s.top-1)

{

p=s.data[s.top];

s.tag[s.top]=1; //进入右子树 前,标志tag变为1

p=p-rchild; //进入右子树

}

else

p=NULL;

}

}

void CountLeaf (bitree T, int count)

{

if ( T )

{

if ((!T-lchild) (!T-rchild)) count++;

CountLeaf(T-lchild , count); //统计左子树中叶子个数

CountLeaf(T-rchild ,count); //统计右子树中叶子个数

}

}

int depthval=0,depthLeft=0, depthRight=0;

int Depth (bitree T )

{

if ( !T )

depthval = 0; // depthval是一个全程变量

else

{

depthLeft = Depth( T-lchild );

depthRight = Depth( T-rchild );

depthval = 1 + (depthLeft depthRight ? depthLeft : depthRight);

}

return depthval;

}

void change(bitree T)

{

bitree p,q;

if(T)

{

p=T-lchild;

T-lchild=T-rchild;

T-rchild=p;

change(T-lchild);

change(T-rchild);

}

}

void main()

{

bitree T;

int count=0;

createbitree(T) ;

preorder(T);

inorder(T);

postorder(T);

CountLeaf (T,count);

printf("\n");

printf("叶子的个数是:%d\n",count);

Depth ( T );

printf("树的深度是:%d\n",depthval);

printf("交换后。。。\n");

change(T);

preorder(T);inorder(T);

postorder(T);

}

C语言 查找算法实现

#include

int main() {

int i,x,n,*result = NULL;

int a[10],low,high,mid;

scanf_s("%d",n);

// 确保输入的数据是非递减的

for(i = 0 ; i n i 10 ; i++) {

scanf_s("%d",a[i]);

}

fflush(stdin); // 如果输入的数组元素多于10个,则废弃

scanf_s("%d",x);

low = 0,high = n - 1;

while(low = high) {

mid = (low + high) / 2;

if(x == a[mid]) {

result = a[mid]; // 这里给出的是查找到该元素的指针

break;

}

else if(x a[mid]) {

high = mid - 1;

}

else {

low = mid + 1;

}

}

if(result != NULL) {

printf("%d\n",*result);

}

else {

printf("no result\n");

}

return 0;

}

C语言实验报告怎么写?

#include stdio.h

int main()

{

  unsigned long a;

  char c;

  printf("Input a binary number:\n");

  for(a=0;(c=getchar())!='\n';)

      a=a*2+c-'0';

  printf("The number is %lu in decimal\n",a);

  printf("The number is %lo in octal\n",a);

  printf("The number is %lX in Hexadecimal\n",a);

  return 0;

}

咋写C语言实验报告

c(c++)上机实验报告格式:

⒈  实验目的  

(1) 了解在具体的语言环境下如何编辑、编译、连接和运行一个 C 程序。

⑵ 通过运行简单的 C 程序,初步了解 C 源程序的特点。

⑶ 掌握 C 语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。

⑷ 掌握不同的类型数据之间赋值的规律。

⑸ 学会使用 C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。

2.实验内容和步骤

⑴  检查所用的计算机系统是否已安装了 C 编译系统并确定他所在的子目录。

⑵ 进入所用的集成环境。

⑶ 熟悉集成环境的界面和有关菜单的使用方法。

⑷ 输入并运行一个简单的、正确的程序。

⒊ 实验题目

⑴ 输入下面的程序

# include “stdio.h” void main()

{ printf(“This is a c program.\n”); }

程序无误,其运行的结果为:

有谁能够告诉我c语言的实验报告怎么写?

实验题目:

编程实现:二叉树采用二叉链表存储,要求建立一棵二叉树,并输出要求的树状形式与结点编号。

结点结构为:

lchied Data num rchied

其中二叉树的num编号域为整数类型,data数据域为字符类型,

要求生成二叉树中编号,从1开始进行连续编号,每个结点的编号大于其左右子树中孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,

请给出对二叉树中结点的实现如上要求编号并按如下树状形式打印出相应点编号的程序。

测试数据:输入 AB∪D∪∪CE∪F∪∪∪ (其中符号“∪”表示空格(space)字符)

实验分析:

本题的考察点:二叉树遍历应用。本题主要涉及到对二叉树的创建,二叉树的打印,以及在遍历的时候顺便给每个节点编号,这样打印的时候顺便就把节点的序号也打印出来了。下面分别给出三个算法。

二叉树的创建算法:

二叉树的打印算法:

给结点的编号算法:

另外在这里也阐明一下二叉树的结构:

结合上面的四个算法,这个问题自然也就迎刃而解了,这样也就能得到这个问题的完整程序。

完整程序如下:

#includestdio.h

#includestdlib.h

typedef struct BiTNode

{

int num;

char data;

struct BiTNode *LChild,*RChild;

}BiTNode,*BiTree;

void CreateBiTree(BiTree *BT)

{

char ch;

ch=getchar();

if (ch==' ') (*BT)=NULL; /* #代表空指针*/

else

{

(*BT)=(BiTree) malloc(sizeof(BiTNode));/*申请结点 */

(*BT)-data=ch; /*生成根结点 */

CreateBiTree(((*BT)-LChild)); /*构造左子树 */

CreateBiTree(((*BT)-RChild)); /*构造右子树 */

}

}

void print(BiTree root,int nlayer)

{

int i;

if(root==NULL)return;

print(root-RChild,nlayer+4);

for(i=0;inlayer;i++)

printf(" ");

printf("%c%d\n",root-data,root-num);

print(root-LChild,nlayer+4);

}

void num(BiTree bt)

{

static int i=1; //定义静态全局变量

if(bt!=NULL)

{

num(bt-LChild);

num(bt-RChild);

bt-num=i;

i++;

}

}

int main()

{

BiTree bt;

printf("请输入相关字符以创建一个二叉树:\n");

CreateBiTree(bt);

num(bt);

print(bt,1);

return 0;

}

程序的测试结果:

实验总结:

在解决具体的实验问题时,我们要分析问题,将一个大的问题细分为一个个小的问题,再去分析解决一个个小的问题,这样就能很好的解决问题了。在平时的实验过程中,要注重培养自己的分析问题及解决问题的能力。

大致一个流程和格式是这样的,具体的可以自己添加。。。。

c语言实验报告总结怎么写

c语言实验报告总结这样写:

在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。

在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。

由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。包括了程序模块处理.简单界面程序.高级界面程序.程序的添加修改.用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。

上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。

学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。

为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:

1、加深对课堂讲授内容的'理解

课堂上要讲授许多关于c语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用c语言这个工具解决实际问题,又必须掌握它。

通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。

学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。

通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能多地发现程序中存在的问题。

自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。

2、熟悉程序开发环境、学习计算机系统的操作方法

一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。

通过上机实验,熟练地掌握c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。

3、学习上机调试程序

完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。

开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。

通过这次为数不多的几天计算机实践学习,我们了解了一些关于c语言的知识,理解巩固了我们c语言的理论知识,着对我们将来到社会工作将会有莫大的帮助。同时它让我知道,只要你努力,任何东西都不会太难!