#include <stdio.h>#include <stdlib.h> #define fail 0 #define success 1 #define status int typedef struct node{ int data; struct node *next; }*Snode,*pStack,*LinkedStack; LinkedStack myStack=(LinkedStack)malloc(sizeof(struct node));pStack top; //初始化链栈 LinkedStack makeStack(LinkedStack myStack,pStack top) { myStack->data=-1; myStack->next=NULL; top=myStack; return myStack; } //判空 bool Stack_Empty(void) { return (top==myStack); } //入栈 status Push(LinkedStack myStack,int data) { LinkedStack cursor=myStack; Snode newNode=(Snode)malloc(sizeof(struct node)); newNode->data=data; newNode->next=NULL; top=newNode; while(cursor->next) { cursor=cursor->next; } cursor->next=newNode; //此处还要补上将该新结点插入链栈myStack的末尾 return success; } //出栈 int* Pop(LinkedStack myStack,int *data) { pStack cursor=myStack; if(Stack_Empty()) { } else { while(cursor->next!=top) { cursor=cursor->next; } data=&(top->data); top=cursor; return data; } } //程序测试 int main(void) { int *data=NULL; myStack=makeStack(myStack,top); Push(myStack,3); Push(myStack,8); Push(myStack,19); Push(myStack,31); Push(myStack,43); Push(myStack,36); Pop(myStack,data); printf("%d ",data); }
1 回答

胡子哥哥
TA贡献1825条经验 获得超6个赞
你的地址值传递错误,按照我给你修改的试试看,一定要注意你的实参传递的是地址还是具体的值,如果是地址,在子函数中就不要去修改你传递进来的地址。
int
main(void)
{
int
data=0;
//此处随机分配内存空间,不要用指针
myStack=makeStack(myStack,top);
Push(myStack,3);
Push(myStack,8);
Push(myStack,19);
Push(myStack,31);
Push(myStack,43);
Push(myStack,36);
Pop(myStack,&data);//此处,传递的是地址值
printf("%d
",data);
}
int*
Pop(LinkedStack
myStack,int
*data)
{
pStack
cursor=myStack;
if(Stack_Empty())
{
}
else
{
while(cursor->next!=top)
{
cursor=cursor->next;
}
*data=top->data;
//此处,只是在同一个内存空间修改其值,所以不要取地址
top=cursor;
return
data;
}
}
- 1 回答
- 0 关注
- 134 浏览
添加回答
举报
0/150
提交
取消