当前位置: 首页 > 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;

}

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

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

  • 总结与心得

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

http://www.lryc.cn/news/274357.html

相关文章:

  • ValueError: Could not find a backend to open path with iomode `wI` 解决
  • 小白入门基础 - spring Boot 入门
  • 探索Elasticsearch内存应用的关键因素
  • 关于简单的数据可视化
  • 透明OLED屏价格:影响因素与市场趋势
  • C++ 释放指针
  • 三数之和【双指针】
  • http 503 错误
  • MATLAB - MPC - 优化问题(Optimization Problem)
  • 机器学习中的概念 张量、标量、向量、矩阵等数据结构的区别
  • eureka注册列表 某服务出现多个服务实例
  • ubuntu22.04配置双网卡绑定提升带宽
  • VINS-MONO拓展1----手写后端求解器,LM3种阻尼因子策略,DogLeg,构建Hessian矩阵
  • RxJS 操作符-学习笔记
  • 【Linux】linux配置静态IP、动态IP方法汇总
  • Hive自定义函数支持国密SM4解密
  • CentOS 8 8.5.2111 网络在线安装系统 —— 筑梦之路
  • 安全与认证Week3
  • 跟我学c++中级篇——再谈C++20中的协程
  • 【计算机毕业设计】SSM企业工资管理系统
  • x-cmd pkg | doggo - 现代化的 DNS 客户端
  • c++-智能指针
  • 烟花燃放如何管控?智能分析网关V4烟火检测保障烟火安全
  • Vue实现版本号输入、删除时光标自动移动到上、下一个输入框前端demo
  • 【胖虎的逆向之路】Android自制Https证书实现双向认证
  • 解析千兆多模光模块SFP-GE-SX
  • Go语言基础简单了解
  • kafka重平衡经验总结
  • Py之jupyter_client:jupyter_client的简介、安装、使用方法之详细攻略
  • 61.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏红字公告功能的逆向分析