C语言实现动态栈

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>// 每一个节点的数据类型
typedef struct Node
{int data;struct Node * pNext;
}NODE, * PNODE; // NODE等价 struct Node   PNODE等价于 struct Node *// 栈
typedef struct Stack
{PNODE pTop;PNODE pBottom;
}STACK, * PSTACK;void init(PSTACK pS);
void push(PSTACK pS, int val);
void traverse(PSTACK pS);
bool pop(PSTACK pS, int * val);
bool empty(PSTACK pS);
void clear(PSTACK pS);// 这是一个动态栈
int main(void) {STACK s; // STACK 等价于 stack Stackinit(&s);// 目的是造出一个空栈push(&s, 1);push(&s, 2);push(&s, 3);push(&s, 4);traverse(&s);int val;if (pop(&s, &val)){printf("出栈成功 出栈的元素是%d\n", val);} else {printf("出栈失败\n");}traverse(&s);clear(&s);traverse(&s);if (pop(&s, &val)){printf("出栈成功 出栈的元素是%d\n", val);} else {printf("出栈失败\n");}return 0;
}void init(PSTACK pS) {pS->pTop = (PNODE)malloc(sizeof(NODE));if (NULL == pS->pTop){printf("动态内存分配失败");exit(-1);}pS->pTop->pNext = NULL; // 初始化头结点为NULLpS->pBottom = pS->pTop;
}void push(PSTACK pS, int val) {PNODE pNew = (PNODE)malloc(sizeof(NODE));pNew->data = val; // 填充新数据pNew->pNext = pS->pTop; // 追加结果pS->pTop = pNew;// 更新top
}void traverse(PSTACK pS) {PNODE p = pS->pTop;printf("开始打印\n");while (p != pS->pBottom){printf("%d ", p->data);p = p->pNext;}printf("结束打印\n");
}bool empty(PSTACK pS) {if (pS->pTop == pS->pBottom){return true;}return false;}bool pop(PSTACK pS, int * val) {if (empty(pS)){return false;}*val = pS->pTop->data;PNODE r = pS->pTop;pS->pTop = pS->pTop->pNext;free(r);r = NULL;return true;
}void clear(PSTACK pS) {if (empty(pS)){return;}PNODE p = pS->pTop;PNODE q = NULL;while (p != pS->pBottom){q = p->pNext;free(p);p = q;}pS->pTop = pS->pBottom;
}

运行效果

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

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

相关文章

【数据库编程-SQLite3(一)】sqlite3数据库在Windows下的配置及测试

学习分析 1、资源准备2、环境配置2.1、将资源包下载解压缩保存。2.2、在QT中创建工程,配置环境 3、测试配置3.1、 sqlite3_open函数3.2、sqlite3_close函数3.3、代码测试 1、资源准备 资源包 2、环境配置 2.1、将资源包下载解压缩保存。 解压缩得到以下文件 2.2、在QT中创建…

力扣每日一题 6/13 反悔贪心算法

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2813.子序列最大优雅度【困难】 题目&#xff1a; 给你一个长度为 n 的二…

上海2024年二手房最新成交历史数据

标签: 上海2024年二手房最新成交历史数据; 二手房; 时间: 2024年 上海市4月二手房网签套数:18230套 上海市5月二手房网签套数:19396套 上海市6月二手房网签套数: 6月1日:924套 6月2日:886套 6月3日:720套 6月4日:750套 6月5日:823套 6月6日:902套 6月7日:968套…

红黑树的基本概念

红黑树 特征 [1] 根节点是黑色的[2] 每个叶子节点都是黑色的空节点(NIL), 也就是说&#xff0c;叶子节点不存储数据[3] 任何相邻的节点都不能同时为红色&#xff0c;也就是说&#xff0c;红色节点是被黑色节点隔开的[4] 每个节点&#xff0c;从该节点到达其可达叶子节点的所有路…

阿里云香港服务器怎么样?

大家都知道阿里云是国内最受欢迎的云服务商&#xff0c;那么阿里云香港服务器究竟怎么样呢&#xff1f;和硅云的香港服务器用于做外贸网站等业务相比各有哪些优缺点呢&#xff1f; 阿里云和硅云在香港云服务领域有着广泛的应用和良好的口碑。然而&#xff0c;它们各自的特点和…

mysql如何存储ip地址

在MySQL中存储IP地址通常可以使用 VARCHAR 或 CHAR 类型来存储。IP地址在IPv4的情况下通常是点分十进制的形式&#xff0c;例如 192.168.1.1&#xff0c;可以用 VARCHAR(15) 来存储&#xff0c;因为IPv4最多15个字符&#xff08;包括点号&#xff09;。如果你需要支持IPv6地址&…

【V8引擎】 V8引擎如何运行JS的

文章目录 概要什么是V8引擎为什么需要V8引擎比较常见的javascript引起有哪些呢&#xff1f;V8引擎是如何工作的&#xff08;V8引擎的解析过程&#xff09;V8引擎的做了哪些优化 概要 本篇文章主要是讲V8引擎如何运行JS&#xff0c;对运行JS做了哪些优化 什么是V8引擎 V8 是一…

深入探究Java Character类:全面解析与应用实例

