数据结构实验报告-栈

news2024/9/28 13:07:15

   

一、实验目的

1.掌握栈的定义、特点、逻辑结构,理解栈的抽象数据类型。

2.熟练掌握顺序栈的结构类型定义、特点和基于顺序栈的基本运算的实现。

3.熟练掌握链栈的结构类型定义、特点和基于链栈的基本运算的实现。

4.理解递归算法执行过程中栈的状态变化过程,初步掌握递归的应用。

5.掌握栈的应用。

二、实验内容

1.编写一个算法判断给定的字符向量是否为回文。回文是指正读与反读均相同的字符序列,如" abba "和" abdba "均是回文,但" good "不是回文。

#include <stdio.h>

#include <string.h>

#include <stdbool.h>

bool is_palindrome(char s[]) {

    int i = 0;

    int j = strlen(s) - 1;

    while (i < j) {

        if (s[i] != s[j]) {

            return false;

        }

        i++;

        j--;

    }

    return true;

}

int main() {

    char str1[] = "abba";

    char str2[] = "abdba";

    char str3[] = "good";

    printf("%s\n", is_palindrome(str1) ? "Palindrome" : "Not Palindrome");

    printf("%s\n", is_palindrome(str2) ? "Palindrome" : "Not Palindrome");

    printf("%s\n", is_palindrome(str3) ? "Palindrome" : "Not Palindrome");

    return 0;

}

}

  1. 编写一个算法,利用栈的基本运算将指定栈中的内容进行逆转。

#include <stdio.h>

#include <stdlib.h>

#define MAX_SIZE 100

typedef struct {

    int items[MAX_SIZE];

    int top;

} Stack;

void push(Stack *stack, int item) {

    stack->items[++stack->top] = item;

}

int pop(Stack *stack) {

    return stack->items[stack->top--];

}

void reverse_stack(Stack *stack) {

    Stack temp_stack;

    temp_stack.top = -1;

    while (stack->top != -1) {

        push(&temp_stack, pop(stack));

    }

    *stack = temp_stack; // 将逆序后的栈赋值回原栈

}

int main() {

    Stack stack;

    stack.top = -1;

    push(&stack, 1);

    push(&stack, 2);

    push(&stack, 3);

    reverse_stack(&stack);

    while (stack.top != -1) {

        printf("%d\n", pop(&stack));

    }

    return 0;

}

  1. 设整数序列a1,a2,…, an ,给出求解其中最大值的递归算法。

#include <stdio.h>

int find_max_recursive(int arr[], int n) {

    if (n == 1) {

        return arr[0];

    }

    int max_rest = find_max_recursive(arr, n - 1);

    return (arr[n - 1] > max_rest) ? arr[n - 1] : max_rest;

}

int main() {

    int arr[] = {3, 7, 2, 8, 5};

    int n = sizeof(arr) / sizeof(arr[0]);

    printf("Max Value: %d\n", find_max_recursive(arr, n));

    return 0;

}

三、实验心得:
在本次实验中,我系统地学习了关于栈的知识,并获得了以下几方面的收获和心得体会:

首先,我深入理解了栈的定义、特点和逻辑结构,以及栈作为一种抽象数据类型的重要性。栈是一种后进先出(LIFO)的数据结构,其特点在于只能在栈顶进行插入和删除操作,这使得栈在很多算法和程序设计中具有重要应用价值。

其次,我熟练掌握了顺序栈和链栈两种结构类型的定义、特点以及基本操作的实现方法。顺序栈通过数组实现,操作简单高效;而链栈则利用链表结构实现,具有更大的灵活性。通过实践操作,我掌握了两种栈结构的操作方式,能够熟练地进行栈的基本操作。

进一步地,我理解了递归算法执行过程中栈的状态变化过程,以及递归在算法设计中的应用。递归算法的本质是将大问题划分为相同或类似的子问题,通过不断调用函数自身来解决问题。而栈在递归执行过程中扮演了关键的角色,记录了每一层递归的信息。

