| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 803 人关注过本帖
标题:自己写的一个代码,分配空间时出错(没出错信息)以至于没按意图执行程序
只看楼主 加入收藏
a5648c
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-29
收藏
 问题点数:0 回复次数:2 
自己写的一个代码,分配空间时出错(没出错信息)以至于没按意图执行程序
#include "stdio.h"
#include "malloc.h"
#define stack_size 100
#define addsize 20


typedef struct BNode
{  char data;  //二叉树中的元素类型为char类型
  struct BNode *lchild;
struct BNode *rchild;
} *BiTree;


void CreatBiTree(BiTree &T)  //先序创建二叉树
{  char ch;
   scanf("%c",&ch);
   if(ch=='$') T=NULL;  //当输入'$'时表示创建的二叉树为空树
   else
{  T=(BiTree)malloc(sizeof(struct BNode));
      T->data=ch;
      CreatBiTree(T->lchild);
      CreatBiTree(T->rchild);
   }
}

typedef struct {
BiTree *elem;
int top ;
int stacksize;
}stack;


int Initstack(stack&p)
{p.elem=(BiTree*)malloc(stack_size*sizeof(BiTree));
p.stacksize=stack_size;
if (!p.elem)
return 0;
p.top=0;
return 1;
}


int push(stack&p,BiTree e)
{if (p.top==p.stacksize-1)
{p.elem=(BiTree*)malloc((stack_size+addsize)*sizeof(BiTree));

if(!p.elem)
return 0;}
p.elem[p.top++]=e;
return 1;
}



BiTree pop(stack & p,BiTree e)
{if (p.top<=0)
return e=NULL;
e=p.elem[--p.top];
return e;}


BiTree gettop(stack&p,BiTree e)
{if (p.top<=0)
return e=NULL;
e=p.elem[p.top-1];
return e; }

int empty(stack&p)
{if(p.top<=0)
return 1;
return 0;}




void Preorder_N(BiTree T) //先序非递归遍历
//利用顺序栈实现二叉树的先序非递归遍历算法;顺序栈的实现参见实验二
{   stack S; //定义一个栈S,栈中元素为BiTree类型
    BiTree p;
Initstack(S);
push(S,T);
p=(BiTree)malloc(sizeof(BiTree));//貌似是这里

  while(!empty(S))  //当栈非空时
{  
     while (gettop(S,p)&&p)
{
   printf("%c",p->data); push(S,p->lchild);}
   pop(S, p);//空指针出栈
   if(!empty(S))
{ pop(S,p); push(S,p->rchild);}
    } }
void main()
{   BiTree T;
    CreatBiTree(T);
    Preorder_N(T);
}

当我输入:a$$
输出的却是一堆相同的乱码。
能有人告诉我为什么吗?
谢谢
搜索更多相关主题的帖子: 执行程序 意图 空间 以至于 代码 
2008-11-14 20:30
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
你的问题在于没有搞清楚参数的传递问题,比如函数:
BiTree gettop(stack&p,BiTree e)
你在使用的时候是希望把结果放在参数e中回传,但使用形参是没办法把结果回传的,改为
BiTree gettop(stack&p,BiTree& e)
使用引用,结果就被正确回传了.其它的也是一样.总之要用准确的代码来反应你的思路,否则运行的结果可就不是你的思路所想要的.
2008-11-15 19:27
a5648c
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-29
收藏
得分:0 
谢谢了~问题已经解决了就少了个&
2008-11-26 14:24
快速回复:自己写的一个代码,分配空间时出错(没出错信息)以至于没按意图执行程 ...
数据加载中...
 
   



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

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