尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

线性结构常见应用之栈[基于郝斌课程]

线性结构常见应用之栈[基于郝斌课程]
📅 发布时间:2026/6/18 7:15:31

栈的定义:

  一种可以实现“先进后出”的存储结构

  栈类似于箱子,先放进去的最后取出来,最后放入的先取出来

栈的分类:

  静态栈的内核是数组

  动态栈的内核是链表

栈的算法:

  出栈

  压栈

栈的应用:

  函数调用

  中断

  表达式求值

  内存分配

  缓冲处理

  迷宫


/*
@file      main.c
@brief     线性结构常见应用之栈
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-23
@history   2025-09-23 EricsT - 新建文件
*/#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>typedef struct NODE
{int data;NODE* ptrNext;
}* PtrNode, Note;typedef struct STACK
{PtrNode ptrTop;PtrNode ptrBottom;
}* PtrStack, Stack;void InitStack(PtrStack ptrStack);//初始化
void PushStack(PtrStack ptrStack, int pushValue);//压栈
bool PopStack(PtrStack ptrStack);//出栈
void TraverseStack(const PtrStack ptrStack);//遍历
bool IsEmptyStack(const PtrStack ptrStack);//判断是否为NULL
void ClearStack(PtrStack ptrStack);//清空栈int main(void)
{Stack stack;InitStack(&stack);int pushValue;printf("请输入插入数值");scanf("%d", &pushValue);PushStack(&stack, pushValue);printf("请输入插入数值");scanf("%d", &pushValue);PushStack(&stack, pushValue);printf("请输入插入数值");scanf("%d", &pushValue);PushStack(&stack, pushValue);printf("请输入插入数值");scanf("%d", &pushValue);PushStack(&stack, pushValue);printf("请输入插入数值");scanf("%d", &pushValue);PushStack(&stack, pushValue);TraverseStack(&stack);PopStack(&stack);TraverseStack(&stack);ClearStack(&stack);TraverseStack(&stack);return 0;
}void InitStack(PtrStack ptrStack)
{//顶栈和底栈都指向空节点ptrStack->ptrBottom = (PtrNode)malloc(sizeof(NODE));ptrStack->ptrBottom->ptrNext = NULL;ptrStack->ptrTop = ptrStack->ptrBottom;
}void PushStack(PtrStack ptrStack, int pushValue)
{PtrNode ptrPushNode = (PtrNode)malloc(sizeof(NODE));ptrPushNode->data = pushValue;ptrPushNode->ptrNext = ptrStack->ptrTop;ptrStack->ptrTop = ptrPushNode;
}void TraverseStack(const PtrStack ptrStack)
{PtrNode ptrNodeCur = ptrStack->ptrTop;//while (NULL != ptrNodeCur->ptrNext)//{//	printf("%d ", ptrNodeCur->data);//	ptrNodeCur = ptrNodeCur->ptrNext;//}while (ptrStack->ptrBottom != ptrNodeCur){printf("%d ", ptrNodeCur->data);ptrNodeCur = ptrNodeCur->ptrNext;}printf("\n");
}bool PopStack(PtrStack ptrStack)
{if (IsEmptyStack(ptrStack))//空栈时无法出栈return false;PtrNode ptrNode = ptrStack->ptrTop;ptrStack->ptrTop = ptrNode->ptrNext;free(ptrNode);//ptrStack->ptrTop = ptrStack->ptrTop->ptrNext;这种写法无法释放原来顶栈的内存return true;
}bool IsEmptyStack(const PtrStack ptrStack)
{if (ptrStack->ptrBottom == ptrStack->ptrTop)return true;return false;
}void ClearStack(PtrStack ptrStack)
{if (IsEmptyStack(ptrStack))return;PtrNode ptrNoteCur = ptrStack->ptrTop;PtrNode ptrNoteNext = NULL;while (ptrStack->ptrBottom != ptrNoteCur){ptrNoteNext = ptrNoteCur->ptrNext;free(ptrNoteCur);//释放内存ptrNoteCur = ptrNoteNext;}ptrStack->ptrTop = ptrStack->ptrBottom;
}

 

本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/19108359

相关新闻

  • go的泛型
  • 【汽车电子】汽车功能安全标准 ISO 26262
  • 02020405 EF Core基础05-EF Core反向工程、EF Core和ADO.NET Core的联系、EF Core无法做到的事情

最新新闻

  • 从用户态到内核态:系统调用原理、实现与性能优化深度解析
  • YOLOv8轻量化实战:从模型压缩到边缘部署全流程解析
  • 别被低价票务系统带偏,真正该看的是经营闭环能力 - FaiscoJeff
  • 048、Zephyr RTOS内核基础:线程同步之条件变量
  • AWS Kiro和Google Antigravity
  • 终极Arduino ESP32安装指南:10分钟搞定物联网开发环境

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号