在 Debug 模式下,VC 会把未初始化的栈内存上的指针全部填成 0xcccccccc ,当字符串看就是 “烫烫烫烫……”;会把未初始化的堆内存上的指针全部填成 0xcdcdcdcd,当字符串看就是 “屯屯屯屯……”
定义链栈节点结构体
typedef struct StackNode {
ElemType data;
struct StackNode* next;
}StackNode, *LinkStack;
*LinkStack是一个StackNode类型的指针,用于指向这个栈的首地址(代表这个栈)
初始化栈
void InitStack(LinkStack *s) {
*s = NULL;
}
入栈(头插)
*s始终指向链栈首个元素
void Push(LinkStack *s, ElemType x) {
StackNode* t =(StackNode*) malloc(sizeof(StackNode));
assert(t != NULL);
t->data = x;
if (*s = NULL) {
*s = t;//现在链栈的首地址是新插入的元素
t->next = NULL;
}
else {
t->next = *s;//先让新节点的后继指向原来的第一个元素
*s = t;//指针s指向第一个节点(即新插入的元素),若先执行这个,则指针s链着的原来的元素就找不到了。
}
}
出栈(头删)
void Pop(LinkStack *s) {
StackNode* p = *s;
*s = p->next;
free(p);
p = NULL;
}