请各位朋友帮我看看!!我这段代码到底是哪出了问题。
我在实现出栈的时候为什么会失败啊
#include
#include
#include
typedef int datatype;
typedef struct stackline
{
struct stackline * next;
datatype data;
}stack;
void initstack(stack * top)
{
top = NULL;
}
void push(stack * top, datatype x )
{
stack * s = (stack *)malloc(sizeof(stack));
s -> data = x;
s -> next = top;
top = s;
}
int pop(stack * top, datatype * ptr)
{
stack * p = top;
if (top == NULL)
{
printf("faled");
return 0;
}
* ptr = top -> data;
top = top -> next;
free(p);
return 1;
}
int main()
{
datatype a = 15,b = 16,c = 17;
stack * top = NULL;
datatype *ptr = 0;
initstack(top);
push(top, a);
pop(top, ptr);
return 0;
}
****
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int datatype;
typedef struct stackline
{
struct stackline * next;
datatype data;
} stack;
void initstack(stack * top)
{
top = NULL;
}
stack * push(stack * top, datatype x )
{
stack * s = (stack *)malloc(sizeof(stack));
s -> data = x;
s -> next = top;
top = s;
return top;
}
int pop(stack * top, datatype * ptr)
{
stack * p = top;
if (top == NULL)
{
printf("faled");
return 0;
}
* ptr = top -> data;
top = top -> next;
free(p);
return 1;
}
int main()
{
datatype a = 15,b = 16,c = 17;
stack * top;
datatype *ptr;
//initstack(top);
top = push(top, a);
printf("%d", pop(top, ptr));
return 0;
}
题主的代码修改如下,供参考:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int datatype;
typedef struct stackline
{
struct stackline* next;
datatype data;
}stack;
void initstack(stack** top) //修改 void initstack(stack* top)
{
(*top) = NULL; //修改 top = NULL;
}
void push(stack** top, datatype x) //修改 void push(stack* top, datatype x)
{
stack* s = (stack*)malloc(sizeof(stack));
s->data = x;
s->next = (*top); //修改 s->next = top;
(*top) = s; //修改 top = s;
}
int pop(stack** top, datatype* ptr) //修改 int pop(stack* top, datatype* ptr)
{
stack* p = (*top); //修改 stack* p = top;
if ((*top) == NULL)
{
printf("faled");
return 0;
}
*ptr = (*top)->data; //修改 *ptr = top->data;
(*top) = (*top)->next;//修改 top = top->next;
free(p);
return 1;
}
int main()
{
datatype a = 15, b = 16, c = 17;
stack* top = NULL;
datatype ptr = 0; //datatype* ptr = 0; 修改
initstack(&top); //修改 initstack(top);
push(&top, a); //修改 push(top, a);
push(&top, b);
push(&top, c);
pop(&top, &ptr); //修改 pop(top, ptr);
printf("%d\n", ptr); //修改
pop(&top, &ptr);
printf("%d\n", ptr);
pop(&top, &ptr);
printf("%d\n", ptr);
return 0;
}