当前位置: 首页 > news >正文

C++实现顺序栈和链栈操作(实验3--作业)

顺序栈 

一、主要功能

实现了顺序栈(SqStack)的数据结构,并利用该数据结构进行了栈的基本操作以及数制转换的功能。

二、数据结构定义

  1. 定义了一些常量:
    • MAXSIZE表示栈的最大长度为 100。
    • OVERFLOw表示存储失败的错误码为 -2。
    • OKERROR分别表示操作成功和失败的状态码。
  2. 定义了数据类型:
    • Statusint类型,用于表示操作的状态。
    • SEleTypeint类型,代表栈中存储的数据类型。
  3. 定义了顺序栈结构体SqStack
    • SEleType *base是指向栈内元素数组的指针。
    • SEleType *top是栈顶指针。
    • int stacksize表示当前分配的栈可使用的最大存储容量。

三、函数功能

  1. StackCreate函数:用于初始化顺序栈,为栈分配内存空间,并设置初始状态。
  2. StackEmpity函数:判断栈是否为空。
  3. StackFull函数:判断栈是否已满。
  4. StackPush函数:将元素入栈,如果栈已满则返回错误状态。
  5. StackPop函数:将栈顶元素出栈,并通过引用参数返回该元素,如果栈为空则返回错误状态。
  6. StackToEmpty函数:将栈置空,通过不断出栈操作实现。
  7. StackDestroy函数:销毁栈,释放内存空间。
  8. StackTop函数:获取栈顶元素。
  9. StackPrint函数:打印栈内所有元素,通过不断出栈并输出实现。

四、主函数流程

  1. 首先创建一个顺序栈S并初始化。
  2. 向栈中依次压入数字 5、4、2、3、1,然后打印栈内元素。
  3. 将栈置空。
  4. 进行数制转换功能,用户输入一个数字N和转换的进制数JZ,通过不断对N取余并压入栈中,最后打印转换后的结果。
  5. 销毁栈。
    #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)的数据结构,并利用该数据结构进行了栈的基本操作以及数制转换的功能。

二、数据结构定义

  1. 定义了一些常量:
    • MAXSIZE表示栈的最大长度为 100(但在链式栈中未实际用到该常量)。
    • OVERFLOw表示存储失败的错误码为 -2(未实际用到)。
    • OKERROR分别表示操作成功和失败的状态码。
  2. 定义了数据类型:
    • Statusint类型,用于表示操作的状态。
    • LEleTypeint类型,代表栈中存储的数据类型。
  3. 定义了链式栈的节点结构体StackNode
    • LEleType data表示节点存储的数据。
    • struct StackNode *next指向下一个节点的指针。
    • StackNode是节点结构体的名称,*LinkStack是指向节点的指针类型别名,用于表示链式栈。

三、函数功能

  1. StackCreate函数:用于初始化链式栈,将栈顶指针置为NULL
  2. StackEmpty函数:判断链式栈是否为空。
  3. StackPush函数:创建一个新节点,将新节点的数据域设置为给定元素,然后将新节点插入到栈顶(即让新节点的next指向当前栈顶,然后更新栈顶指针为新节点)。
  4. StackPop函数:如果栈不为空,将栈顶元素出栈,通过引用参数返回该元素,并释放栈顶节点的内存空间,更新栈顶指针指向下一个节点。
  5. StackTop函数:获取栈顶元素的值,但不修改栈的状态。
  6. StackToEmpty函数:通过不断出栈操作将链式栈置空。
  7. StackDestroy函数:调用StackToEmpty函数将栈置空后,将栈顶指针置为NULL,实现栈的销毁。
  8. StackPrint函数:通过不断出栈并输出元素的方式打印链式栈中的所有元素,但这个过程会破坏栈的结构。

四、主函数流程

  1. 首先创建一个链式栈S并初始化。
  2. 向栈中依次压入数字 5、4、2、3、1,然后打印栈内元素(这会破坏栈的结构)。
  3. 将栈置空。
  4. 进行数制转换功能,用户输入一个数字N和转换的进制数JZ,通过不断对N取余并压入栈中,最后打印转换后的结果(同样会破坏栈的结构)。
  5. 销毁栈。
#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--作业)

顺序栈 一、主要功能 实现了顺序栈&#xff08;SqStack&#xff09;的数据结构&#xff0c;并利用该数据结构进行了栈的基本操作以及数制转换的功能。 二、数据结构定义 定义了一些常量&#xff1a; MAXSIZE表示栈的最大长度为 100。OVERFLOw表示存储失败的错误码为 -2。O…...

龙兴物联一体机:设备监测的智能先锋

龙兴物联物联网一体机的崛起 龙兴物联物联网一体机在设备监测领域占据着至关重要的地位。随着科技的不断进步和各行业对设备监测需求的日益增长&#xff0c;龙兴物联物联网一体机以其卓越的性能和广泛的适用性&#xff0c;迅速崛起并成为众多企业和机构的首选。 在当今数字化时…...

