你的while循环写错了,你想借助S遍历,但是循环条件用的还是top,而top在循环内部没有修改,所以就进入死循环了,应该这么改:
while(S!=NULL) //用S
{
printf("%d,\n",S->data);
S=S->next; //S要修改
}
还有,print函数应该是不想修改链栈的吧,只是读取。所以参数就不要用a的地址了,直接用a传递就行了,保证函数体内不会意外修改a。函数参数要做相应的修改。
像这样:都不用额外借助一个S了。
void print(coffee *top)
{
top=top->next;
while(top!=NULL)
{
printf("%d,\n",top->data);
top=top->next; //top要修改
}
}
用print(a);调用就好了。
有问题Hi联系。
第一步是将值赋给开辟的节点,第二三步是利用头插法将节点插入链表,第三步还有就是top也是栈顶的指针