请问一个关于栈的有关问题。c语言版
请教一个关于栈的问题。c语言版
# include <stdio.h>
# include "malloc.h"
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef struct {
int *top;
int *base;
int stacksize;
}Sqstack;
int Initstack(Sqstack *s)//建立一个有100个数据的栈
{
s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));//分配空间
if(!s->base)
return 0;
s->base=s->top;
s->stacksize=STACK_INIT_SIZE;
return 1;
}
void Freestack(Sqstack *s)//释放栈
{
free(s->base);
}
void Pushelem(Sqstack*s,int elem)//往栈里面插入元素
{
if(s->top-s->base>=s->stacksize)//如果栈满的话。再分配空间
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
return ;
s->top=STACK_INIT_SIZE+s->base;
s->stacksize+=STACKINCREMENT;
}
*(s->top)=elem;
s->top++;
}
void Printelem(Sqstack*s)//输出栈里面的内容
{
int *p;
p=s->base;
if(s->top==s->base){
printf("这是一个空栈\n");
return ;
}
while(p<=s->top){
printf("%3d",*p++);
}
}
void main()
{
Sqstack s;
Initstack(&s);
int i;
for(i=0;i<10;i++)
Pushelem(&s,i);
Printelem(&s);
free(&s);
}
高手帮我看看哪里错了。怎么不能运行啊
------解决方案--------------------
void Pushelem(Sqstack*s,int elem)//往栈里面插入元素
{
s=(Sqstack*)malloc(sizeof(Sqstack));
//首先,你有指针没分配内存就用,接着的问题 你自己单步跟踪下吧
if(s->top-s->base>=s->stacksize)//如果栈满的话。再分配空间
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
return ;
s->top=STACK_INIT_SIZE+s->base;
s->stacksize+=STACKINCREMENT;
}
*(s->top)=elem;
s->top++;
}
------解决方案--------------------
# include <stdio.h>
# include "malloc.h"
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef struct {
int *top;
int *base;
int stacksize;
}Sqstack;
int Initstack(Sqstack *s)//建立一个有100个数据的栈
{
s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));//分配空间
if(!s->base)
return 0;
s->base=s->top;
s->stacksize=STACK_INIT_SIZE;
return 1;
}
void Freestack(Sqstack *s)//释放栈
{
free(s->base);
}
void Pushelem(Sqstack*s,int elem)//往栈里面插入元素
{
if(s->top-s->base>=s->stacksize)//如果栈满的话。再分配空间
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
return ;
s->top=STACK_INIT_SIZE+s->base;
s->stacksize+=STACKINCREMENT;
}
*(s->top)=elem;
s->top++;
}
void Printelem(Sqstack*s)//输出栈里面的内容
{
int *p;
p=s->base;
if(s->top==s->base){
printf("这是一个空栈\n");
return ;
}
while(p<=s->top){
printf("%3d",*p++);
}
}
void main()
{
Sqstack s;
Initstack(&s);
int i;
for(i=0;i<10;i++)
Pushelem(&s,i);
Printelem(&s);
free(&s);
}
高手帮我看看哪里错了。怎么不能运行啊
------解决方案--------------------
void Pushelem(Sqstack*s,int elem)//往栈里面插入元素
{
s=(Sqstack*)malloc(sizeof(Sqstack));
//首先,你有指针没分配内存就用,接着的问题 你自己单步跟踪下吧
if(s->top-s->base>=s->stacksize)//如果栈满的话。再分配空间
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
return ;
s->top=STACK_INIT_SIZE+s->base;
s->stacksize+=STACKINCREMENT;
}
*(s->top)=elem;
s->top++;
}
------解决方案--------------------
- C/C++ code
void Printelem(Sqstack*s)//输出栈里面的内容 { int *p; p=s->base; if(s->top==s->base){ printf("这是一个空栈\n"); return ; } while(p<s->top){ /*这里改为p<s->top*/ printf("%3d",*p++); } }
------解决方案--------------------
还有,建议楼主当分配内存失败时,用exit直接退出.
主函数调用Initstack函数,该函数执行,分配失败return;还会返回到main函数中继续执行后面的操作。
其实没必要了,栈的空间分配都失败了,下面的操作就没意义了.
- C/C++ code
int Initstack(Sqstack *s)//建立一个有100个数据的栈 { s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));//分配空间 if(!s->base) { exit(1); //mark //return 0; } s->top=s->base;//这个地方错了主要是 s->stacksize=STACK_INIT_SIZE; return 1; }
------解决方案--------------------
帮朋友,高手给楼主讲讲啊!定
------解决方案--------------------
[code=C/C++][/code]# include <stdio.h>
# include "malloc.h"
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef struct {
int *top;
int *base;
int stacksize;
}Sqstack;
int Initstack(Sqstack *s)//建立一个有100个数据的栈
{
s->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));//分配空间
if(!s->base)
return 0;
s->top=s->base;//这个地方错了主要是
s->stacksize=STACK_INIT_SIZE;
return 1;
}
void Freestack(Sqstack *s)//释放栈
{
free(s->base);
}
void Pushelem(Sqstack*s,int elem)//往栈里面插入元素
{
if(s->top-s->base>=s->stacksize)//如果栈满的话。再分配空间
{
s->base=(int*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(int));
if(!s->base)
return ;
s->top=STACK_INIT_SIZE+s->base;
s->stacksize+=STACKINCREMENT;
}