当前位置:首页 » 编程语言 » c语言树需要初始化吗
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言树需要初始化吗

发布时间: 2022-08-05 18:41:59

A. c语言中局部结构体必须初始化吗

不一定的

只要你确保 使用值之前,结构体元素被赋值就可以了

不初始化 原始值就是随机值。

比如

structtest{inta;};
intmain()
{
structtestv;//不做初始化
scanf("%d",&v.a);//使用前赋值。
printf("%d ",v.a);
}

这样是完全可以的

B. C语言中的定义变量时,在什么条件下需要初始化在什么条件下又不用初始化

作为输入变量时不用初始化。作为储存变量值时不用,(即为赋值语句左值)例:int a=2,b;b=a;

C. 二叉树的基本操作 C语言版的

#include<stdio.h>
#include<malloc.h>
int count=0;
typedef struct BiTNode { // 结点结构
char data;
struct BiTNode *lchild, *rchild; // 左右孩子指针
} BiTNode, *BiTree;

void CreateBiTree(BiTree &T){
char ch;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
if(!(T = (BiTNode * )malloc(sizeof(BiTNode)))) return;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}//CreatBiTree
int PreOrder(BiTree T)//先序遍历二叉树的递归算法
{
if (!T) return 0;
printf("%c ",T->data); // 访问结点
PreOrder(T->lchild); // 遍历左子树
PreOrder(T->rchild);// 遍历右子树
return 1;
}
int InOrder(BiTree T)//先序遍历二叉树的递归算法
{
if (!T) return 0;

InOrder(T->lchild); // 遍历左子树
printf("%c ",T->data); // 访问结点
InOrder(T->rchild);// 遍历右子树
return 1;
}
int PostOrder(BiTree T)//先序遍历二叉树的递归算法
{
if (!T) return 0;

PostOrder(T->lchild); // 遍历左子树
PostOrder(T->rchild);// 遍历右子树
printf("%c ",T->data); // 访问结点
return 1;
}
int CountLeaf (BiTree T){
//返回指针T所指二叉树中所有叶子结点个数
if (!T ) return 0;//空树
if (!T->lchild && !T->rchild) return 1;//只有树根
int m;
int n;
m = CountLeaf( T->lchild);

n = CountLeaf( T->rchild);

return (m+n);

} // CountLeaf

void main(){
int a;
BiTree T;
CreateBiTree(T);
printf("先序遍历:");
PreOrder(T);
printf("中序遍历:");
InOrder(T);
printf("后序遍历:");
PostOrder(T);
a=CountLeaf(T);
printf("叶子节点个数:");
printf("%d",a);
}

D. 在C语言编程中,定义一个数组时要不要初始化

不是不能初始化,是初始化的不对。另外,数组最好用memset初始化。

(1)在定义数组时对数组元素赋以初值。如:

static int a[10]={0,1,2,3,4,5,6,7,8,9};

经过上面的定义和初始化后,a[0]=0,a[1]=1,… ,a[9]=9。

(2)初始化时可以只对一部分元素赋初值。例如:

static int a[10]={0,1,2,3,4};

定义的数组有10个元素,但只对其中前5个元素赋了初值,后5个元素初值为0。

(4)c语言树需要初始化吗扩展阅读

数组的三种初始化方式

1、静态初始化

除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。例 int[] a={1,2,3};//静态初始化基本类型数组

Man[] mans={new Man(1,1),new Man(2,2)};//静态初始化引用类型数组

2、动态初始化

数组定义与为数组元素分配空间并赋值的操作分开进行。int[] a1=new int[2];//动态初始化元素,先分配空间。

a1[0]=1;//给数组元素赋值

a1[2]=2;

3、数组的默认初始化

数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

实例:int a2[]=new int[2];//默认值0,0

boolean[] b=new boolean[2];//默认值 false,false

String[] s=new String[2];//默认值null

E. c语言数组必须初始化吗

你好,c语言数组不是必须要初始化

F. c语言 关于二叉树的创建和遍历(中序遍历)

