C语言链栈(基本压栈,弹栈,取栈顶元素)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
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个元素是%d\n", 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("当前栈顶元素是%d\n", res);
pop(&s);
}
pop(&s);
}