首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问一个关于栈的有关问题。c语言版

2012-03-25 
请教一个关于栈的问题。c语言版# include stdio.h# include malloc.h# define STACK_INIT_SIZE 100# de

请教一个关于栈的问题。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++;
}

[解决办法]

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;
}


*(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);
Freestack(&s);
}[code=C/C++][/code]

热点排行