栈的数据结构实验报告
一、实验目的:
1、理解栈的定义;
2、利用栈处理实际问题。
二、实验内容(实验题目与说明)
利用栈实现数据的分类,将输入的整数以奇偶为标准分别存放到两个栈中,并最终从栈1和栈2输出偶数和奇数序列。
三、算法设计(核心代码或全部代码)
#include <stdio.h>
#include <stdlib.h>
#define max 100 // 栈最大容量
typedef struct Stack {
int data[max];
int top;
} Stack;
// 将栈顶指针设为-1,表示栈为空
void initStack(Stack *s) {
s->top = -1;
}
// 栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 栈是否已满
int isFull(Stack *s) {
return s->top == max - 1;
}
// 入栈
void push(Stack *s, int x) {
if (isFull(s)) {
printf("Stack is full\n");
return;
}
s->data[++(s->top)] = x;
}
// 出栈
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
return s->data[(s->top)--];
}
// 获取栈顶元素
int peek(Stack *s) {
if (isEmpty(s)) {
printf("Error: Stack is empty\n");
return -1;
}
return s->data[s->top];
}
// 分类函数
void classify(Stack *s1, Stack *s2) {
int x;
printf("请输入一组整数,以0结束输入:\n");
scanf("%d", &x);
while (x != 0) {
if (x % 2 == 0) {
push(s1, x); // 偶数入栈s1
} else {
push(s2, x); // 奇数入栈s2
}
scanf("%d", &x); // 继续输入下一个整数
}
}
// 输出函数
void output(Stack *s1, Stack *s2) {
printf("偶数序列为:");
while (!isEmpty(s1)) {
printf("%d ", pop(s1)); // 从s1中依次弹出偶数
}
printf("\n奇数序列为:");
while (!isEmpty(s2)) {
printf("%d ", pop(s2)); // 从s2中依次弹出奇数
}
printf("\n");
}
int main() {
Stack s1, s2;
initStack(&s1);
initStack(&s2);
classify(&s1, &s2);
output(&s1, &s2);
return 0;
}
-
运行与测试(测试数据和实验结果分析)
使用栈时,可能会遇到栈溢出或栈下溢的问题。栈溢出指尝试将数据推入一个已满的栈时发生的错误。为了避免栈溢出,在推入和弹出元素之前先检查栈是否已满。栈下溢则是指尝试从一个空栈中弹出数据时发生的错误。为了避免栈下溢,需要在弹出元素之前检查栈是否为空。另外需要确保正确地操作栈顶指针和数据存放顺序
-
总结与心得
通过编写这段代码,我更深入地理解了栈的基本概念和操作,熟悉栈的应用场景。栈是一种后进先出的数据结构,只能在栈顶进行插入和删除操作。将一组整数按照奇偶性分类存储到两个不同的栈中,并按照出栈的顺序输出分类结果。这是栈的一个常见应用场景。通过这个实验,我更清楚地认识到栈在问题解决中的作用。
相关文章:

