有谁能够告诉我c语言的实验报告怎么写?
发布网友
发布时间:2022-05-19 00:33
我来回答
共1个回答
热心网友
时间:2023-11-24 16:42
实验题目:
编程实现:二叉树采用二叉链表存储,要求建立一棵二叉树,并输出要求的树状形式与结点编号。
结点结构为:
lchiedData numrchied
其中二叉树的num编号域为整数类型,data数据域为字符类型,
要求生成二叉树中编号,从1开始进行连续编号,每个结点的编号大于其左右子树中孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,
请给出对二叉树中结点的实现如上要求编号并按如下树状形式打印出相应点编号的程序。
测试数据:输入 AB∪D∪∪CE∪F∪∪∪ (其中符号“∪”表示空格(space)字符)
实验分析:
本题的考察点:二叉树遍历应用。本题主要涉及到对二叉树的创建,二叉树的打印,以及在遍历的时候顺便给每个节点编号,这样打印的时候顺便就把节点的序号也打印出来了。下面分别给出三个算法。
二叉树的创建算法:
二叉树的打印算法:
给结点的编号算法:
另外在这里也阐明一下二叉树的结构:
结合上面的四个算法,这个问题自然也就迎刃而解了,这样也就能得到这个问题的完整程序。
完整程序如下:
#include<stdio.h>
#include<stdlib.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;i<nlayer;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;
}
程序的测试结果:
实验总结:
在解决具体的实验问题时,我们要分析问题,将一个大的问题细分为一个个小的问题,再去分析解决一个个小的问题,这样就能很好的解决问题了。在平时的实验过程中,要注重培养自己的分析问题及解决问题的能力。
大致一个流程和格式是这样的,具体的可以自己添加。。。。
热心网友
时间:2023-11-24 16:42
实验题目:
编程实现:二叉树采用二叉链表存储,要求建立一棵二叉树,并输出要求的树状形式与结点编号。
结点结构为:
lchiedData numrchied
其中二叉树的num编号域为整数类型,data数据域为字符类型,
要求生成二叉树中编号,从1开始进行连续编号,每个结点的编号大于其左右子树中孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,
请给出对二叉树中结点的实现如上要求编号并按如下树状形式打印出相应点编号的程序。
测试数据:输入 AB∪D∪∪CE∪F∪∪∪ (其中符号“∪”表示空格(space)字符)
实验分析:
本题的考察点:二叉树遍历应用。本题主要涉及到对二叉树的创建,二叉树的打印,以及在遍历的时候顺便给每个节点编号,这样打印的时候顺便就把节点的序号也打印出来了。下面分别给出三个算法。
二叉树的创建算法:
二叉树的打印算法:
给结点的编号算法:
另外在这里也阐明一下二叉树的结构:
结合上面的四个算法,这个问题自然也就迎刃而解了,这样也就能得到这个问题的完整程序。
完整程序如下:
#include<stdio.h>
#include<stdlib.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;i<nlayer;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;
}
程序的测试结果:
实验总结:
在解决具体的实验问题时,我们要分析问题,将一个大的问题细分为一个个小的问题,再去分析解决一个个小的问题,这样就能很好的解决问题了。在平时的实验过程中,要注重培养自己的分析问题及解决问题的能力。
大致一个流程和格式是这样的,具体的可以自己添加。。。。