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

news/2025/9/23 23:30:09/文章来源:https://www.cnblogs.com/EricsT/p/19108359

栈的定义:

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

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

栈的分类:

  静态栈的内核是数组

  动态栈的内核是链表

栈的算法:

  出栈

  压栈

栈的应用:

  函数调用

  中断

  表达式求值

  内存分配

  缓冲处理

  迷宫


/*
@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;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实测对比:权威榜单之公众号排版Top 5(含效果对比与适用建议)

在新媒体运营领域,公众号排版是一项至关重要却又让许多人头疼的工作。写作慢、排版耗时、跨平台排版不统一、配图难/侵权风险等问题,一直困扰着公众号/知乎/小红书运营者、新媒体运营新手小白、自媒体人等众多从业者…

东莞微信网站物联网在生活中的应用

java.io.File.setExecutable(boolean executable) 方法来设置所有者对于此抽象路径名执行权限。 声明 以下是 java.io.File.setExecutable(boolean executable) 方法的声明&#xff1a; public boolean setExecutable(boolean executable) 参数 executable -- 设置访问权限为t…

go的泛型

简单例子,把传入的int类型的数据,打印出来,然后返回前两位数值 func forSclice(slice []int) []int {for i, v := range slice {fmt.Println(i, v)}return slice[:2] }如果该方法,支持任何形式的入参呢? func for…

原码补码反码

原码是最高位为符号位,其余位表示数值的绝对值二进制码,反码是正数与原码相同,负数原码按位取反,补码是正数与原码相同,负数是反码加1。 Java整数类型使用的是二进制补码如就是0000 0000 0000 0000 0000 0000 000…

lc1034-边界着色

难度:中等(中期)题目描述有一个二维地图,值代表颜色。 给定一个点的坐标和一个备用的颜色 这个点周围与它颜色一样的部分认为是一个整体 给这块区域的最外层刷上备用颜色示例 输入:grid = [[1,1],[1,2]], row = 0…

网站是用sql2012做的_在发布时可以改变为2008吗湖南人文科技学院在哪

1.什么是web开发 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 所以Web开发说白了&#xff0c;就是开发网站的&#xff0c;例如网站&#xff1a;淘宝&#xff0c;京东等等 2. 网站的工作流程 1.首先我们需…

连江县建设局网站企业做网站要注意些什么

目录 1、环境变量process.env配置2、vue package.json多环境配置vue-cli-service serve其他用法vue-cli-service build其他用法vue-cli-service inspect其他用法3、vue导出webpack配置4、配置打包压缩图片文件5、打包去掉多余css(由于依赖问题暂时未实现)6、打包去除console.…

标志设计logo网站广西壮族自治区成立时间

从事java开发一般都需要使用到一些开发工具&#xff0c;记得以前刚接触java的时候还用过MyEclipse。idea被评为最好用java开发工具&#xff0c;为什么用eclipse的人更多?下面一起来了解下吧&#xff01;IDEA毕竟不便宜啊&#xff0c;很多企业都买不起只能用Eclipse了&#xff…

网站建设技术指标做设计什么兼职网站建设

前面我们介绍了Harris和Shi-Tomasi角点检测算法&#xff0c;这两种算法具有旋转不变性&#xff0c;但不具有尺度不变性&#xff0c;以下图为例&#xff0c;在左侧小图中可以检测到角点&#xff0c;但是图像被放大后&#xff0c;在使用同样的窗口&#xff0c;就检测不到角点了。…

赤水市住房和城乡建设局网站网站建设刷赞和vip

目录 1、源码编译安装nginx 2、分别编写基于RHEL6和RHEL7的脚本。 2.1 RHEL6的nginx系统服务脚本 2.2 RHEL7的nginx系统服务脚本 1、源码编译安装nginx 1.首先关闭防火墙和selinux [rootnode13 ~]# systemctl stop firewalld [rootnode13 ~]# setenforce 0 2.准备环境&…

什么是网站集约化建设wordpress去除右下角

强烈建议别购买京东安美酷便携屏&#xff0c;太脆弱了&#xff0c;一碰就坏&#xff0c;客服态度不行&#xff0c;容易闪屏等等缺点。而且价格偏贵&#xff0c;淘宝上两百块的屏幕足够用了&#xff0c;没必要花六百多块钱&#xff0c;如果就是买来打游戏的话&#xff0c;也用不…

做阿里云网站教育机构做网站的目的

YouTube: Intro to Large Language Models - YouTube 1. Large Language Model LLM 大家好&#xff0c;最近我做了一个关于大型语言模型的 30 分钟演讲&#xff0c;有点像介绍性演讲&#xff0c;不幸的是&#xff0c;那个演讲没有被录制下来&#xff0c;但很多人在演讲结束后…

网站建设公司 成都模板企业快速建站

基于樽海鞘群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于樽海鞘群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于樽海鞘群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

【汽车电子】汽车功能安全标准 ISO 26262

ISO 26262 是汽车行业最核心的功能安全标准,专为汽车电子电气系统设计,目标是通过系统化流程降低因系统故障导致的安全风险。 以下是专为小白设计的 5分钟快速入门指南: 一、为什么需要 ISO 26262?背景:汽车电子化…

ISO 26262的不同安全等级:ASIL-D ASIL-C ASIL-B ASIL-A

在汽车功能安全标准 ISO 26262 中,ASIL(Automotive Safety Integrity Level,汽车安全完整性等级)从 A到D 分为4个等级,ASIL-D是最高安全等级,ASIL-B的要求远低于ASIL-D——简单说:ASIL-D > ASIL-C > ASIL…

C#学习1

C# 简介 C# 是由微软开发的面向对象的编程语言运行在.NET框架上,具有强大的类型安全和内存管理 广泛用于Windows应用程序、Web开发、游戏开发(Unity)等基本语法结构 csharp using System; // 引入命名空间namespace…

wordpress wpenqueuescript优化关键词排名推广

先来看看微信小程序输入框展示效果&#xff1a; 输入超过 8 行的时候会出现滚动&#xff0c;这样做的好处就是输入框不会直接顶到页面最顶部。 支付宝小程序实现多行输入框&#xff1a;使用textarea多行输入框实现 思路一&#xff1a; textarea 标签设置max-height, 标签自…

做网站上凡科订餐网站设计

目录 指针是什么 指针变量的大小 指针和指针类型 指针类型的意义 野指针 指针运算 指针-整数 指针-指针 指针的关系运算 指针和数组 二级指针 二级指针定义 指针数组 指针数组的定义 指针是什么 如下图所示&#xff08;右侧编号为内存地址&#xff09;&#xff1…

做的好的装修公司网站网站策划案需要包括哪些

一、引言 1、死锁是因采用封锁技术实现并发控制而产生的一种运行事务被阻塞或等待的现象 2、如果利用严格两阶段封锁协议来解决我们前面提到的“更新丢失”这种数据不一致问题&#xff0c;非串行调度中的事务T1首先获得数据对象X上的读锁并开始执行&#xff0c;随后事务T2也获…

深圳住房和建设局网站登录东莞免费建站在线咨询

参考文章 更新 state 中的数组 数组是另外一种可以存储在 state 中的 JavaScript 对象&#xff0c;它虽然是可变的&#xff0c;但是却应该被视为不可变。同对象一样&#xff0c;当想要更新存储于 state 中的数组时&#xff0c;需要创建一个新的数组&#xff08;或者创建一份已…