#include?"stdio.h"
創(chuàng)新互聯(lián)專注于玉山企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),電子商務(wù)商城網(wǎng)站建設(shè)。玉山網(wǎng)站建設(shè)公司,為玉山等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
#include?"stdlib.h"
typedef?struct?btnode//二叉鏈表類型定義
{char?data;
struct?btnode?*lchild,*rchild;
}bintree,*Bintree;
typedef?struct?LinkQueueNode//鏈隊(duì)列類型定義
{bintree?*data;
struct?LinkQueueNode?*next;
}LKQueNode;
typedef?struct?LKQueue
{LKQueNode?*front,*rear;
}LKQue;
void?InitQueue(LKQue?*LQ)//初始化隊(duì)列
{LKQueNode?*p;
p=(LKQueNode*)malloc(sizeof(LKQueNode));
LQ-front=p;
LQ-rear=p;
(LQ-front)-next=NULL;
}
int?EmptyQueue(LKQue?*LQ)//判斷隊(duì)列是否為空
{if(LQ-front==LQ-rear)
return?1;
else?return?0;
}
void?EnQueue(LKQue?*LQ,Bintree?x)//入隊(duì)列
{LKQueNode?*p;
p=(LKQueNode*)malloc(sizeof(LKQueNode));
p-data=x;
p-next=NULL;
(LQ-rear)-next=p;
LQ-rear=p;
}
int?OutQueue(LKQue?*LQ)//出隊(duì)列
{LKQueNode?*s;
if?(?EmptyQueue(LQ))
{exit(0);return?0;}
else
{s=(LQ-front)-next;
(LQ-front)-next=s-next;
if(s-next==NULL)
LQ-rear=LQ-front;
free(s);
return?1;}
}
Bintree?GetHead(LKQue?*LQ)//取隊(duì)列首元素
{LKQueNode?*p;bintree?*q;//q-data=-1;?錯(cuò)誤在這里沒有分配空間就賦值
if(EmptyQueue(LQ))
return?q;
else?{p=LQ-front-next;
return?p-data;
}
}?
Bintree?initiate()//建二叉樹?
{char?ch;Bintree?t;
ch=getchar();????
if(ch=='#')?t=NULL;
else
{t=(Bintree)malloc(sizeof(bintree));
t-data=ch;
t-lchild=initiate();
t-rchild=initiate();
}
return?t;
}
void?Visit(Bintree?p)//訪問節(jié)點(diǎn)
{printf("%c",p-data);?//輸出是char
}
int?height(Bintree?t)
{int?ld,rd;
if(t==NULL)?return?0;
else?
{ld=height(t-lchild);
rd=height(t-rchild);
return?1+(ldrd?ld:rd);
}
}
void?levelorder(Bintree?bt)//層次遍歷
{LKQue?Q;Bintree?p;
InitQueue(Q);
if(bt!=NULL)
{EnQueue(Q,bt);
while(!EmptyQueue(Q))
{p=GetHead(Q);
OutQueue(Q);
Visit(p);
if(p-lchild!=NULL)??EnQueue(Q,p-lchild);
if(p-rchild!=NULL)??EnQueue(Q,p-rchild);
}
}
}
void?main()
{Bintree?T;
T=initiate();
printf("%d",height(T));
levelorder(T);
}
return "head"; 為什么函數(shù)返回是字符串,你的返回類型是結(jié)構(gòu)體指針的
cannot convert `const char*' to `a*' in return
不能反轉(zhuǎn)char * 到 a* 的返回值
#include stdio.h
#include malloc.h
#define Len sizeof(a)
#define null 0
#include conio.h
struct a
{
int k;
struct a *next;
};
struct a* gethead()//建立
{
struct a *head, *p2;
printf("please enter data.");
head=p2=(struct a*)malloc(Len);
scanf("%d",p2-k); //輸入要地址
while(p2-k!=0)
{
p2-next=(struct a*)malloc(Len);
p2=p2-next;
scanf("%d",p2-k); //輸入要地址
}
p2-next=null;
return head; //返回指針
}
main()
{
struct a * head=gethead(); //變量名都沒有
}
有兩個(gè)地方錯(cuò)誤
1:IsEmpty函數(shù)中是空返回真,非空返回假,你寫反了
int?IsEmpty(LinkQueue?*Q)
{
if(Q-front==Q-rear)
return(TRUE);////////////
else??return(FALSE);/////////////
}
2:GetHead函數(shù)中*x=Q-front-next-data;因?yàn)镼-front只是頭指針,不保存數(shù)據(jù)
int?GetHead(LinkQueue?*Q,int?*x)
{
if(!IsEmpty(Q))
{
*x=Q-front-next-data;///////////////
return(TRUE);
}
else?return(FALSE);
}
就幾個(gè)明顯的錯(cuò)誤提一下
1. 函數(shù) enterqueue中
s-queue[s-tear];
這句沒有實(shí)際操作,估計(jì)應(yīng)該是 s-queue[s-tear] = x; 用于在隊(duì)列最后添加一個(gè)新的元素
2. 主函數(shù)中,大約21行左右
for(j=0;jk;j++)
{
deletequeue(l,e);
if(gethead(l,f)==0) // 這里多了一個(gè)分號(hào),導(dǎo)致判斷后沒有任何動(dòng)作可之心,刪之
*f=0;
*e=*e+*f;
enterqueue(l,*e);
}
3. 主函數(shù)大約30行左右,打印輸出
for(j=0;jl-tear;j++,p++) // 這里不可用i作循環(huán)變量,否則干擾外循環(huán)i
printf("%d ",*p);
4. deletequeue(l,e);
if(gethead(l,f)==0) // 多了分號(hào)
*f=0;
*e=*e+*f;
從語句目的看,是希望從deletequeue和gethead函數(shù)中,得到e或者f的地址,但是 1)由于傳遞的是指針的值,所以即使函數(shù)中修改了,主函數(shù)中無法得到新的地址;2)這兩個(gè)函數(shù)體中,并沒有設(shè)置地址的代碼,總之,e 和 f 是沒有可操作地址的
5. 最重要一點(diǎn),沒有看懂解題思路是什么。
即使按照刪一個(gè)節(jié)點(diǎn),再添兩個(gè)節(jié)點(diǎn)的想法,也應(yīng)該從隊(duì)列的后面開始,這樣間隔相加,并放在后移一個(gè)位置上,不至于影響后續(xù)計(jì)算。而這段程序從前開始修改隊(duì)列,那新的節(jié)點(diǎn)產(chǎn)生,不就干擾后面的計(jì)算了?
所以,建議先說明一下解題思路,這樣便于解決程序中的各種問題。