| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 774 人关注过本帖
标题:关于栈的插入的调试,请高手看看错在哪里
只看楼主 加入收藏
尘埃落雪
Rank: 2
等 级:论坛游民
帖 子:34
专家分:17
注 册:2010-6-7
结帖率:88.89%
收藏
已结贴  问题点数:5 回复次数:5 
关于栈的插入的调试,请高手看看错在哪里
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define STACK_INT_SIZE 100
#define STACKINCRMENT 10

#define ERROR 0
#define OK 1

typedef int Status;
typedef int SElemType;
typedef struct
{
   SElemType *base;
   SElemType *top;
   int stacksize;        
}SqStack;
int  InitStack(SqStack &S)
{
   S.base=(SElemType *)malloc(STACK_INT_SIZE*sizeof(SElemType));
   if(!S.base)
   {
      printf("OVERFLOW");
      exit(-1);            
   }           
   S.top=S.base;
   S.stacksize=STACK_INT_SIZE;
   return OK;     
}//InitStack;

Status Push(SqStack S,SElemType &e)
{
   if(S.top-S.base>=S.stacksize)
   {
      S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCRMENT)*sizeof(SElemType));
      if(!S.base)
      {
         printf("OVERFLOW");
         exit(-1);           
      }           
      S.top=S.base+S.stacksize;
      S.stacksize+=STACKINCRMENT;                        
   }      
   *S.top++=e;
   return OK;
}//push



 main()
{
   SqStack S;
   InitStack(S);
   
   Push(&S,1);
   system("pause");
      
}


[ 本帖最后由 尘埃落雪 于 2010-10-22 10:41 编辑 ]
搜索更多相关主题的帖子: 调试 
2010-10-22 10:30
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
Status Push(SqStack S, const SElemType &e)

 Push(S,1);
2010-10-22 12:06
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:3 
在上面 1 是一个常量  
而在 函数的定义中 用的是 引用  在调用的过程中 不存在隐式的类型装换 因为1的值是不能改变的
而 函数中的e是可以改变的  所以编译是过不去的
所以 要改成 const

另外 也可以不用 引用 因为进栈的时候 没有必要返回 值的 Status Push(SqStack S, SElemType e)这样也是可以的  存在转换
2010-10-22 12:11
取而代之
Rank: 2
等 级:论坛游民
帖 子:32
专家分:53
注 册:2010-7-11
收藏
得分:2 
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define STACK_INT_SIZE 100
#define STACKINCRMENT 10

#define ERROR 0
#define OK 1

typedef int Status;
typedef int SElemType;
typedef struct
{
   SElemType *base;
   SElemType *top;
   int stacksize;        
}SqStack;
int  InitStack(SqStack &S)
{
   S.base=(SElemType *)malloc(STACK_INT_SIZE*sizeof(SElemType));
   if(!S.base)
   {
      printf("OVERFLOW");
      exit(-1);            
   }           
   S.top=S.base;
   S.stacksize=STACK_INT_SIZE;
   return OK;     
}//InitStack;

Status Push(SqStack &S,const SElemType &e)
{
   if(S.top-S.base>=S.stacksize)
   {
      S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCRMENT)*sizeof(SElemType));
      if(!S.base)
      {
         printf("OVERFLOW");
         exit(-1);           
      }           
      S.top=S.base+S.stacksize;
      S.stacksize+=STACKINCRMENT;                        
   }      
   *S.top++=e;
   return OK;
}//push



main()
{
   SqStack S;
   InitStack(S);
   
   Push(S,1);
   system("pause");
      
}
2010-10-25 21:18
windgone314
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2010-10-13
收藏
得分:0 
回复 3楼 寒风中的细雨
这里版主说的转换和引用是怎么回事,在学C的时候我就对函数参数的调用存在问题。
push(s,1);   1是常量,如果换成int a= 1;push(s,a);那const是否可以不用?
2010-11-03 16:22
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
这是 c++ 里面的
标注c  (.c文件) 是不可以用这些的
c++兼容 c  这里 建立的是(.cpp文件  也是系统默认的)
2010-11-03 17:03
快速回复:关于栈的插入的调试,请高手看看错在哪里
数据加载中...
 
   



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

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