注册 登录
编程论坛 新人交流区

这个关于栈的算法错在哪?

不离不弃 发布于 2007-11-03 17:11, 288 次点击

#include "Stdio.h"
#include "Conio.h"

typedef struct Node //定义栈
{
int data;
struct Node *next;
}Node,*LKStack;

void inistack(LKStack *s) //初始化栈
{
*s=(Node*)malloc(sizeof(Node));
(*s)->next=NULL;
}

int isEmpty(LKStack s) //判空
{
return s->next==NULL;
}

int push(LKStack s,int e) 入栈
{
Node *r;
r=(Node*)malloc(sizeof(Node));

if(r==NULL) return 0;
r->data=e;
r->next=s->next;
s->next=r;
}

int pop(LKStack s,int *e) //出栈
{
Node *r;
if(isEmpty(s)) return 0;
r=s->next;
s->next=r->next;
*e=r->data;
free(r);
}

int gettop(LKStack s,int *e)//取栈顶元素
{
if(isEmpty(s)) return 0;
*e=s->next->data;
}
void main(void) //把八进制1357转换成十进制数
{
int a=1357;
int b,e;
Node *s;
while(a)
{
b=a%8;
a=a/8;
push(s,b);
}
while(isEmpty(s))
{

pop(s,e);
printf("%d",e);
}
}
不显示结果,是怎么回事啊 ?大虾们谢谢了 !

3 回复
#2
gewalaaa2007-11-03 21:33

好像这句中*s=(Node*)malloc(sizeof(Node))的node*有空格

#3
tianxia_buaa2007-11-03 23:01

我觉得你应该好好再看一下指针和堆栈的概念,你在main()中定义的Node *s是没有被分配空间的,在执行你定义的pop()和push()时内存会出现问题的
建议你能写得简单一些,没必要非要用*LKStack之类的,如果是刚学的话最好不要轻易用二级指针

[此贴子已经被作者于2007-11-4 12:51:01编辑过]

#4
禾今2007-11-04 00:10
把八进制1357转换成十进制数
如果只是完成此题,则没必要做栈,可以把得到的数组逆序输出即可
1