LstackTp *p; //新节点
p=malloc(sizeof(LstackTp)); //从堆上分配一个大小为LstackTp的空间
p->data = x; //数据存入
p->next = ls; //栈的最后一个元素链在新元素后面
ls=p; //p节点变成新的栈的头结点
看起来这个链表应该是把元素直接当成头结点使用的(倒序排列)。
if (null != ls) // 栈空了没法退栈
*x = p->data; //保存一下退栈的元素值
free(p); //释放p所占据的空间