KinectDK相机SDK封装Dll出现k4abt_tracker_create()创建追踪器失败的问题

项目场景&#xff1a; KinectDK相机SDK封装Dll 问题描述 在 C 环境下&#xff0c;使用 GPU 模式&#xff08;默认&#xff09;调用 k4abt_tracker_create 函数正常工作。但是&#xff0c;在 Python 环境下&#xff0c;通过 ctypes 调用相同的 DLL&#xff0c;当使用 GPU 模式…...

Linux 命令—— ping、telnet、curl、wget(网络连接相关命令)

文章目录 网络连接相关命令pingtelnetcurlwget 网络连接相关命令 ping ping 命令是用于测试网络连接和诊断网络问题的工具。它通过向目标主机发送 ICMP&#xff08;Internet Control Message Protocol&#xff09;回显请求&#xff0c;并等待回复&#xff0c;以确定目标主机是…...

高速缓冲存储器Cache是如何工作的、主要功能、高速缓冲存储器Cache和主存有哪些区别

1、高速缓冲存储器Cache是如何工作的 高速缓冲存储器Cache的工作主要基于程序和数据访问的局部性原理&#xff0c;其工作方式可以概括为以下几点&#xff1a; 存储近期可能访问的数据和指令&#xff1a;Cache会存储CPU近期可能访问的数据和指令&#xff0c;当CPU需要访问这些…...

极简版Java敏感词检测SDK

敏感词工具 sensitive-word 基于 DFA 算法实现的高性能敏感词工具&#xff0c;开源在GitHub&#xff1a;https://github.com/houbb/sensitive-word。用于敏感词/违禁词/违法词/脏词等的识别和阻拦&#xff0c;是基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。 使用场景…...

H3C路由器交换机操作系统介绍

路由器 路由器的作用 连接具有不同介质的链路连接网络或子网&#xff0c;隔离广播对数据报文执行寻路和转发交换和维护路由信息 H3C 路由器系列 CR系列核心路由器SR系列高端路由器MSR系列路由器ER系列路由器 交换机 交换机的作用 连接多个以太网物理段&#xff0c;隔离冲…...

【项目案例】-音乐播放器-Android前端实现-Java后端实现

精品专题&#xff1a; 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是一个图形库&#xff0c;可以用来做一些c/c小游戏&#xff0c;帮助学习。 一、进入EasyX官网 https://easyx.cn/ 二、点击下载EasyX 三、下载好后以管理员身份运行它 四、点击下一步 五、然后它会自动检测你的编辑器&#xff0c;用哪个就在哪个点安装 六、安装成功…...

数据结构 - 队列

队列也是一种操作受限的线性数据结构&#xff0c;与栈很相似。 01定义 栈的操作受限表现为只允许在队列的一端进行元素插入操作&#xff0c;在队列的另一端只允许删除操作。这一特性可以总结为先进先出&#xff08;First In First Out&#xff0c;简称FIFO&#xff09;。这意味…...

基于springboot美食推荐商城的设计与实现

基于springboot美食推荐商城的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;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数据库中&#xff0c;DECODE 函数是一个非常实用的条件处理函数&#xff0c;通常用于替代简单的 CASE WHEN 语句。它根据给定的值列表进行匹配&#xff0c;如果匹配成功则返回相应的值。如果不匹配&#xff0c;返回一个默认值。 问题描述 SELECT DECODE(-21, -1, NU…...

如何用示波器检测次级点火系统(一)

写在最前面&#xff1a; 单看标题可能会让你觉得这篇文章的主题是关于检测线圈&#xff0c;火花塞和火花塞插头电线。但我们指的是分析燃烧室内电子的行为。目标是看燃料混合物&#xff0c;阀座&#xff0c;压缩&#xff0c;积碳和其它影响这种特性的症状。最终目的是要学会分…...

基于SpringBoot+Vue+uniapp的涪陵区特色农产品交易系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…...

bmp怎么转换为jpg?快速批量将bmp转换为jpg

bmp怎么转换为jpg&#xff1f;在日常的数字生活中&#xff0c;我们时常会遇到各种格式的图片文件&#xff0c;它们各自拥有不同的特点和用途。最近&#xff0c;我遇到了一个有趣的小插曲&#xff1a;我从网络上下载了一张精美的BMP格式图片&#xff0c;打算用它作为一篇报告的背…...

centos8配置java环境变量jdk8u422-b05

1. 下载 JDK 8u422-b05 首先&#xff0c;确保已经下载了 JDK 8u422-b05 的二进制文件。如果还没有下载&#xff0c;你可以去 Oracle 官方网站或者其他可信的源下载 JDK 8u422。 2. 安装 JDK 将下载的 JDK 文件解压到 /usr/local/java 目录下&#xff1a; sudo mkdir /usr/l…...

基于SSM的校园拓展活动管理系统