栈的数据结构实验报告
一、实验目的: 1、理解栈的定义; 2、利用栈处理实际问题。 二、实验内容(实验题目与说明) 利用栈实现数据的分类,将输入的整数以奇偶为标准分别存放到两个栈中,并最终从栈1和栈2输出偶数和奇数序列。 …...
ValueError: Could not find a backend to open path with iomode `wI` 解决
运行如下语句时报错 imageio.mimwrite(os.path.join(savedir, video.mp4)报错信息: ValueError: Could not find a backend to open video.mp4 with iomode wI. Based on the extension, the following plugins might add capable backends:FFMPEG: pip install …...

小白入门基础 - spring Boot 入门
1.简介 spring Boot是为了简化java的开发流程而构建的,即使是使用springMVC框架,也依然需要大量配置和依赖导入, 这无疑是繁琐的,spring Boot采用了”习惯由于配置“的原则,进行一键化部署,这样极大…...
探索Elasticsearch内存应用的关键因素
了解Elasticsearch内存模型 Elasticsearch的内存使用主要包括堆内存和操作系统缓存。堆内存是Elasticsearch用来存储数据结构的内存,例如文档索引、倒排索引等。操作系统缓存则是Elasticsearch缓存磁盘上的数据块以加速读取操作的一种机制,通常被称为OS…...

关于简单的数据可视化
1. 安装数据可视化必要的openpyxl、pandas,matplotlib等软件包 使用清华源,命令如下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn pandaspip install -i https://pypi.tuna.tsingh…...

透明OLED屏价格:影响因素与市场趋势
在当今的显示技术领域,透明OLED屏以其独特的透明特性和出色的显示效果,正逐渐成为市场的新宠。然而,对于许多消费者和企业来说,透明OLED屏的价格仍是关注的焦点。作为OLED透明屏市场部总监,我认为了解影响透明OLED屏价…...

C++ 释放指针
在C中,释放指针通常使用delete或delete[]操作符; 如果指针指向的是单个对象,可以使用delete操作符进行释放; 在释放完内存后,最好将指针置为nullptr,以避免出现悬空指针(dangling pointer&#…...
三数之和【双指针】
Problem: 15. 三数之和 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 两数相加的加强版,先确定第一个数,然后从右边去用双指针找另外两个数。注意题目需要避免重复的答案,所以要注意处理这个问题。 复杂度 时间复杂度: 添加…...

http 503 错误
503错误是一种HTTP状态码,表示你请求的网站或服务暂时不可用,通常是因为服务器过载或维护,你可能会看到类似这样的提示:503 Service Unavailable、503 Service Temporarily Unavailable、HTTP Server Error 503、HTTP Error 503 I…...

MATLAB - MPC - 优化问题(Optimization Problem)
系列文章目录 前言 模型预测控制可在每个控制间隔内解决一个优化问题,具体来说就是二次规划(QP)。求解结果决定了被控对象在下一个控制间隔之前使用的操纵变量(MV)。 该 QP 问题具有以下特点: 目标或 "成本 "函数 - …...
机器学习中的概念 张量、标量、向量、矩阵等数据结构的区别
张量、标量、向量和矩阵等数据结构在深度学习和数学中扮演着重要角色,它们之间的区别如下: 标量(Scalar):标量是一个单独的数,它没有方向,只有大小。在深度学习中,标量通常表示一个…...

eureka注册列表 某服务出现多个服务实例
最近文件导出功能偶发成功,大部分情况都失败,开始以为接口被拦截,gateway服务没有接口调用日志,发现测试环境可以,正式环境功能无法正常使用。 偶然看到注册中心如下 发现file服务有3个实例,调用接口将错误…...

ubuntu22.04配置双网卡绑定提升带宽
这里写自定义目录标题 Bonding简介配置验证参考链接 Bonding简介 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载均衡等功能,有很…...

VINS-MONO拓展1----手写后端求解器,LM3种阻尼因子策略,DogLeg,构建Hessian矩阵
文章目录 0. 目标及思路1. 非线性优化求解器2. 基于VINS-MONO的Marginalization框架构建Hessian矩阵2.1 estimator.cpp移植2.2 solve.cpp/preMakeHessian()2.3 solve.cpp/makeHessian() 3. solve.cpp/solveLinearSystem()求解正规方程4. 更新状态5. 迭代求解6. EVO评估结果7. 待…...
RxJS 操作符-学习笔记
提前准备: pipe 方法: 用于组合多个操作符,可以将一系列操作符作为参数传递给 pipe 方法,这些操作符将 依次 对数据流进行处理。这里的依次很关键,也代表着pipe()中组合的这么几个操作符的执行顺序就是从开始一直到结束的,其中的…...
【Linux】linux配置静态IP、动态IP方法汇总
1、systemd-networkd 1.1 说明 systemd-networkd是systemd 的一部分 ,负责 systemd 生态中的网络配置部分(systemd-networkd.service, systemd-resolved.service)。使用 systemd-networkd,你可以为网络设备配置基础的 DHCP/静态IP网络等,还可以配置虚拟网络功能,例如网桥…...
Hive自定义函数支持国密SM4解密
当前项目背景需要使用到国密SM4对加密后的数据进行解密,Hive是不支持的,尝试了华为DWS数仓,华为只支持在DWS中的SM4加密解密,不支持外部加密数据DWS解密 新建Maven工程 只需要将引用的第三方依赖打到jar包中,hadoop和…...

CentOS 8 8.5.2111 网络在线安装系统 —— 筑梦之路
之前写过一篇关于centos 8 官方停止更新维护后解决yum源问题的文章: CentOS 8 停止维护后换可用yum源——筑梦之路_http://ftp.iij.ad.jp/pub/linux/centos-vault/8.5.21-CSDN博客 由于centos 8 dvd的镜像比较大,有时候我们根本不需要去下载一个10G以上…...

安全与认证Week3
目录 Key Management 密钥管理 密钥交换、证书 密钥的类别 密钥管理方面 密钥分发问题 密钥分发方案 混合密钥分发 公钥分发 公钥证书 X.509 理解X.509 X.509证书包含 X.509使用过程 X.509身份验证服务 X.509版本3 取消 由X.509引申关于CA 用户认证、身份管理…...
跟我学c++中级篇——再谈C++20中的协程
一、协程 在前面分析过协程是什么,也对c20中的协程的应用进行了举例说明。所以这次重点分析一下c20中的整体构成及应用的方式。等明白了协程是如何动作的,各种情况下如下何处理相关的事件,那么在以后写协程时就不会死搬硬套了。 二、整体说…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...