栈
#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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?