注册 登录
编程论坛 数据结构与算法

关于栈的插入的调试,请高手看看错在哪里

尘埃落雪 发布于 2010-10-22 10:30, 774 次点击
#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 编辑 ]
5 回复
#2
寒风中的细雨2010-10-22 12:06
Status Push(SqStack S, const SElemType &e)

 Push(S,1);
#3
寒风中的细雨2010-10-22 12:11
在上面 1 是一个常量  
而在 函数的定义中 用的是 引用  在调用的过程中 不存在隐式的类型装换 因为1的值是不能改变的
而 函数中的e是可以改变的  所以编译是过不去的
所以 要改成 const

另外 也可以不用 引用 因为进栈的时候 没有必要返回 值的 Status Push(SqStack S, SElemType e)这样也是可以的  存在转换
#4
取而代之2010-10-25 21:18
#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");
      
}
#5
windgone3142010-11-03 16:22
回复 3楼 寒风中的细雨
这里版主说的转换和引用是怎么回事,在学C的时候我就对函数参数的调用存在问题。
push(s,1);   1是常量,如果换成int a= 1;push(s,a);那const是否可以不用?
#6
寒风中的细雨2010-11-03 17:03
这是 c++ 里面的
标注c  (.c文件) 是不可以用这些的
c++兼容 c  这里 建立的是(.cpp文件  也是系统默认的)
1