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

北邮22信通:(10)第三章 3.2栈的实现

北邮22信通一枚~   

跟随课程进度每周更新数据结构与算法的代码和文章 

持续关注作者  解锁更多邮苑信通专属代码~

上一篇文章:

北邮22信通:(9)实验1 题目六:模拟内存管理(搬运官方代码)_青山如墨雨如画的博客-CSDN博客

下一篇文章:

目录

3.2.1顺序栈

代码部分:

运行结果:

遇到问题:

运行结果:

3.2.2链式栈:

代码部分:

运行结果:


***闲话***

老规矩,书上干净完整代码,拿去用!

最近一直在忙感冒忙修电脑忙期中考试(          有点断更(

顺序栈里边两个栈共用一个存储空间的代码正在更新中  敬请期待

下面就是实现顺序栈和链式栈的代码,其实原理都差不多,甚至主函数都一样(

对小编个人而言更喜欢用链表a 不想判断顺序栈可恶的开始终止位置

然后虚拟数据类型我写了一个student,比较简单的数据类型嘞,方便大家看

其他的想到啥再补充啥  有问题或者我写的有不对的地方欢迎评论区指正!

**********

3.2.1顺序栈

代码部分:

#include <iostream>
using namespace std;
struct student
{int ID;string name;
};
ostream& operator<<(ostream& output, student& stu)
{output << stu.ID << " " << stu.name;return output;
}
const int stacksize = 1024;
template <class temp>
class seqstack
{
public:seqstack() { top = -1; }void push(temp x);temp pop();temp gettop();bool empty() { return top == -1 ? true : false; }//判断栈空时的条件:top==-1?
private:temp data[stacksize];int top;
};template<class temp>
void seqstack<temp>::push(temp x)
{if (this->top > stacksize - 1)throw"上溢";this->top++;this->data[this->top] = x;
}template <class temp>
temp seqstack<temp>::pop()
{if (empty())throw"下溢";this->top--;return this->data[this->top + 1];
}template<class temp>
temp seqstack<temp>::gettop()
{if (empty())throw"下溢";return this->data[this->top];
}
int main()
{try{system("color 0A");student x[5] = { {1,"zhang"},{2,"wang"},{3,"li"},{4,"zhao"},{5,"meng"} };seqstack<student> seq1;cout << "显示栈内是否为空?" << endl;cout << seq1.empty();cout << endl << endl;cout << "数据传输中……" << endl;for (int i = 0; i < 5; i++)seq1.push(x[i]);cout << "显示栈内是否为空?" << endl;cout << seq1.empty();cout << endl << endl;student stutemp;for (int i = 0; i < 5; i++){cout << "出栈元素的信息:" << endl;stutemp = seq1.pop();cout << stutemp;cout << endl;cout << "此时栈顶元素信息:" << endl;stutemp = seq1.gettop();cout << stutemp;cout << endl << endl;}cout << endl << "现在重新判断栈是否为空:" << endl;cout << seq1.empty();}catch (const char* a){cout << a << endl;}return 0;
}

运行结果:

遇到问题:

发现没有执行程序第79、80行

原因:catch到了const char*类型的异常,程序终止运行。

需要注意的是,一定要catch (const char*)!!!不要catch(string)否则你的程序跑不起来

我们把68行循环终止条件改成3

运行结果:

 

3.2.2链式栈:

代码部分:

#include <iostream>
using namespace std;
struct student
{int ID;string name;
};
ostream& operator<<(ostream& output, student& stu)
{output << stu.ID << " " << stu.name;return output;
}
template <class temp>
struct node
{temp data;node<temp>* next;
};template <class temp>
class linkstack
{
public:linkstack() { top = NULL; }~linkstack();void push(temp x);temp pop();temp gettop();bool empty(){return top == NULL ? true : false;}
private:node<temp>* top;
};template <class temp>
void linkstack<temp>::push(temp x)
{node<temp>* p = new node<temp>;p->data = x;p->next = this->top;this->top = p;
}template<class temp>
temp linkstack<temp>::pop()
{if (empty())throw "下溢";temp x = this->top->data;node<temp>* p = this->top;this->top = this->top->next;delete p;return x;
}template<class temp>
linkstack<temp>::~linkstack()
{while (this->top != NULL){node<temp>* p = this->top;this->top = this->top->next;delete p;}
}template<class temp>
temp linkstack<temp>::gettop()
{if (empty())throw"下溢";return this->top->data;
}
int main()
{try{system("color 0A");student x[5] = { {1,"zhang"},{2,"wang"},{3,"li"},{4,"zhao"},{5,"meng"} };linkstack<student> linklist1;cout << "显示栈是否为空?" << endl;cout << linklist1.empty();cout << endl << endl;cout << "数据传输中……" << endl;for (int i = 0; i < 5; i++)linklist1.push(x[i]);cout << "显示栈是否为空?" << endl;cout << linklist1.empty();cout << endl << endl;student stutemp;for (int i = 0; i < 5; i++){cout << "出栈元素信息:" << endl;stutemp = linklist1.pop();cout << stutemp;cout << endl;cout << "此时栈顶元素信息:" << endl;stutemp = linklist1.gettop();cout << stutemp;cout << endl << endl;}cout << "现在重新判断栈是否为空:" << endl;cout << linklist1.empty();}catch (const char*a){cout << a << endl;}return 0;
}

运行结果:

(将pop循环改成循环到3,同理,会显示最后一行“现在重新判断栈是否为:”) 

相关文章:

北邮22信通:(10)第三章 3.2栈的实现

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章&#xff1a; 北邮22信通&#xff1a;&#xff08;9&#xff09;实验1 题目六&#xff1a;模拟内存管理&#xff08;搬运官方代码&#xff09;_青…...

Vue3之使用js实现动画

概述 动画的实现其实不仅可以使用CSS的方式实现&#xff0c;而且还可以使用js的方式实现&#xff0c;二者有啥区别呢&#xff1f;CSS更加注重动画的展现&#xff0c;性能更好&#xff0c;而js的方式性能稍微差点&#xff0c;但是可以在动画执行的每一个过程中做些额外的操作。…...

金三银四,你准备好面试了吗? (附30w字软件测试面试题总结)

不知不觉&#xff0c;已是3月下旬。最近有很多小伙伴都在跟我谈论春招面试的问题&#xff0c;其实对于面试&#xff0c;我也没有太多的经验&#xff0c;只能默默地把之前整理的软件测试面试题分享给Ta。今天就来大致的梳理一下软件测试的面试体系&#xff08;每一部分最后都有相…...

【C语言学习】数组

数组&#xff08;Array&#xff09;就是一些列具有相同类型的数据的集合&#xff0c;这些数据在内存中依次挨着存放&#xff0c;彼此之间没有缝隙。 数组不是C语言的专利&#xff0c;Java、C、C#、JavaScript、PHP 等其他编程语言也有数组。 C语言数组属于构造数据类型。一个…...

ElasticSearch序列 - SpringBoot整合ES:根据指定的 ids 查询

文章目录1. ElasticSearch 根据 ids 查询文档2. SpringBoot整合ES实现 ids 查询1. ElasticSearch 根据 ids 查询文档 ① 索引文档&#xff0c;构造数据 PUT /my_index/_doc/1 {"price":10 }PUT /my_index/_doc/2 {"price":20 }PUT /my_index/_doc/3 {&qu…...

Spark SQL实战(08)-整合Hive

1 整合原理及使用 Apache Spark 是一个快速、可扩展的分布式计算引擎&#xff0c;而 Hive 则是一个数据仓库工具&#xff0c;它提供了数据存储和查询功能。在 Spark 中使用 Hive 可以提高数据处理和查询的效率。 场景 历史原因积累下来的&#xff0c;很多数据原先是采用Hive…...

堆(数据结构系列11)

目录 前言&#xff1a; 1.优先级队列概念 2.堆的概念 3.堆的存储方式 4.堆的创建 5.创建堆的时间复杂度 6.堆的插入和删除 6.1堆的插入 6.2堆的删除 结束语&#xff1a; 前言&#xff1a; 上一次博客中小编主要与大家分享了 二叉树一些相关的知识点和一些练习题&…...

算法训练第四十二天|01背包问题 二维 、01背包问题 一维、416. 分割等和子集

动态规划part0401背包问题 二维01 背包二维dp数组01背包完整c测试代码总结01背包问题 一维一维dp数组&#xff08;滚动数组&#xff09;一维dp01背包完整C测试代码416. 分割等和子集题目描述思路01背包问题总结01背包问题 二维 视频链接&#xff1a;https://www.bilibili.com/…...

Java-如何使用Java将图片和文字拼接在一起(并非是给图片加水印)

之前有遇到一个问题 问题背景&#xff1a;项目中&#xff0c;有一个功能&#xff0c;管理端可以将客户创建的小程序码下载到本地&#xff0c;方便客户将对应门店的小程序码打印出来并张贴到门店&#xff0c;做门店的引流和会员入会。 具体问题&#xff1a;当小程序码的数量较少…...

Metasploit入门到高级【第三章】

来自公粽号&#xff1a;Kali与编程预计更新第一章&#xff1a;Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章&#xff1a;Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章&#xff1a;Metasploi…...

枚举的使用

Java 枚举是一个特殊的类&#xff0c;一般表示一组常量&#xff0c;比如一年的 4 个季节&#xff0c;一个年的 12 个月份&#xff0c;一个星期的 7 天&#xff0c;方向有东南西北等。1 问题如何在类中使用枚举&#xff0c;例如枚举出一年的四个季度&#xff0c;并且通过迭代枚举…...

Python进阶语法

1.1 Python进阶语法 1.1.1 交换变量 一行代码快速交换两个变量&#xff0c;无需创建临时变量。 from icecream import ica 2 b 4 a, b b, a ic(a, b)ic| a: 4, b: 2 1.1.2 链式比较 from icecream import ica 97 if 90 < a < 100:ic(a)ic| a: 97 1.1.3 初始化列表…...

Pyspark_结构化流4

Pyspark 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hbase Hi…...

Linux cmp 命令

Linux cmp 命令用于比较两个文件是否有差异。 当相互比较的两个文件完全一样时&#xff0c;则该指令不会显示任何信息。若发现有所差异&#xff0c;预设会标示出第一个不同之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为"-"&#xff0c;则cmp指令…...

Python入门到高级【第五章】

预计更新第一章. Python 简介 Python 简介和历史Python 特点和优势安装 Python 第二章. 变量和数据类型 变量和标识符基本数据类型&#xff1a;数字、字符串、布尔值等字符串操作列表、元组和字典 第三章. 控制语句和函数 分支结构&#xff1a;if/else 语句循环结构&#…...

C语言中(i++)+ (i++)真的每次都等于3吗?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言结论证明首先&#xff0c;登场的是我们的VC6.0&#xff08;还有Linux&#xff09;最后一位&#xff0c;我使用了小熊猫C&#xff08;还有Clion&#xff09;请添加…...

Cursor,程序员的 AI 代码编辑助手

相信大家都或多或少地听说过、了解过 chatGPT &#xff0c;半个月前发布的 GPT-4 &#xff0c;可谓是 AI 赛道上的一个王炸 那么今天咸鱼给大家分享一个开源的 AI 代码编辑器——Cursor&#xff0c;让各位程序员在编程之路上一骑绝尘 &#x1f603; 介绍 Cursor 是一个人工智…...

基于XML的自动装配~

基于XML的自动装配之场景模拟&#xff1a; 自动装配&#xff1a;根据指定的策略&#xff0c;在IOC容器中匹配某一个bean&#xff0c;自动为指定的bean中所依赖的类类型或者接口类型赋值 之前我们学过的依赖注入&#xff0c;我们在为不同属性赋值时&#xff0c;例如类类型的属性…...

完全二叉树的4种遍历方式

一张二叉树的图 1&#xff0c;二叉树的特点 每个点p的左儿子是p*2,右儿子是p*21&#xff0c;可以分别表示为p<<1与p<<1|1节点的序号是从左到右&#xff0c;从上到下增加的每个点至多2个儿子&#xff08;屁话&#xff08;bushi&#xff09;&#xff09; 2&#xff…...

【vue2】使用elementUI进行表单验证实操(附源码)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;vue使用elementUI进行表单验证实操&#xff08;附源码&#xff09; 【前言】我们在构建一…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...