| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 612 人关注过本帖
标题:磕求解析程序!谢谢!
只看楼主 加入收藏
追风
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-9-6
收藏
 问题点数:0 回复次数:0 
磕求解析程序!谢谢!

#include "stob.cpp" #define NN 100

int OperPre(char x) { int sequence; int y; y=(int)x; switch(y) { case 42 : case 47 : sequence=1;break; case 43 : case 45 : sequence=2;break; case 40 : sequence=00;break; case 41 : sequence=11;break; default : sequence=99;break; } return sequence; }

char InputExp(char string[NN])//输入 { printf("请输入一个待转换的表达式:"); gets(string);

return *string;

} BiTNode *StoN(char *string,BiTNode *N,BiTNode *head)//由字符数组转换为链表 { int i=0; N=(BiTNode *)malloc(sizeof(BiTNode)); BiTNode *T,*Temp; printf("\n请确认!"); getch(); BiTNode *p; p=(BiTNode *)malloc(sizeof(BiTNode)); T=N;

while(!(string[i]=='\0')) {

N->data=string[i]; N->lc=NULL; N->rc=NULL; p=(BiTNode *)malloc(sizeof(BiTNode)); Temp=N; N->next=p; N=N->next; N->pre=Temp; i++; } N->data=NULL; N=T;

printf("\n您输入的是:"); while(N->data!=NULL) { printf("%c",N->data); N=N->next;

}

N=T; N->pre=head; head->next=N; head->data=NULL; //getch(); return N; }

void UniteTree(BiTNode *N,BiTNode *head)//建立成一棵二叉树 { BiTNode *Temp2,*Temp3,*p; Temp2=(BiTNode *)malloc(sizeof(BiTNode)); Temp3=(BiTNode *)malloc(sizeof(BiTNode)); Temp2=N->pre; p=(BiTNode *)malloc(sizeof(BiTNode)); p->data=NULL; if(Temp2->pre->data!=p->data) Temp2=Temp2->pre;//保存运算符前一个字符的*pre Temp3=N->next; if(Temp3->next->data!=p->data) Temp3=Temp3->next;//保留运算符后一个字符的*next N->lc=N->pre; N->rc=N->next; if(Temp2->pre->data!=p->data|Temp3->next->data!=p->data) { N->pre=Temp2; Temp2->next=N; N->next=Temp3; Temp3->pre=N; } else { p->data=NULL; N->pre=head; N->next=p; head->next=N; } if(Temp2->pre->data!=p->data|Temp3->next->data==p->data) { p->data=NULL; N->pre=Temp2->pre; N->next=p; } if(Temp2->pre->data==p->data|Temp3->next->data!=p->data) { N->pre=head; N->next=Temp3; } //建立树,返回头指针连接前后 }

BiTNode *Unite(BiTNode *N,BiTNode *head)//建立二叉树 { int *sequence; BiTNode *p,*gen; p=N;//记录树根

while(p->data!=NULL) {

if(OperPre(p->data)==1) { UniteTree(p,head);//若为乘除,首先建立二叉树 } p=p->next; } getch(); p=head->next; while(p->data!=NULL) {

if(OperPre(p->data)==2) { UniteTree(p,head);//若为加减,首先建立二叉树 } p=p->next; }

N=head->next; return N; }

void PrintTree(BiTNode *N)//打印二叉树详细情况 { if(N) { printf("\n\n\n以下输出此建立的二叉树的三级结点,请按任意键继续..."); getch(); printf("\n当前根结点为%c",N->data); } if(N->lc) printf("\n第二级第一结点为%c",N->lc->data); if(N->rc) printf("\n第二级第二结点为%c",N->rc->data); if(N->lc->lc) printf("\n第三级第一结点为%c",N->lc->lc->data); if(N->lc->rc) printf("\n第三级第二结点为%c",N->lc->rc->data); if(N->rc->lc) printf("\n第三级第三结点为%c",N->rc->lc->data); if(N->rc->rc) printf("\n第三级第四结点为%c",N->rc->rc->data);

}

void btos() { char string[NN]; BiTNode *head; head=(BiTNode *)malloc(sizeof(BiTNode)); //记录头指针 BiTNode *N; InputExp(string); N=StoN(string,N,head); printf("\n二叉树建立完毕!!"); N=Unite(N,head); printf("\n此二叉树的中序遍历为:"); InOrderTraverse(N); printf("\n此二叉树的先序遍历为:"); PreOrderTraverse(N); printf("\n此二叉树的后序遍历为:"); PostOrderTraverse(N); PrintTree(N); printf("\n\n请按任意键退出..."); getch(); } 同学编的程序!看不懂,请哪位高人指点迷津,Thanks!!

搜索更多相关主题的帖子: 解析 
2005-09-06 13:28
快速回复:磕求解析程序!谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014457 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved