【算法集训】基础数据结构:四、栈

栈理解了两天,所以迟了一天发。

一、栈的概念

栈是一个容器,是一个先进后出的线性表,类似与日常生活中的电梯、杯子等。
仅限在表尾部进行插入和删除操作。
使用链表来模拟栈:

typedef int DataType; 相当于给int起一个别名
struct StackNode;
struct StackNode {DataType data;struct StackNode * next;
}

data表示数据域,next表示指针域;

1、入栈操作

void StackPushStack(struct Stack * stk, DataType dt) {struct StackNode * vtx = (struct StackNode *) malloc(sizeof(struct StackNode));vtx->next = stk->head;vtx->data = dt;stk->head = vtx;++stk->size;
}

2、出栈

void StackPopStack(struct Stack * stk) {struct StackNode * temp = stk->head;stk->head = temp->next;free(temp);--stk->size;
}

3、获取栈顶元素

DataType StackGetTop(struct Stack * stk) {return stk->head->data;
}

二、题目

1、LCR 123. 图书整理 I

https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/description/

定义两个栈,一个用于入栈存放,一个用于出栈存放,将链表中的数据入栈再出栈就是倒序了

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* reverseBookList(struct ListNode* head, int* returnSize) {int *inStack = (int *)malloc(sizeof(int) * 10000);int index = 0;while(head) {inStack[index++] = head->val;head = head->next;}*returnSize = 0;int *outStack = (int *)malloc(sizeof(int) * 10000);while(index--) {outStack[(*returnSize)++] = inStack[index];}free(inStack);return outStack;
}

2、1614. 括号的最大嵌套深度

