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

栈的数据结构实验报告

一、实验目的:

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;

}

  • 运行与测试(测试数据和实验结果分析

使用栈时,可能会遇到栈溢出或栈下溢的问题。栈溢出指尝试将数据推入一个已满的栈时发生的错误。为了避免栈溢出,在推入和弹出元素之前先检查栈是否已满。栈下溢则是指尝试从一个空栈中弹出数据时发生的错误。为了避免栈下溢,需要在弹出元素之前检查栈是否为空。另外需要确保正确地操作栈顶指针和数据存放顺序

  • 总结与心得

通过编写这段代码,我更深入地理解了栈的基本概念和操作,熟悉栈的应用场景。栈是一种后进先出的数据结构,只能在栈顶进行插入和删除操作。将一组整数按照奇偶性分类存储到两个不同的栈中,并按照出栈的顺序输出分类结果。这是栈的一个常见应用场景。通过这个实验,我更清楚地认识到栈在问题解决中的作用。

相关文章:

栈的数据结构实验报告

一、实验目的&#xff1a; 1、理解栈的定义&#xff1b; 2、利用栈处理实际问题。 二、实验内容&#xff08;实验题目与说明&#xff09; 利用栈实现数据的分类&#xff0c;将输入的整数以奇偶为标准分别存放到两个栈中&#xff0c;并最终从栈1和栈2输出偶数和奇数序列。 …...

ValueError: Could not find a backend to open path with iomode `wI` 解决

运行如下语句时报错 imageio.mimwrite(os.path.join(savedir, video.mp4)报错信息&#xff1a; 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的开发流程而构建的&#xff0c;即使是使用springMVC框架&#xff0c;也依然需要大量配置和依赖导入&#xff0c; 这无疑是繁琐的&#xff0c;spring Boot采用了”习惯由于配置“的原则&#xff0c;进行一键化部署&#xff0c;这样极大…...

探索Elasticsearch内存应用的关键因素

了解Elasticsearch内存模型 Elasticsearch的内存使用主要包括堆内存和操作系统缓存。堆内存是Elasticsearch用来存储数据结构的内存&#xff0c;例如文档索引、倒排索引等。操作系统缓存则是Elasticsearch缓存磁盘上的数据块以加速读取操作的一种机制&#xff0c;通常被称为OS…...

关于简单的数据可视化

1. 安装数据可视化必要的openpyxl、pandas&#xff0c;matplotlib等软件包 使用清华源&#xff0c;命令如下&#xff1a; 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屏价格:影响因素与市场趋势

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

C++ 释放指针

在C中&#xff0c;释放指针通常使用delete或delete[]操作符&#xff1b; 如果指针指向的是单个对象&#xff0c;可以使用delete操作符进行释放&#xff1b; 在释放完内存后&#xff0c;最好将指针置为nullptr&#xff0c;以避免出现悬空指针&#xff08;dangling pointer&#…...

三数之和【双指针】

Problem: 15. 三数之和 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 两数相加的加强版&#xff0c;先确定第一个数&#xff0c;然后从右边去用双指针找另外两个数。注意题目需要避免重复的答案&#xff0c;所以要注意处理这个问题。 复杂度 时间复杂度: 添加…...

http 503 错误

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

MATLAB - MPC - 优化问题(Optimization Problem)

系列文章目录 前言 模型预测控制可在每个控制间隔内解决一个优化问题&#xff0c;具体来说就是二次规划(QP)。求解结果决定了被控对象在下一个控制间隔之前使用的操纵变量&#xff08;MV&#xff09;。 该 QP 问题具有以下特点&#xff1a; 目标或 "成本 "函数 - …...

机器学习中的概念 张量、标量、向量、矩阵等数据结构的区别

张量、标量、向量和矩阵等数据结构在深度学习和数学中扮演着重要角色&#xff0c;它们之间的区别如下&#xff1a; 标量&#xff08;Scalar&#xff09;&#xff1a;标量是一个单独的数&#xff0c;它没有方向&#xff0c;只有大小。在深度学习中&#xff0c;标量通常表示一个…...

eureka注册列表 某服务出现多个服务实例

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

ubuntu22.04配置双网卡绑定提升带宽

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

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 操作符-学习笔记

提前准备&#xff1a; pipe 方法: 用于组合多个操作符,可以将一系列操作符作为参数传递给 pipe 方法&#xff0c;这些操作符将 依次 对数据流进行处理。这里的依次很关键&#xff0c;也代表着pipe()中组合的这么几个操作符的执行顺序就是从开始一直到结束的&#xff0c;其中的…...

【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对加密后的数据进行解密&#xff0c;Hive是不支持的&#xff0c;尝试了华为DWS数仓&#xff0c;华为只支持在DWS中的SM4加密解密&#xff0c;不支持外部加密数据DWS解密 新建Maven工程 只需要将引用的第三方依赖打到jar包中&#xff0c;hadoop和…...

CentOS 8 8.5.2111 网络在线安装系统 —— 筑梦之路

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

安全与认证Week3

目录 Key Management 密钥管理 密钥交换、证书 密钥的类别 密钥管理方面 密钥分发问题 密钥分发方案 混合密钥分发 公钥分发 公钥证书 X.509 理解X.509 X.509证书包含 X.509使用过程 X.509身份验证服务 X.509版本3 取消 由X.509引申关于CA 用户认证、身份管理…...

跟我学c++中级篇——再谈C++20中的协程

一、协程 在前面分析过协程是什么&#xff0c;也对c20中的协程的应用进行了举例说明。所以这次重点分析一下c20中的整体构成及应用的方式。等明白了协程是如何动作的&#xff0c;各种情况下如下何处理相关的事件&#xff0c;那么在以后写协程时就不会死搬硬套了。 二、整体说…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

51c自动驾驶~合集58

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

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...