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

renbin5566 2010-04-28 03:55:58
# 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);
}
高手帮我看看哪里错了。怎么不能运行啊
...全文
167 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
周靖峰 2010-04-28
  • 打赏
  • 举报
回复
# 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);
}
尹成 2010-04-28
  • 打赏
  • 举报
回复
帮朋友,高手给楼主讲讲啊!定
renbin5566 2010-04-28
  • 打赏
  • 举报
回复
谢谢。知道了,
huanmie_09 2010-04-28
  • 打赏
  • 举报
回复
还有,建议楼主当分配内存失败时,用exit直接退出.
主函数调用Initstack函数,该函数执行,分配失败return;还会返回到main函数中继续执行后面的操作。
其实没必要了,栈的空间分配都失败了,下面的操作就没意义了.

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;
}
huanmie_09 2010-04-28
  • 打赏
  • 举报
回复

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++);
}
}
aweer 2010-04-28
  • 打赏
  • 举报
回复
嗯。。漏看了。。最近眼睛真不好使。
renbin5566 2010-04-28
  • 打赏
  • 举报
回复
# 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);
}
aweer 2010-04-28
  • 打赏
  • 举报
回复
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++;
}

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