https://leetcode.cn/problems/maximum-nesting-depth-of-the-parentheses/description/
我们都知道括号一定是成对出现的,所以嵌套的括号的必然是一起的,所以计算(一起出现的最大次数即可。
这里使用栈实现,入栈,出栈,最终栈中存放最多的即为答案

int maxDepth(char* s) {int top = 0; //定义栈顶int len = strlen(s); //获取s长度int res = 0;  //结果//遍历字符串for(int i = 0; i < len; ++i) {//如果是(入栈,)出栈if(s[i] == '(') {top++;}else if(s[i] == ')') {top--;}//判断栈里面最大数就是深度if(top > res) res = top;}return res;}

3、LCR 027. 回文链表

https://leetcode.cn/problems/aMhZSa/description/
判断回文,将给定的数组依次存入栈中,如果从栈顶开始和head比较的每一个值都相等, 则为回文数。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/bool isPalindrome(struct ListNode* head){//定义栈int * inStack = (int *)malloc(sizeof(int) * 100000);int top = 0;  //定义栈顶//复制头结点用于存栈struct ListNode* t = head;// 存入栈while(t) {inStack[top++] = t->val;t = t->next;}// 栈顶和head从头到尾比较,如果不相等则错误while(top--) {if(inStack[top] != head->val) {return false;}head = head->next;}return true;
}

以下两个题目和上题相等。
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
https://leetcode.cn/problems/palindrome-linked-list-lcci/description/

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

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

相关文章

Go 协程基础:轻松入门并发编程,解析 Goroutines 的奥秘

一、协程基本使用 1、启动一个协程 主线程中每个100毫秒打印一次&#xff0c;总共打印2次另外开启一个协程&#xff0c;打印10次情况一&#xff1a;打印是交替&#xff0c;证明是并行的情况二&#xff1a;开启的协程打印2次&#xff0c;就退出了&#xff08;因为主线程退出了…

做题笔记:SQL Sever 方式做牛客SQL的题目--SQL157

----SQL157 平均播放进度大于60%的视频类别 计算各类视频的平均播放进度&#xff0c;将进度大于60%的类别输出。 注&#xff1a; 播放进度播放时长视频时长*100%&#xff0c;当播放时长大于视频时长时&#xff0c;播放进度均记为100%。 结果保留两位小数&#xff0c;并按播放进…

基于ssm的学生公寓管理中心系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生公寓管理中心系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

[报错]记录IDEA远程开发报错:java: Cannot run program.....

报错内容 IDEA在进行远程开发的时候报错&#xff0c;内容如下&#xff1a; java: Cannot run program "/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java" (in directory "/home/jim/.cache/JetBrains/RemoteDev-IU/_home_jim_DevCodes_Github_zfile/compile-…

redis主从复制【面试必看】

在分布式系统中&#xff0c;希望使用多个服务器来部署redis&#xff0c;存在以下几种redis的部署方式 主从模式主从哨兵集群模式 主从模式 在若干个redis节点中&#xff0c;有的是主节点&#xff0c;有的是从节点 假设有三个物理服务器&#xff08;称为是三个节点&#xff…

(JSP)EL——优化登录界面,获取对象,获取数据

EL优化登录界面 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"reques…

生产工序(oj题)

很有趣的一道题 关键在于固定工序的整合 看样例是固定工序中间是不能插入其他工序的&#xff08;也不讲清楚&#xff09;&#xff0c;如果可以的话&#xff0c;只能说可能会更麻烦 注意固定工序是按照固定工序中的第一个工序进行排序的 整合完之后&#xff0c;就是递归列出…

Java中的IO流①——IO流的体系、字节流、try...catch异常处理

概述 IO流的分类 IO流的体系 这四个类都是抽象类&#xff0c;所以需要实现类对象才能使用---> 字节流 FileInputStream--> 书写细节 代码示范 此时文件a.txt内容为abcde 使用char强转和read方法调用五次read方法--> public static void main(String[] args) throws IO…

mysql 语言学习

整理了一下 mysql 操作语言&#xff0c;不是很全&#xff0c;部分地方也许需要修改&#xff0c;先放上来&#xff0c;有时间再慢慢完善。 一、数据库操作 连接数据库 $ sudo mysql [-h ip] -u root -p [-P 3306] 初始化数据库 $ mysql_secure_installation备份数据库 # 备…

初出茅庐的小李博客之TobudOS移植到EVB_AIoT开发板

本博客参考教程&#xff1a; https://atomgit.com/OpenAtomFoundation/TobudOS/blob/master/doc/TobudOS_EVB_AIoT_STM32_Guide.md 介绍一下EVB_AIoT开发板 这个开发板是由TobudOS开源社区联合意法半导体、南京厚德物联网设计的一款高性能IoT开发平台&#xff0c;主控芯片是S…

SystemVerilog学习(0)——目录与传送门

一、验证导论 SystemVerilog学习&#xff08;1&#xff09;——验证导论-CSDN博客文章浏览阅读403次。SystemVerilog自学&#xff0c;验证系统概述&#xff0c;什么是SVhttps://blog.csdn.net/apple_53311083/article/details/133953016 二、数据类型 SystemVerilog学习&…

含掩膜mask的单通道灰度图转化为COCO数据集格式标签的json文件(python)

输入&#xff1a;单通道的灰度图&#xff0c;灰度图内含掩膜mask 目标&#xff1a;把灰度图中的语义mask转换为COCO数据集格式的json文件 输出&#xff1a;COCO数据集格式的json文件 期间遇到的问题&#xff1a; 发现有的掩膜内部存在其他类别的掩膜&#xff0c;即mask内部还套…

枚举类简单使用

1、创建一个枚举 public enum DemoEnum {// 引号里面存放的是下面所创建的属性&#xff0c;如果不创建属性则不能输入引号里的值的NORMAL("正常"),DESTORY("废弃");private String label;private DemoEnum(String label){this.label label;}public Strin…

使用.net core MVC实现图片上传下载

今天闲来无事&#xff0c;复习复习 1、上传 上传界面 <div class"text-center"><h1 class"display-4">Welcome</h1><form method"post" enctype"multipart/form-data" asp-controller"Home" asp-ac…

<HarmonyOS主题课>三方库【课后考核】

【习题】三方库 判断题 三方组件是开发者在系统能力的基础上进行了一层具体功能的封装&#xff0c;对其能力进行拓展的工具 。 正确(True) 可以通过ohpm uninstall 指令下载指定的三方库 错误(False) lottie使用loadAnimation方法加载动画。 正确(True) 单选题 通过ohpm安…

@FunctionalInterface、Lambda表达式和方法引用

知识不回顾是会被遗忘的&#xff01; 网上看了一些相关文章&#xff0c;这里记录一下&#xff0c;仅供参考 Java语言从JDK1.8开始引入了函数式编程。 函数式编程的核心特点是&#xff0c;函数作为一段功能代码&#xff0c;可以像变量一样进行引用和传递&#xff0c;以便在有需…

stm32 使用18B20 测试温度

用18b20 测试温度是非常常用的&#xff0c;不过18B20的调试不是这么容易的&#xff0c;有些内容网上很多的&#xff0c;不再重复说了&#xff0c;我先把波形说一下&#xff0c;再说程序部分&#xff1a; 整个都温度数据的顺序是&#xff1a; 1.700uS的低电平复位并测试18B20的…

【素书学习】人生境界的四个层次

冯友兰先生认为人生境界有四个层次&#xff1a; 1、自然境界。总是依照社会习惯或本性而为&#xff0c;完全随天地运转而运转&#xff0c;无明了的目的&#xff0c;不明所做的意义。日出而作&#xff0c;日落而息&#xff0c;不会去过多地思考此外的事情。不知何为苦、何为乐&…

mfc110u.dll丢失的解决方法,mfc110u.dll丢失原因是什么?

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“mfc110u.dll文件丢失”。那么&#xff0c;mfc110u.dll是什么&#xff1f;为什么会出现丢失的情况呢&#xff1f;本文将为您详细介绍mfc110u.dll文件的含义、丢失原因以及解决方法。 首先&…

MyBatis进阶之结果集映射注解版

文章目录 注解实现结果集映射注解实现关系映射常用功能注解汇总 注解实现结果集映射 注意 配置结果集映射&#xff0c;只用看 SQL 执行结果&#xff0c;不看 SQL 语句&#xff01; 注意 由于注解在映射结果集上没有实现 <resultMap> 的 100% 功能&#xff0c;因此&#x…