C语言链栈(基本压栈,弹栈,取栈顶元素)
#include#include #include typedef struct StackNode { struct StackNode* next; int data; }StackNode, *LinkStack; //链栈的初始化 void initStackNode(LinkStack* s) { *s = NULL; } //链栈的入栈 void push(LinkStack* s, int e) { StackNode* node = (StackNode*)malloc(sizeof(StackNode)); node->data = e; node->next = *s; *s = node; } //链栈的弹栈 void pop(LinkStack* s) { if (!(*s)) { printf("链栈为空n"); return; } StackNode* p = *s; *s = (*s)->next; free(p); } //取出栈顶元素(不弹栈) void getPop(LinkStack* s, int* res) { if (!(*s)) { printf("栈为空n"); return; } *res = (*s)->data; } //遍历链栈 void show(LinkStack s) { if (!s) { printf("栈为空n"); return; } StackNode* p = s; int i = 0; while (p) { printf("链表中的第%d个元素是%dn", i++, p->data); p = p->next; } } void main() { LinkStack s; initStackNode(&s); show(s); printf("测试入栈n"); for (int i = 0; i < 10; i++) { push(&s, i); } show(s); printf("测试弹栈n"); int res; while (s) { getPop(&s, &res); printf("当前栈顶元素是%dn", res); pop(&s); } pop(&s); }