这个还是我学《数据结构》时做的有关二叉树的练习呢,本来是全的,包括树的初始化,建立,遍历(中序、前序、后序和层次),还有输出,复制,删除节点,求深度,树的删除等等,看你只问了有关创建和中序遍历的,所以选了一部分给你,供你参考吧!
#include <stdio.h>
#include <malloc.h>
#define MaxSize 10
#define Number 30
struct BiTNode{//定义数据结构
char data;
BiTNode *lchild,*rchild;
};
void InitBtree(BiTNode * &BT){//初始化二叉树
BT=NULL;
}
void CreateBiTree(BiTNode *&BT,char *str){//建立二叉树
BiTNode *s[MaxSize];//这里定义了一个数组用作堆栈方便检查输入和操作
int top=-1;
BT=NULL;
BiTNode *p=NULL;
int k, j=0;
char ch;
ch=str[j];
while(ch!='\0'){
switch(ch){
case '(':
top++;
s[top]=p;
k=1;
break;
case ')':
top--;
break;
case ',':
k=2;
break;
default:
p=(struct BiTNode *) malloc(sizeof(struct BiTNode));
p->data=ch;
p->lchild=p->rchild=NULL;
if(BT==NULL)
BT=p;
else{
if(k==1)
s[top]->lchild=p;
else
s[top]->rchild=p;
}
}
j++;
ch=str[j];
}
}
void inorder(BiTNode *BT){//中序遍历二叉树——递归形式
if(BT!=NULL){
inorder(BT->lchild );
printf("%c ",BT->data);
inorder(BT->rchild );
}
}

void main(){
BiTNode *BT;
printf("以广义表形式表示输入的二叉数 (如A(B(C,D),E(,F))的形式)\n\n");
char string[Number]="A(B(,C),D(E(F),G(,H)))";
//如果想要自己输入,可以将下边的注释去掉,然后自己按照广义表形式输入,
//(如上例的形式)此处为了方便查看,用了默认的数值
//这里之所以用此种形式(广义表形式输入)是为了保证输入的数组成的二叉树完全符合你所定义的树的形状
/*char string[Number],ch;
int i=0;
ch=getchar();
while(ch!='\n' && i<Number){
string[i]=ch;
i++;
ch=getchar();
}
string[i]='\0';
*/

InitBtree(BT);//初始化二叉树
CreateBiTree(BT,string);//创建二叉树
printf("\n中序遍历二叉树顺序为: ");
inorder(BT);//中序遍历二叉树
printf("\n");
}
程序不复杂,所以只是加了必要和最简单的注释,相信你看看应该完全可以理解的,祝你进步!

G. c语言 中序遍历线索2插树 要求写出定义 初始化 和遍历函数

#include <stdio.h>
#include <malloc.h>
typedef enum{Link,Thread} PointerTag; //指针标志
typedef int DataType;
typedef struct BiThreTree{ //定义结点元素
PointerTag LTag,RTag;
DataType data;
struct BiThreTree *lchild,*rchild;
}BiThreTree;
BiThreTree *pre; //全局变量,用于二叉树的线索化
BiThreTree *CreateTree() //按前序输入建立二叉树
{
BiThreTree *T;
DataType e;
scanf("%d",&e);
if(e==0)
T=NULL;
else
{T=(BiThreTree *)malloc(sizeof(BiThreTree));
T->data=e;
T->LTag=Link; //初始化时指针标志均为Link
T->RTag=Link;
T->lchild=CreateTree();
T->rchild=CreateTree();
}
return T;
}
void InThread(BiThreTree *T)
{
BiThreTree *p;
p=T;
if(p)
{
InThread(p->lchild);
if(!p->lchild)
{ p->LTag=Thread;
p->lchild=pre;
}
if(!pre->rchild)
{ pre->RTag=Thread;
pre->rchild=p;
}
pre=p;
InThread(p->rchild);
}
}
BiThreTree *InOrderThrTree(BiThreTree *T) //中序线索化二叉树
{
BiThreTree *Thre; //Thre为头结点的指针
Thre=(BiThreTree *)malloc(sizeof(BiThreTree));
Thre->lchild=T;
Thre->rchild=Thre;
pre=Thre;
InThread(T);
pre->RTag=Thread;
pre->rchild=Thre;
Thre->rchild=pre;
return Thre;
}
void InThrTravel(BiThreTree *Thre) //中序遍历二叉树
{
BiThreTree *p;
p=Thre->lchild;
while(p!=Thre) //指针回指向头结点时结束
{
while(p->LTag==Link)
p=p->lchild;
printf("%4d",p->data);
while(p->RTag==Thread&&p->rchild!=Thre)
{p=p->rchild;
printf("%4d",p->data);
}
p=p->rchild;
}
}
int main()
{
BiThreTree *T,*Thre;
T=CreateTree();
Thre=InOrderThrTree(T);
InThrTravel(Thre);
system("pause");
}
运行时,分别输入(前序输入):1 2 3 0 0 4 0 5 0 0 6 0 0

建立如下所示的二叉树:

1

2 6

3 4

5

中序遍历输出:3 2 4 5 1 6

H. C语言中:静态变量是不是可以不需要初始化

可以,但是如果没有初始化,则静态变量的内存在编译时会自动清零。