读书人

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

发布时间: 2013-09-05 16:02:06 作者: rapoo

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

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


[解决办法]

引用:
Quote: 引用:

Quote: 引用:

找到哪错了 *value = p->value;
为什么会错?



int value = 0; //改成这样吧!定义int型
pop(&s , &value); // 这样value的地址

还是不对, 只能value是指针 *value = &(p->value); 再把p->value转成地址


int  *value =  new int;//这样吧!

读书人网 >C语言

热点推荐