栈的数据结构实验报告

一、实验目的:

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;

}

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

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

  • 总结与心得

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原来圣诞树可以这么做

先看结果 从上到下依次是&#xff1a; 2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7 ... 依次排下去&#xff0c;最后加4个单位数的数字 原来代码的世界里还有这个美。^V^

全志R128系统RTOS使用说明

使用串口访问设备 使用USB TypeC 连接线连接开发板 USB转串口 的接口&#xff0c;安装串口驱动程序&#xff1a;CH341SER.EXE 到设备管理器找到需要的串口&#xff0c;这里是 COM8 使用串口访问工具 PuTTY 打开串口&#xff0c;这里是 COM8&#xff0c;波特率 115200。 打开之后…

添加一个编辑的小功能(PHP的Laravel)

一个编辑的按钮可以弹出会话框修改断更天数 前台 加一个编辑按钮的样式&#xff0c;他的名字是固定好的 之前有人封装过直接用就好&#xff0c;但是一定放在class里面&#xff0c;不要放在id里面 看见不认识的方法一定要去看里面封装的是什么 之前就是没有看&#xff0c;所以…

如果PostgreSQL有两层nginx代理,会发生什么事?

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 1. 前言 PostgreSQL默认只能本机连接&#xff0c;若要在别的客户端远程连接pgsql&#xff0c;则需要修改配置文件pg_hba.conf&a…

如何将ElementUI组件库中的时间控件迁移到帆软报表中

需求:需要将ElementUI组件库中的时间控件迁移到帆软报表中,具体为普通报表的参数面板中,填报报表的组件中,决策报表的组件与参数面板中。 这三个场景中分别需要用到帆软报表二开平台的ParameterWidgetOptionProvider,FormWidgetOptionProvider,CellWidgetOptionProvider开…

无心剑小诗《银婚颂》

银婚颂 二十五个春秋共一轮 你是岁月赠予我最亮的星辰 从青春燃烧到岁月沉稳 你的笑颜,我永恒的晨昏 春花烂漫是你眼里的璀璨 夏日蝉鸣是彼此故事的和弦 秋叶纷飞诉说漫天情缘 冬雪纯洁见证温暖的牵绊 月光洒满每段共享小径 星光点染每个深情的夜晚 风雨同舟铸就铜墙铁壁 携…

书生·浦语大模型实战1

书生浦语大模型全链路开源体系 视频链接&#xff1a;书生浦语大模型全链路开源体系_哔哩哔哩_bilibili 大模型之所以能收到这么高的关注度&#xff0c;一个重要原因是大模型是发展通用人工智能的重要途径 深度信念网络&#xff1a; &#xff08;1&#xff09;又被称为贝叶斯网…

科技助力教育:数字化如何改变家校社协同育人?

近年来,随着社会的快速发展,教育的责任已不再仅局限于学校。家庭、学校和社会协同育人理念,正成为促进教育高质量发展的关键要素。 2023年初,教育部等十三部门联合印发《关于健全学校家庭社会协同育人机制的意见》,提出到“十四五”时期末,形成更加完善的由“学校积极主导、家…

Elasticsearch零基础实战

分享后可优化点&#xff08;待完成&#xff09; java es8 查询如何打印查询入参 &#xff1f;&#xff08;直接执行的json&#xff09; es自定义分词器 如何实现&#xff1f; kibana 监控jvm分子分母是什么 &#xff1f; es如何 改索引结构&#xff1f; 修改数据原理 分享…

【动态规划】C++算法:115.不同的子序列

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 LeetCode115 不同的子序列 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 示例 1&#xff1a; 输入&#xff1a;s “rab…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存&#xff08;CustomData&#xff09;功能&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的数据保存&#xff08;CustomData&#xff09;功能的技术背景CameraExplorer如何使用图像剪切&#xff0…

服务器执行rm命令时自动记录到审计日志中

目的 当在服务器上执行类似于 rm 命令时&#xff0c;自动记录该命令执行的时间&#xff0c;在哪里执行的&#xff0c;删除的什么文件&#xff0c;记录到审计日志中&#xff0c;能够查找到某些文件丢失原因 配置 # 需要root权限&#xff0c;sudo不行&#xff0c;这里假设执行…

工具网站DefiLlama全攻略:从零学习链上数据使用与发现

DefiLlama 是一个 DeFi(去中心化金融)信息聚合器,其主要功能是提供各种 DeFi 平台的准确、全面数据。DefiLlama 致力于在不受广告或赞助内容影响的情况下为用户提供这些数据,以确保信息内容的透明度和公正性,该平台聚合来自多个区块链的数据,让用户能够全面了解 DeFi 格局…

conda操作使用教程

一 conda介绍 Conda 是一个开源的包管理系统和环境管理系统&#xff0c;用于在 Linux、Windows 和 macOS 上管理 Python 包和依赖项&#xff0c;java有maven, python有conda,它是python开发者的最爱。 Conda 的核心功能&#xff1a; 包管理&#xff1a;安装、更新、删除 Pytho…

nginx配置图片服务器

目录 一&#xff1a;访问流程 二&#xff1a;缓存服务器配置 三&#xff1a;上传图片直接上传到图片服务器 四&#xff1a;加快图片访问 一&#xff1a;访问流程 访问缓存服务器(上面安装nginx反向代理到图片服务器&#xff0c;对外提供服务)->图片服务器 二&#xff1…

【本科生通信原理】【实验报告】【北京航空航天大学】实验二:AM、DSB调制/解调

一、实验目的 二、实验内容 三、实验程序 1、 function q1() N 1024; %采样点数 A 2; %直流分量 t0 5; %信号时长 dt t0 / N; %时间分辨率 fs 1 / dt; %系统采样频率…

深入理解可变参数

目录 1.C语言方式 1.1.宏介绍 1.2.原理详解 1.3.案例分析 1.4.其他实例 2.C之std::initializer_list 2.1.简介 2.2.原理详解 2.3.案例分析 3.C之可变参数模版 3.1.简介 3.2.可变参数个数 3.3.递归包展开 3.4.逗号表达式展开 3.5.Lambda 捕获 3.6.转发参数包 4…

2023 IoTDB Summit:清华大学软件学院长聘副教授龙明盛《IoTDB 新组件:内生机器学习》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

中国区县绿地曝光率数据,shp+excel格式,区县精度

基本信息. 数据名称: 中国区县绿地曝光率数据 数据格式: shpexcel 数据精度&#xff1a;区县 数据几何类型: —— 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 字段列表&#xff1a; 序号字段名称字段说明1xzqhdm_3区县代码2xzqhmc_3区县名称4xzqhm…

web网站,可当期末作业,随机一言,天气,时钟,音乐等综合网站

文章目录 主页面时间胶囊底部条文心一言音乐播放器天气时钟禁用右键其他每次刷新页面会随机更换壁纸新春版 主页面 时间胶囊 底部条 文心一言 点击可随机变化文心一言 音乐播放器 天气时钟 禁用右键 其他 每次刷新页面会随机更换壁纸 新春版