當前位置:首頁 » 編程語言 » 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語言中:靜態變數是不是可以不需要初始化

可以,但是如果沒有初始化,則靜態變數的內存在編譯時會自動清零。