C语言模拟栈是出错。做了一个C语言模拟栈的程序,出现了一个错误,如下图,可能是指针指向了一个未知空间的错误。但不知道怎么错的。
代码:
# include <stdio.h>
# include <malloc.h>
typedef struct Node{
int date;
struct Node * next;
}Node ,*PNode;
typedef struct Stack{
PNode pHead;
PNode pTail;
} Stack;
void init(Stack * pS){
PNode n=(PNode)malloc(sizeof(Node));
pS->pHead=n;
pS->pTail=n;
n->next=NULL;
}
void push(Stack * pS,int val){
PNode p=(PNode)malloc(sizeof(PNode));
p->date=val;
p->next=pS->pHead;
pS->pHead=p;
}
void travel(Stack * pS){
PNode p=pS->pHead;
while(p!=NULL){
printf("%d ",p->date);
p=p->next;
}
}
int main(void){
Stack s;
push(&s,1);
travel(&s);
push(&s,1);
travel(&s);
return 0;
}
应该是travel中出现错误,我知道怎么改,但是不知道哪里出错了?
[解决办法]
听到模拟栈,我第一个想到LZ是大神,要自建虚拟机,结果原来是小白,在练习数据结构~
void push(Stack * pS,int val){ //你这个push写的狗屁不通,不作评论~
//PNode p=(PNode)malloc(sizeof(PNode));
PNode p=(PNode)malloc(sizeof(Node));
p->date=val;
//p->next=pS->pHead;
p->next = NULL;
//pS->pHead=p;
pS->pTail->next = p;
pS->pTail = p;
}
void travel(Stack * pS){
//PNode p=pS->pHead;
PNode p=pS->pHead->next; //你既然带了头节点,那么这个头节点是没有数据的,遍历时自然要跳过
while(p!=NULL){
printf("%d ",p->date);
p=p->next;
}
}