在Java编程中,Character类是一个用于操作单个字符的强大工具。作为Java标准库中的一部分,Character类封装了基本数据类型char,并提供了一系列方法来操作和检查字符属性,例如字母、数字、空白字符等。理解并熟练使用Character类对开发高效、可靠的Java应用程序至关重要。本文…

开发做前端好还是后端好?

目录 一、引言 二、两者的对比分析 技能要求和专业知识&#xff1a; 职责和工作内容&#xff1a; 项目类型和应用领域&#xff1a; 就业前景和市场需求&#xff1a; 三、技能转换和跨领域工作 评估当前技能&#xff1a; 确定目标领域&#xff1a; 掌握相关框架和库&a…

按键输入消抖

按键输入是人机对话不可缺少的一部分&#xff0c;对于消抖设计&#xff0c;一种是软件消抖&#xff0c;一种是硬件消抖。但在单片机电路设计中&#xff0c;采用电容消抖才是最佳的选择&#xff0c;其次才是定时器消抖。 1、按键输入采用软件消抖 1)、通过定时器方式定时读取按…

Vue3【二十一】Vue 路由模式(createWebHashHistory /createWebHistory )和RouterLink写法

Vue3【二十一】Vue 路由模式&#xff08;createWebHashHistory /createWebHistory &#xff09;和RouterLink写法 Vue3【二十一】Vue 路由模式和普通组件目录结构 createWebHistory history模式&#xff1a;url不带#号&#xff0c;需要后端做url适配 适合销售项目 利于seo crea…

【SCAU数据挖掘】数据挖掘期末总复习题库判断题及解析

1.离群点可以是合法的数据对象或者值。( ✓) 解析&#xff1a;离群点&#xff08;Outliers&#xff09;通常是与数据集中其他数据显著不同的数据点&#xff0c;但它们可以是合法的数据值。这些值可能是由于测量误差、数据录入错误、数据分布的自然属性等原因产生的。 3.关联规…

Spring框架的原理及应用详解(六)

本系列文章简介&#xff1a; 在当今的软件开发世界中&#xff0c;随着应用复杂性的不断增加和技术的快速发展&#xff0c;传统的编程方式已经难以满足快速迭代、高可扩展性和易于维护的需求。为此&#xff0c;开发者们一直在寻求更加高效、灵活且易于管理的开发框架&#xff0c…

[DDR4] DDR4 相对 DDR3差异与优势

依公知及经验整理,原创保护,禁止转载。 传送门: 总目录 1 差异总览 出处: https://www.kingston.com.cn/en/memory/ddr4-overview Description 描述DDR3DDR4Advantage 优势电压1.5V1.2V降低内存功耗需求容量512Mb-8Gb4Gb-16Gb更大的 DIMM 容量数据速率800Mb/s – 2133Mb/s1…

C#——结构和类问题总结

C#——结构和类问题总结 前言一、结构体是什么&#xff1f;1&#xff09;定义2&#xff09;特点 二、类&#xff08;对象&#xff09;是什么&#xff1f;1&#xff09;定义2&#xff09;特点 三、两者的差异性与选择环境&#xff1f;1&#xff09;差异性2&#xff09;选择环境 …

推荐一款WPF绘图插件OxyPlot

开始 使用 NuGet 包管理器添加对 OxyPlot 的引用(如果要使用预发布包,请参阅下面的详细信息)向用户界面添加PlotView在代码中创建一个PlotModel绑定到你的属性PlotModelModelPlotView例子 您可以在代码存储库的文件夹中找到示例。/Source/Examples NuGet 包 最新的预发布包由…

前端工程师不是软件工程师?

在当前的技术生态系统中&#xff0c;前端工程师与软件工程师这两个角色经常被混淆。尽管它们在某些方面有重叠&#xff0c;但实际上存在显著的差异。尤其是在前端工程师培训班出身的背景下&#xff0c;这种差异更为明显。本文将探讨为什么前端工程师不应被简单地归类为软件工程…

CyberDAO:引领Web3时代的DAO社区文化

致力于Web3研究和孵化 CyberDAO自成立以来&#xff0c;致力于推动Web3研究和孵化&#xff0c;吸引了来自技术、资本、商业、应用与流量等领域的上千名热忱成员。我们为社区提供多元的Web3产品和商业机会&#xff0c;触达行业核心&#xff0c;助力成员捕获Web3.0时代的红利。 目…

C语言---------深入理解指针

目录 一、字符指针 二、指针数组&#xff1a; 三、数组指针&#xff1a; 1、定义&#xff1a; 2、&数组名和数组名区别&#xff1a; 3、数组指针的使用&#xff1a; 四、数组参数&#xff0c;指针参数&#xff1a; 1、一维数组传参&#xff1a; 2、二维数组传参&am…

后端防接口被刷

1&#xff09;防火墙 防火墙也是互联网安全攻防中重要的屏障&#xff0c;我们通过配置访问规则&#xff0c;可以限制只有被允许的IP才可以进行访问。 防火墙还可以识别和阻止DDoS攻击&#xff0c;通过识别并过滤恶意流量请求&#xff0c;防火墙可以有效的防御&#xff0c;保护…