最后,我认识到栈在实际应用中的广泛性和重要性。栈在计算机科学中有着诸多应用,如表达式求值、函数调用和递归实现等。通过本次实验的学习,我不仅提升了对栈的理论认识,同时也增强了自己的算法设计能力和应用实践能力,在未来的学习和工作中能够更好地运用栈这一数据结构。

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

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

相关文章

ssh网络协议(服务名sshd,端口22)

目录 前言 配置文件&#xff08;/etc/ssh/sshd_config&#xff09; 配置文件内容 自己可以添加的设置&#xff1a; 注意&#xff01;&#xff1a; ssh连接登录演示 scp文件传输 登录验证方式 密码验证登录 秘钥验证登录 配置ssh密钥对验证登录 生成密钥对&#xff…

JavaWeb基础3:会话/过滤器/监听器

JavaWeb基础3&#xff1a;会话/过滤器/监听器 (qq.com)

海尔、希亦、米博洗地机哪个好用?海尔、希亦、米博洗地机实测PK

洗地机相比普通清洁工具&#xff0c;拥有科学的设计&#xff0c;而且清洁技术专业&#xff0c;能够把地面上的污渍、灰尘、毛发等通通清理干净&#xff0c;保持地面光洁。比起手动清理&#xff0c;它还能减少地面和空气的细菌滋生&#xff0c;可以说是居家必备的清洁神器了。不…

C# 实现改造 GooFlow 流程图插件与数据库应用的结合

目录 关于 GooFlow 功能需求 范例运行环境 设计数据表 流程项目表 流程项目节点明细表 流程项目节点审批人表 人员信息表 示例代码 流程图主功能 设置审批人信息 运行结果演示 总结 关于 GooFlow GooFlow 一个基于 Jquery/FontAwesome 的流程图/架构图画图插件&…

探索Python异步编程的秘境:Eventlet的魔力与魅力

文章目录 **探索Python异步编程的秘境&#xff1a;Eventlet的魔力与魅力**第一部分&#xff1a;背景与引言第二部分&#xff1a;Eventlet是什么&#xff1f;第三部分&#xff1a;如何安装Eventlet&#xff1f;第四部分&#xff1a;Eventlet的基本使用第五部分&#xff1a;Event…

如何用ai来完成数据库分析(2)

一样的前言 因一些课程设计要写长篇分析报告&#xff0c;这里借用ai做一篇指导教程&#xff0c;分上下两篇。这篇也会教如何让ai给你你想要的答案&#xff0c;众所周知&#xff0c;现在的ai并不智能&#xff0c;不针对各类厂家&#xff0c;但是放出来的确实表象如此。 但其实…

CMIP6数据处理技术教程

原文链接&#xff1a;CMIP6数据处理技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247611539&idx4&sn3eb0490b72ef694dcd41f6de0b623388&chksmfa827574cdf5fc62372bfcf188ea1ae6e41350ff8469c2940ed097244b205e0dd73f4c8832fa&token616696…

绝对干货!分享把Fildder录制的脚本导出成Jmeter脚本的方法(实测在Fiddler5中有效)

相信做过接口测试的小伙伴都面临过这样的窘境——在没有接口测试文档的情况下&#xff0c;进行接口的压力测试&#xff01;怎么破&#xff1f; 通常的做法都是利用抓包工具&#xff08;以fiddler为例&#xff09;进行抓包&#xff0c;然后把抓包请求手写到压力测试工具中&…

解决Solidworks 2024运行的Windows资源极低,执行此命令可能会导致SOLIDWORKS 失败。

Solidworks Resource Monitor 可供使用的系统内存很低。请关闭一些应用程序以释放资源。即使内存十分充足&#xff0c;也容易出现这些提示&#xff0c;而我个人感觉2024版相比以前版本更容易出现这个问题&#xff0c;这显然是Solidworks本身的Bug。网上普遍流传的解决方法&…

再讲Langchain 提示词模板(PromptTemplate)

在LangChain 0.2中,提示词模板(Prompt Template)是一个非常重要的概念和功能。它允许我们创建结构化和可重用的提示,以便更有效地与语言模型进行交互。 提示词模板的主要作用包括: 结构化提示: 允许我们定义一个固定的提示结构,包含静态文本和动态变量。 参数化: 可以在模板中…