文未可获取一份本项目的java源码和数据库参考。 1 选题背景 校园文化是精神的载体&#xff0c;是青年成长成才的沃土&#xff0c;是一种体现校园的硬件设施、精神风貌、制度体系、办学理念以及办学特色的综合文化。文明程度高、文化气息浓、活动种类多的校园文化不仅能焕发学校…...

Python随机森林算法详解与案例实现

目录 Python随机森林算法详解与案例实现1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例&#xff1a;使用随机森林预测鸢尾花品种4.1 数据集介绍4.2 代码实现4.3 代码解释4.4 运行结果 5、回归案例&#xff1a;使用随机森林预测波士顿房价5.1 数据集介绍5.2 代码实…...

提示词高级阶段学习day2.1-在提示词编写中对{}的使用教程

首先在 prompt engineering 中&#xff0c;使用 {} 通常是为了标识占位符或变量&#xff0c; 这些占位符可以在实际生成内容时被动态替换。 通过这种方式&#xff0c;prompt 可以更加通用和灵活&#xff0c;适用于不同的输入数据场景。 以下是一个体系化、结构化的教程&…...

Fan Control终极指南:5大技巧实现Windows系统风扇智能控制与静音优化

Fan Control终极指南&#xff1a;5大技巧实现Windows系统风扇智能控制与静音优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitH…...

Matplotlib横坐标刻度从原点开始的3种实用方法

1. 为什么横坐标刻度从原点开始很重要 做数据可视化时&#xff0c;我们经常需要展示数据从零开始的变化趋势。比如展示销售额增长、用户数量变化或者实验数据对比时&#xff0c;如果横坐标不从零开始&#xff0c;很容易造成视觉上的误导。我见过不少新手做的图表&#xff0c;因…...

告别重复劳动:用快马ai编程自动生成表单验证工具,效率翻倍

最近在开发一个用户注册系统时&#xff0c;发现表单验证这块特别耗费时间。每次都要重复写各种正则表达式&#xff0c;还要考虑各种边界情况&#xff0c;效率实在太低。于是我开始寻找能提升效率的解决方案&#xff0c;最终在InsCode(快马)平台上找到了理想的工具。 表单验证的…...

2026年一体化HR系统TOP8盘点:从集团管控到AI落地的选型指南

进入2026年&#xff0c;企业选一体化HR系统不再只看模块是否齐全&#xff0c;更看能否支撑集团管控、复杂用工、数据洞察与AI提效闭环。红海云在国央企与复杂场景的深度适配、以及AI在招聘与员工服务等环节的可落地性上更突出&#xff1b;用友、北森、金蝶在业人融合、PaaS扩展…...

从 Vectorless 到 SAIF 再到板级实测:HLS Kernel 功耗估计全流程实战

从 Vectorless 到 SAIF 再到板级实测&#xff1a;HLS Kernel 功耗估计全流程实战 很多人在做 FPGA 或 SoC 上的 HLS kernel 时&#xff0c;第一次接触功耗分析&#xff0c;往往是从 Vivado 里的 report_power 开始的。点一下按钮&#xff0c;工具很快就会给出一个总功耗数字&am…...

从安装到实战:基于快马AI生成openclaw的网站内容监控应用项目

最近在做一个网站内容监控的小工具&#xff0c;尝试用openclaw框架来实现自动化采集和变更检测。这个项目从环境搭建到功能实现踩了不少坑&#xff0c;记录下完整过程给有类似需求的同学参考。 环境准备与openclaw安装 openclaw的安装其实挺简单&#xff0c;直接用pip就能搞定…...

当ai安装助手遇见dify:用快马生成能分析环境、智能决策的安装引导代码

最近在折腾Dify这个AI应用开发平台的安装&#xff0c;发现它的安装过程其实也能用AI来优化。刚好用InsCode(快马)平台试了试&#xff0c;发现AI辅助安装真的能省不少事。这里记录下我的实践过程&#xff0c;分享如何用智能脚本让安装流程更顺畅。 环境分析是智能安装的第一步 传…...

5个实战场景:QuickBMS的资源提取全流程指南

5个实战场景&#xff1a;QuickBMS的资源提取全流程指南 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS QuickBMS是一款开源的资源提取工具&#xff0c;集成超过400种压缩和加密算法&#xff0c…...

3步终极修复方案:拯救损坏的直播录制文件

3步终极修复方案&#xff1a;拯救损坏的直播录制文件 【免费下载链接】BililiveRecorder 录播姬 | mikufans 生放送录制 项目地址: https://gitcode.com/gh_mirrors/bi/BililiveRecorder 直播录制时最令人头疼的是什么&#xff1f;不是网络波动&#xff0c;不是主播下播…...

猫抓:网页资源嗅探与下载的全功能解决方案

猫抓&#xff1a;网页资源嗅探与下载的全功能解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化内容爆炸的时代&#xff0c;网页资源…...