C语言 链栈 printf问题
发布网友
发布时间:2024-07-13 13:20
我来回答
共2个回答
热心网友
时间:2024-07-16 11:51
#include <stdlib.h>
#include <stdio.h>
#define Elemtype int
typedef struct node{ //定义链栈节点类型
Elemtype data;
node* next;
}Node,*PNode;
typedef struct linkstack{ //定义栈的属性
PNode top;
PNode base;
int stacksize;
}LinkStack,*PLStack;
int main(){ //主函数
PLStack InitLStack();
void Push(PLStack &p,Elemtype e);
PNode GetTop(PLStack p);
void Pop(PLStack p);
void DestoryLStack(PLStack p);
PLStack p;
p=InitLStack();
Push(p,100);
Push(p,200);
Push(p,300);
Push(p,400);
int a=p->stacksize;
printf("%d %d\n",GetTop(p)->data,a); //问题出在这里
printf("%d\n",a);
Pop(p);
printf("%d %d\n",GetTop(p)->data,p->stacksize); //问题出在这里
printf("%d",*GetTop(p));
return 0;
}
PLStack InitLStack(){ //创建一个链栈,并返回指向链栈的指针
PLStack p=(PLStack)malloc(sizeof(LinkStack));
if(!p)exit(0);
p->stacksize=0;
p->base=NULL;
p->top=NULL;
return p;
}
void Push(PLStack &p,Elemtype e){ //进栈
PNode q;
if(p->stacksize==0){ //判断栈是否为空栈
p->base=p->top=(PNode)malloc(sizeof(Node));
p->top->data=e;
p->top->next=NULL;
p->stacksize++;
}
else{
q=(PNode)malloc(sizeof(Node));
q->data=e;
q->next=p->top;
p->top=q;
p->stacksize++;
}
}
PNode GetTop(PLStack p){ //获得栈顶元素
if(p->stacksize==0)exit(0);
return(p->top);
}
void Pop(PLStack p){ //出栈
PNode q=p->top;
if(p->stacksize==0)exit(0);
p->top=p->top->next;
free(q);
p->stacksize--;
}
void DestoryLStack(PLStack p){
PNode q;
int i;
for(i=0;i<p->stacksize;i++){
q=p->top;
p->top=p->top->next;
free(p);
}
}
热心网友
时间:2024-07-16 11:52
printf("%d %d\n",*GetTop(p),a);改为printf("%d %d\n",GetTop(p)->data ,a);
printf("%d %d\n", *GetTop(p),p->stacksize);改为printf("%d %d\n", GetTop(p)->data,p->stacksize);
这样就行了~~
*GetTop(p)取的是p首地址的值··输出后就溢出了·