数据结构 实现栈代码哪不对 , 找好久没找到

yulu27 2013-08-22 10:42:59
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

typedef struct Node
{
int value;
struct Node * next;
}NODE , *PNODE;
typedef struct Stack
{
PNODE top;
PNODE bottom;
}STACK,*PSTACK;

void init(PSTACK);
void push(PSTACK , int);
bool pop(PSTACK , int *);
void traversal(PSTACK ps);
bool Empty(PSTACK);
int main()
{
int * value;
STACK s;
push(&s , 1);
push(&s , 2);
traversal(&s);
pop(&s , value); // 可能是这错了
traversal(&s);
return 0;
}

void init(PSTACK ps)
{
ps->top = (PNODE)malloc(sizeof(NODE));
if(ps->top == NULL)
{
printf("内存分配失败");
exit(-1);
}
else
{
ps->bottom = ps->top;
ps->top->next = NULL;
}
return;
}

bool Empty(PSTACK ps)
{
if(ps->top == ps->bottom)
{
return true;
}
else
{
return false;
}
}

void push(PSTACK ps , int value)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL)
{
printf("内存分配失败");
return;
}


pNew->value = value;
pNew->next = ps->top;
ps->top = pNew; // top 指向 new
return;
}

bool pop(PSTACK ps, int *value)
{
if(Empty(ps))
{
exit(-1);
}
PNODE p = ps->top;
*value = p->value;


ps->top = ps->top->next;
free(p);
p = NULL;
return true;

}

void traversal(PSTACK ps)
{
PNODE p = ps->top;

while(p != ps->bottom)
{
printf("%d " , p->value);
p = p->next;
}
printf("\n");
return ;
}
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-08-23
  • 打赏
  • 举报
回复
*A等价于A[0]
老鼠期待爱 2013-08-23
  • 打赏
  • 举报
回复
VALUE这个仅仅是个指针,没有分配存储空间,你要是用*VALUE的话,具体的放在内存的哪里? 你可以用数组或者在使用VALUE之前,手动的给他申请一下内存空间 这样你赋值的时候就可以了
max_min_ 2013-08-23
  • 打赏
  • 举报
回复
引用 6 楼 yulu27 的回复:
[quote=引用 5 楼 max_min_ 的回复:] [quote=引用 1 楼 yulu27 的回复:] 找到哪错了 *value = p->value; 为什么会错?

int  value = 0; //改成这样吧!定义int型
pop(&s , &value); // 这样value的地址
[/quote] 还是不对, 只能value是指针 *value = &(p->value); 再把p->value转成地址 [/quote]
int  *value =  new int;//这样吧!
yulu27 2013-08-23
  • 打赏
  • 举报
回复
引用 5 楼 max_min_ 的回复:
[quote=引用 1 楼 yulu27 的回复:] 找到哪错了 *value = p->value; 为什么会错?

int  value = 0; //改成这样吧!定义int型
pop(&s , &value); // 这样value的地址
[/quote] 还是不对, 只能value是指针 *value = &(p->value); 再把p->value转成地址
max_min_ 2013-08-23
  • 打赏
  • 举报
回复
引用 1 楼 yulu27 的回复:
找到哪错了 *value = p->value; 为什么会错?

int  value = 0; //改成这样吧!定义int型
pop(&s , &value); // 这样value的地址
yulu27 2013-08-22
  • 打赏
  • 举报
回复
value = &(p->value) 这样就对, 为什么?
yulu27 2013-08-22
  • 打赏
  • 举报
回复
找到哪错了 *value = p->value; 为什么会错?

69,381

社区成员

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

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