汽车测试-ADAS测试设备RT3000介绍及数据处理

目录 一、分析目的 二、数据采集仪器 三、数据文件 1.数据样本名词解释 2.数据应用 3.简单举例 汽车数据分析示例 1. 行驶轨迹与路径优化 2. 速度与加速度分析 3. 燃油效率与能耗分析 4. 驾驶行为与安全分析 5. 车辆维护与故障诊断 评估导航与定位的准确性。 一、…

测试工程师职业道路管理方向有哪些

目录 01测试组长 测试组长的职责及掌握技能&#xff1a; 测试组长需要掌握的技能&#xff1a; 02测试经理 测试经理具备的职责&#xff1a; 测试经理具备的技能&#xff1a; 03测试总监 测试总监具备的职责&#xff1a; 测试总监具备的技能&#xff1a; 测试工程师管理…

蚓链数字化生态系统:助力企业上下游资源的强大引擎

在当今数字化浪潮汹涌的时代&#xff0c;集团型企业面临着日益复杂的市场环境和激烈的竞争挑战。如何有效地拉通产业上下游资源&#xff0c;实现协同发展&#xff0c;成为了众多企业亟待解决的关键问题。而蚓链数字化生态系统的出现&#xff0c;犹如一道曙光&#xff0c;为集团…

前端工程化12-Git版本控制工具详解

2.1、Git知识概述 理解版本控制工具&#xff0c;聊下他的历史&#xff0c;之后会讲两种版本控制工具的区别&#xff08;集中式|分布式&#xff09;、他的基本环境搭建安装&#xff0c;如何初始化本地仓库&#xff0c;如何往仓库里提交一些东西&#xff0c;文件的话会有那些变化…

文本相似度 HanPL汉语言处理

文章目录 前言需求简介实操开始1. 添加pom.xml依赖2. 文本相似度工具类3. 案例验证4. 验证结果 总结 前言 请各大网友尊重本人原创知识分享&#xff0c;谨记本人博客&#xff1a;南国以南i、 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 需求 当我…

【redis 第五篇章】持久化之AOF和RDB

一、概述 Redis 是内存数据库&#xff0c;如果不能将内存中的数据保存到磁盘中&#xff0c;那么一旦服务器进程退出&#xff0c;数据库中数据会消失&#xff0c;所以 Redis 提供了持久化的功能, Redis 分为两种持久化方式&#xff1a;RDB 和 AOF&#xff0c;有以下几个特点&am…

荟萃科技:国外问卷调查有没有实时更新的题库?

有的&#xff0c;口子查和渠道查都是。 口子查的题目都是国外的公司发放在网络上&#xff0c;都是实时发布&#xff0c;所以我们需要去国外的各大社交平台做题。 这些题目不是集中的&#xff0c;而是散布在网站里面&#xff0c;需要我们去找&#xff0c;都是老外上班实时发放…

数据结构(其二)--线性表(其三)

目录 11.特殊矩阵的压缩存储 &#xff08;1&#xff09;.一维数组的储存结构 &#xff08;2&#xff09;.二维数组的存储结构 &#xff08;3&#xff09;.普通矩阵的存储 &#xff08;4&#xff09;.特殊矩阵的压缩存储 i.对称矩阵 ii.三角矩阵 iii.三对角矩阵 iiii.稀疏矩…

社科经管类:7本期刊被标记为“On Hold”状态!

本周投稿推荐 SCI&EI • 4区“水刊”&#xff0c;纯正刊&#xff08;来稿即录&#xff09; • CCF-B类&#xff0c;IEEE一区-Top&#xff08;3天初审&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; 知网&#xff08;CNKI&#xff09;、谷歌学术 …

Github 2024-08-05 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-08-05统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目4JavaScript项目3Python项目3Java项目2TypeScript项目2C项目1Shell项目1Dockerfile项目1非开发语言项目1免费编程学习平台:freeCodeCamp…