当前位置: 首页 > 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;适用于不同的输入数据场景。 以下是一个体系化、结构化的教程&…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...