C++实现顺序栈和链栈操作(实验3--作业)
顺序栈
一、主要功能
实现了顺序栈(SqStack)的数据结构,并利用该数据结构进行了栈的基本操作以及数制转换的功能。
二、数据结构定义
- 定义了一些常量:
MAXSIZE表示栈的最大长度为 100。OVERFLOw表示存储失败的错误码为 -2。OK和ERROR分别表示操作成功和失败的状态码。
- 定义了数据类型:
Status为int类型,用于表示操作的状态。SEleType为int类型,代表栈中存储的数据类型。
- 定义了顺序栈结构体
SqStack:SEleType *base是指向栈内元素数组的指针。SEleType *top是栈顶指针。int stacksize表示当前分配的栈可使用的最大存储容量。
三、函数功能
StackCreate函数:用于初始化顺序栈,为栈分配内存空间,并设置初始状态。StackEmpity函数:判断栈是否为空。StackFull函数:判断栈是否已满。StackPush函数:将元素入栈,如果栈已满则返回错误状态。StackPop函数:将栈顶元素出栈,并通过引用参数返回该元素,如果栈为空则返回错误状态。StackToEmpty函数:将栈置空,通过不断出栈操作实现。StackDestroy函数:销毁栈,释放内存空间。StackTop函数:获取栈顶元素。StackPrint函数:打印栈内所有元素,通过不断出栈并输出实现。
四、主函数流程
- 首先创建一个顺序栈
S并初始化。 - 向栈中依次压入数字 5、4、2、3、1,然后打印栈内元素。
- 将栈置空。
- 进行数制转换功能,用户输入一个数字
N和转换的进制数JZ,通过不断对N取余并压入栈中,最后打印转换后的结果。 - 销毁栈。
#include <bits/stdc++.h> using namespace std;#define MAXSIZE 100 //最大长度 #define OVERFLOw -2 #define OK 1 #define ERROR 0typedef int Status; typedef int SEleType;//数据类型typedef struct {SEleType *base;//栈内元素数组SEleType *top;//栈顶指针int stacksize; // 当前分配的栈可使用的最大存储容量 }SqStack; //初始化 int StackCreate(SqStack &S){S.base = new SEleType[MAXSIZE];if(!S.base) exit(OVERFLOw);//存储失败S.top = S.base;//初始栈里没元素 top = base S.stacksize = MAXSIZE;return OK;//初始化成功 } //栈的判空 Status StackEmpity(SqStack &S){if(S.top == S.base) return 1;//空else return 0;//非空 } //栈的判满 Status StackFull(SqStack &S){if(S.top - S.base == S.stacksize) return 1;//满else return 0;//非满 } //入栈 Status StackPush(SqStack &S,SEleType e){if(StackFull(S)) return ERROR;*S.top++ = e;//等同于数组赋值后 下标++return OK; } //出栈 Status StackPop(SqStack &S,SEleType &e){if(StackEmpity(S)) return ERROR;//栈空//用e接收栈顶元素e = *(--S.top);//top 指向的是栈顶的上方return OK; } //栈的置空 Status StackToEmpty(SqStack &S) {SEleType temp;while (!StackEmpity(S)) {StackPop(S, temp);}return OK; } //栈的销毁 Status StackDestroy(SqStack &S){delete[] S.base;S.base = NULL;S.top = NULL;S.stacksize = 0;return OK; } //取栈顶元素 SEleType StackTop(SqStack &S){return *(S.top-1); } //打印栈内所有元素 void StackPrint(SqStack &S){while(!StackEmpity(S)){SEleType e;StackPop(S,e);cout<<e<<" ";} } int main(){SqStack S ;StackCreate(S);StackPush(S,5);StackPush(S,4);StackPush(S,2);StackPush(S,3);StackPush(S,1);StackPrint(S);StackToEmpty(S);//数制转换int N;cout<<"\n输入要转换的数字: ";cin>>N; int T = N;int JZ;cout<<"转换为几进制(<10): ";cin>>JZ;while(N){StackPush(S,N%JZ);N/=JZ;}cout<<"10 进制数: "<<T<<"在"<<JZ<<"进制转换后是 "<<endl;StackPrint(S);StackDestroy(S);return 0; }链栈
一、主要功能
实现了链式栈(LinkStack)的数据结构,并利用该数据结构进行了栈的基本操作以及数制转换的功能。
二、数据结构定义
- 定义了一些常量:
MAXSIZE表示栈的最大长度为 100(但在链式栈中未实际用到该常量)。OVERFLOw表示存储失败的错误码为 -2(未实际用到)。OK和ERROR分别表示操作成功和失败的状态码。
- 定义了数据类型:
Status为int类型,用于表示操作的状态。LEleType为int类型,代表栈中存储的数据类型。
- 定义了链式栈的节点结构体
StackNode:LEleType data表示节点存储的数据。struct StackNode *next指向下一个节点的指针。StackNode是节点结构体的名称,*LinkStack是指向节点的指针类型别名,用于表示链式栈。
三、函数功能
StackCreate函数:用于初始化链式栈,将栈顶指针置为NULL。StackEmpty函数:判断链式栈是否为空。StackPush函数:创建一个新节点,将新节点的数据域设置为给定元素,然后将新节点插入到栈顶(即让新节点的next指向当前栈顶,然后更新栈顶指针为新节点)。StackPop函数:如果栈不为空,将栈顶元素出栈,通过引用参数返回该元素,并释放栈顶节点的内存空间,更新栈顶指针指向下一个节点。StackTop函数:获取栈顶元素的值,但不修改栈的状态。StackToEmpty函数:通过不断出栈操作将链式栈置空。StackDestroy函数:调用StackToEmpty函数将栈置空后,将栈顶指针置为NULL,实现栈的销毁。StackPrint函数:通过不断出栈并输出元素的方式打印链式栈中的所有元素,但这个过程会破坏栈的结构。
四、主函数流程
- 首先创建一个链式栈
S并初始化。 - 向栈中依次压入数字 5、4、2、3、1,然后打印栈内元素(这会破坏栈的结构)。
- 将栈置空。
- 进行数制转换功能,用户输入一个数字
N和转换的进制数JZ,通过不断对N取余并压入栈中,最后打印转换后的结果(同样会破坏栈的结构)。 - 销毁栈。
#include <bits/stdc++.h>
using namespace std;#define MAXSIZE 100 //最大长度
#define OVERFLOw -2
#define OK 1
#define ERROR 0typedef int Status;
typedef int LEleType;//数据类型typedef struct StackNode{ LEleType data; struct StackNode *next;
} StackNode,*LinkStack;
//栈的初始化
Status StackCreate(LinkStack &S){S = NULL;return OK;
}
//栈的判空
Status StackEmpty(LinkStack &S){if(!S) return 1;//空else return 0;//非空
}
//入栈
Status StackPush(LinkStack &S,LEleType e){StackNode * p = new StackNode; //新节点p->data = e; //新节点的数据域p->next = S; //新节点压入栈顶S = p; //修改栈顶指针为preturn OK;
}
//出栈
Status StackPop(LinkStack &S,LEleType &e){if(StackEmpty(S)) return ERROR;e = S->data;StackNode * p = S; //新节点S = S->next;delete p;return OK;
}
//获取栈顶元素
LEleType StackTop(LinkStack &S){LEleType e = S->data;return e;
}
//栈的置空
void StackToEmpty(LinkStack &S){while(!StackEmpty(S)){LEleType e;StackPop(S,e);}
}
//栈的销毁
void StackDestroy(LinkStack &S) {StackToEmpty(S);S = NULL;
}
//打印所有元素(破坏了栈)
void StackPrint(LinkStack &S){StackNode * p = S;while(!StackEmpty(S)){LEleType e;StackPop(S,e);cout<<e<<" ";p = p->next;}
}
using namespace std;
int main(){LinkStack S;StackCreate(S);StackPush(S,5);StackPush(S,4);StackPush(S,2);StackPush(S,3);StackPush(S,1);StackPrint(S);StackToEmpty(S);//数制转换int N;cout<<"\n输入要转换的数字: ";cin>>N; int T = N;int JZ;cout<<"转换为几进制(<10): ";cin>>JZ;while(N){StackPush(S,N%JZ);N/=JZ;}cout<<"10 进制数: "<<T<<"在"<<JZ<<"进制转换后是 "<<endl;StackPrint(S);StackDestroy(S);return 0;
}
运行结果图如下
相关文章:
C++实现顺序栈和链栈操作(实验3--作业)
顺序栈 一、主要功能 实现了顺序栈(SqStack)的数据结构,并利用该数据结构进行了栈的基本操作以及数制转换的功能。 二、数据结构定义 定义了一些常量: MAXSIZE表示栈的最大长度为 100。OVERFLOw表示存储失败的错误码为 -2。O…...
龙兴物联一体机:设备监测的智能先锋
龙兴物联物联网一体机的崛起 龙兴物联物联网一体机在设备监测领域占据着至关重要的地位。随着科技的不断进步和各行业对设备监测需求的日益增长,龙兴物联物联网一体机以其卓越的性能和广泛的适用性,迅速崛起并成为众多企业和机构的首选。 在当今数字化时…...
KinectDK相机SDK封装Dll出现k4abt_tracker_create()创建追踪器失败的问题
项目场景: KinectDK相机SDK封装Dll 问题描述 在 C 环境下,使用 GPU 模式(默认)调用 k4abt_tracker_create 函数正常工作。但是,在 Python 环境下,通过 ctypes 调用相同的 DLL,当使用 GPU 模式…...
Linux 命令—— ping、telnet、curl、wget(网络连接相关命令)
文章目录 网络连接相关命令pingtelnetcurlwget 网络连接相关命令 ping ping 命令是用于测试网络连接和诊断网络问题的工具。它通过向目标主机发送 ICMP(Internet Control Message Protocol)回显请求,并等待回复,以确定目标主机是…...
高速缓冲存储器Cache是如何工作的、主要功能、高速缓冲存储器Cache和主存有哪些区别
1、高速缓冲存储器Cache是如何工作的 高速缓冲存储器Cache的工作主要基于程序和数据访问的局部性原理,其工作方式可以概括为以下几点: 存储近期可能访问的数据和指令:Cache会存储CPU近期可能访问的数据和指令,当CPU需要访问这些…...
极简版Java敏感词检测SDK
敏感词工具 sensitive-word 基于 DFA 算法实现的高性能敏感词工具,开源在GitHub:https://github.com/houbb/sensitive-word。用于敏感词/违禁词/违法词/脏词等的识别和阻拦,是基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。 使用场景…...
H3C路由器交换机操作系统介绍
路由器 路由器的作用 连接具有不同介质的链路连接网络或子网,隔离广播对数据报文执行寻路和转发交换和维护路由信息 H3C 路由器系列 CR系列核心路由器SR系列高端路由器MSR系列路由器ER系列路由器 交换机 交换机的作用 连接多个以太网物理段,隔离冲…...
【项目案例】-音乐播放器-Android前端实现-Java后端实现
精品专题: 01.C语言从不挂科到高绩点 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. SpringBoot详细教程 https://blog.csdn.ne…...
EasyX图形库的安装
前言 EasyX是一个图形库,可以用来做一些c/c小游戏,帮助学习。 一、进入EasyX官网 https://easyx.cn/ 二、点击下载EasyX 三、下载好后以管理员身份运行它 四、点击下一步 五、然后它会自动检测你的编辑器,用哪个就在哪个点安装 六、安装成功…...
数据结构 - 队列
队列也是一种操作受限的线性数据结构,与栈很相似。 01定义 栈的操作受限表现为只允许在队列的一端进行元素插入操作,在队列的另一端只允许删除操作。这一特性可以总结为先进先出(First In First Out,简称FIFO)。这意味…...
基于springboot美食推荐商城的设计与实现
基于springboot美食推荐商城的设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:idea 源码获取:https:…...
React开发一个WebSocket
export default class SocketService {static instance null;static get Instance() {if (!this.instance) {this.instance new SocketService();}return this.instance;}// 和服务端连接的socket对象ws null;// 存储回调函数callBackMapping {};// 标识是否连接成功connec…...
Oracle DECODE 丢失时间精度的原因与解决方案
在Oracle数据库中,DECODE 函数是一个非常实用的条件处理函数,通常用于替代简单的 CASE WHEN 语句。它根据给定的值列表进行匹配,如果匹配成功则返回相应的值。如果不匹配,返回一个默认值。 问题描述 SELECT DECODE(-21, -1, NU…...
如何用示波器检测次级点火系统(一)
写在最前面: 单看标题可能会让你觉得这篇文章的主题是关于检测线圈,火花塞和火花塞插头电线。但我们指的是分析燃烧室内电子的行为。目标是看燃料混合物,阀座,压缩,积碳和其它影响这种特性的症状。最终目的是要学会分…...
基于SpringBoot+Vue+uniapp的涪陵区特色农产品交易系统的详细设计和实现(源码+lw+部署文档+讲解等)
详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...
bmp怎么转换为jpg?快速批量将bmp转换为jpg
bmp怎么转换为jpg?在日常的数字生活中,我们时常会遇到各种格式的图片文件,它们各自拥有不同的特点和用途。最近,我遇到了一个有趣的小插曲:我从网络上下载了一张精美的BMP格式图片,打算用它作为一篇报告的背…...
centos8配置java环境变量jdk8u422-b05
1. 下载 JDK 8u422-b05 首先,确保已经下载了 JDK 8u422-b05 的二进制文件。如果还没有下载,你可以去 Oracle 官方网站或者其他可信的源下载 JDK 8u422。 2. 安装 JDK 将下载的 JDK 文件解压到 /usr/local/java 目录下: sudo mkdir /usr/l…...
基于SSM的校园拓展活动管理系统
文未可获取一份本项目的java源码和数据库参考。 1 选题背景 校园文化是精神的载体,是青年成长成才的沃土,是一种体现校园的硬件设施、精神风貌、制度体系、办学理念以及办学特色的综合文化。文明程度高、文化气息浓、活动种类多的校园文化不仅能焕发学校…...
Python随机森林算法详解与案例实现
目录 Python随机森林算法详解与案例实现1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1 数据集介绍4.2 代码实现4.3 代码解释4.4 运行结果 5、回归案例:使用随机森林预测波士顿房价5.1 数据集介绍5.2 代码实…...
提示词高级阶段学习day2.1-在提示词编写中对{}的使用教程
首先在 prompt engineering 中,使用 {} 通常是为了标识占位符或变量, 这些占位符可以在实际生成内容时被动态替换。 通过这种方式,prompt 可以更加通用和灵活,适用于不同的输入数据场景。 以下是一个体系化、结构化的教程&…...
python海龟绘图之点击屏幕事件处理
在《python海龟绘图之鼠标事件处理》中提到,onclick()函数能够对鼠标点击事件进行处理。但是该鼠标点击事件指的是鼠标点击到海龟图标上的事件,而如果要处理鼠标点击到海龟绘图窗口的任意位置事件的处理,则要用到onscreenclick()函数。通过on…...
软硬一体赋能企业守护力,可穿戴手环构建员工数字健康管理新范式
在数字化转型深入推进的当下,员工健康已成为企业安全生产、高效运营的核心基石。传统健康管理模式存在数据零散、监测滞后、人工成本高、风险预警不及时等痛点,尤其铁路、港口、政企单位、生产型企业,一线员工高强度作业、慢病高发、突发健康…...
3个真实场景告诉你,Avogadro 2分子建模软件如何改变化学研究方式
3个真实场景告诉你,Avogadro 2分子建模软件如何改变化学研究方式 【免费下载链接】avogadroapp Avogadro is an advanced molecular editor designed for cross-platform use in computational chemistry, molecular modeling, bioinformatics, materials science, …...
生态学家都在用的R包MixSIAR:手把手教你用贝叶斯模型搞定食物网溯源
生态数据分析实战:用MixSIAR实现贝叶斯食物网溯源 河口湿地的鱼类究竟以藻类还是陆源有机物为主要食物?这个看似简单的问题背后,隐藏着复杂的生态关系网络。传统稳定同位素分析方法虽然能提供部分答案,但当面对多个潜在食物源和不…...
Android 14开发避坑:用audit2allow搞定SELinux权限拒绝(Python 2.7环境配置详解)
Android 14开发实战:用audit2allow精准解决SELinux权限问题 在Android系统开发中,SELinux权限问题就像一道无形的墙,经常让开发者陷入"明明代码没问题,为什么功能就是不工作"的困境。特别是升级到Android 14后ÿ…...
2025最新易支付模板源码 全开源 前台+用户中心+后台三合一
内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 2025最新易支付模板源码 全开源 前台用户中心后台三合一 二、效果展示 1.部分代码 代码如下(示例): case orderList:$sql" 11";if(isse…...
用HyperLynx VX2.5做LPDDR4X与高速串行总线仿真的完整工作流
HyperLynx VX2.5实战:LPDDR4X与高速串行总线仿真全流程解析 在当今高速电路设计领域,信号完整性问题已成为制约产品性能的关键瓶颈。尤其对于搭载LPDDR4X内存和高速串行总线的移动设备与服务器,工程师们常常陷入这样的困境:设计阶…...
RK3568开发板TB-96AI-3568CE深度评测:从核心接口到AI应用实战
1. 从芯片到板卡:TB-96AI-3568CE的设计哲学当一块芯片从图纸走向现实,成为一块可以握在手中的开发板时,这中间的路程远不止是简单的引脚引出和电源接通。我接触过不少基于RK3568的方案,但拿到贝启科技这块TB-96AI-3568CE时&#x…...
RAG夺命10连问,你能抗住第几问?
前言最近金三银四,很多小伙伴在准备大厂面试,几乎每个人都被问到了同一个技术点——RAG(检索增强生成)。从阿里到字节,从腾讯到美团,RAG已经成为大模型应用方向必考的“压轴题”。但是,很多求职…...
手把手教你用STM32实现国标交流充电桩的CP信号检测(附完整代码)
手把手教你用STM32实现国标交流充电桩的CP信号检测(附完整代码) 在电动汽车充电基础设施快速发展的今天,交流充电桩因其成本优势和广泛适用性成为市场主流。作为嵌入式开发者,理解并实现充电控制导引(CP)信…...
