#include <stdio.h>
#include <stdlib.h>
// 链式栈节点的定义
typedef struct StackNode {
int data;
struct StackNode* next;
} StackNode;
// 链式栈的定义
typedef struct {
StackNode* top; // 栈顶指针
} LinkedStack;
// 初始化链式栈
void InitStack(LinkedStack* stack) {
stack->top = NULL;
}
// 判断栈是否为空
int IsEmpty(LinkedStack* stack) {
return stack->top == NULL;
}
// 入栈
void Push(LinkedStack* stack, int data) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode == NULL) {
printf("内存分配失败\n");
exit(EXIT_FAILURE);
}
newNode->data = data;
newNode->next = stack->top;
stack->top = newNode;
}
// 出栈
int Pop(LinkedStack* stack, int* data) {
if (IsEmpty(stack)) {
printf("栈为空,无法出栈\n");
return 0;
}
StackNode* topNode = stack->top;
*data = topNode->data;
stack->top = topNode->next;
free(topNode);
return 1;
}
// 获取栈顶元素
int GetTop(LinkedStack* stack, int* data) {
if (IsEmpty(stack)) {
printf("栈为空,无法获取栈顶元素\n");
return 0;
}
*data = stack->top->data;
return 1;
}
// 销毁链式栈
void DestroyStack(LinkedStack* stack) {
while (!IsEmpty(stack)) {
int data;
Pop(stack, &data);
}
}
int main() {
LinkedStack stack;
InitStack(&stack);
// 入栈操作
Push(&stack, 1);
Push(&stack, 2);
Push(&stack, 3);
// 出栈操作
int data;
Pop(&stack, &data);
printf("出栈元素:%d\n", data);
// 获取栈顶元素
GetTop(&stack, &data);
printf("栈顶元素:%d\n", data);
// 销毁链式栈
DestroyStack(&stack);
return 0;
}