【C语言】三道例题让你彻底学会栈和队列
[TOC] 前言 本篇博客,将带着大家刷3道非常经典的OJ题。它们并不算特别难,但对我们理解数据结构中栈和队列的概念有很大的帮助。 如果你还不了解栈,可以看看我之前的博客👉点我 队列的博客就不写啦,本篇刷题的时候会提到队列的操作 话不多说,直接开始吧! 1.用队列实现栈 leetcode:225. 用队列实现栈 这道题的要求很简单,用两个队列来模拟栈的实现。 我们知道,队列的操作是从后进,从前出,这就和我们在餐厅排队一样,先进入餐厅排队的人先得到座位。 而栈是遵循上进上出的,即栈只能在栈顶插入元素和删除元素 两个队列要如何结合,才能实现栈的要求呢? 1.1思路 首先我们讲数据push到其中一个队列中 如果要访问此时的栈顶,使用队列中的tail尾指针来访问,即题目要求的TOP函数 当我们需要pop数据的时候,将队列中的N-1个数据全部移动到另外一个队列里,再将最后的栈顶数据删除并返回 最终的目的就是保证一个队列为空,另外一个队列保存数据 这样就达成了栈只能在栈顶删除数据的要求 最后还有一个函数是boolean empty() 如果栈是空的,返回 true...
【C语言】带你刷爆十道链表OJ
[TOC] 前言,CSDN的小问题😥 最近写博客的时候,发现CSDN的markdown语法不支持加粗一句话末尾的标点符号 12**你好呀,****你好呀**, 这两种方式在typora上都会加粗(包括末尾的标点) 但是在CSDN上,第一种情况会显示出markdown源码,无法加粗 **你好呀,**我是你的好朋友 你好呀,我是你的好朋友 虽然这不是什么大事,但有的时候写博客,一句本来应该是加粗的话,多显示了几个**,不太美观,还会给不了解markdown的读者带来困扰:“作者在这里打几个*号是干嘛?” 上一篇博客,我们学习了单向无头非循环链表,本篇博客就让我们实践一下,刷十道leetcode的链表OJ题目吧🌭 如果你把本篇博客里的这几道题都弄明白了,那说明你对链表的掌握已经非常棒了!加油! 话不多说,直接进入今天的正题! 第一题:206.反转链表 leetcode:206....
【C语言】单链表太难学不懂?看这一篇就够了
[TOC] 前言😀 之前的博客中我们讲述了顺序表的数据结构,顺序表和之前C语言学习的数组还是比较相似的。 今天要学习的是链表,这是一个全新的数据结构,和之前我们学的内容都不相同。 编译器:VS2019 1.什么是链表 链表,如其名所示,是一个带链子的表 和顺序表的扩容开辟相比,它可以利用内存堆区中的空闲空间,而不需要一个连续的长空间。从而达到提高空间利用效率的目的。 链表中每一个单独开辟的“元素”称为一个节点 链表有一个头指针phead,用于指向链表的首节点 单链表中,每一个节点都有一个next指针,指向下一个节点 链表的尾节点的next指向NULL空指针 这样我们在使用的时候,就可以用过next指针访问链表的下一个节点,一直到最后一个节点的next为空停止。 需要注意的是,链表的每个节点之间并没有实际意义上的箭头,画出箭头只是方便我们理解。实际上,在内存中,链表的next指针就充当了箭头的角色。 链表的结构在逻辑上连续,但在物理上不一定连续 实际上在堆区开辟空间中,分配的内存可能连续,可能不连续 1.1链表的分类 1 单向/双向链表 2...
【C语言】顺序表(详解)
[TOC] 前言 顺序表是我们学习数据结构第一阶段的必经之路 什么是顺序表,且听我慢慢道来 本篇博客用到的知识点: 动态内存管理 自定义类型-结构体 所用编译器:VS2019 1.什么是顺序表? 1.1线性表 线性表是数据结构的一种,它是n个具有相同特性的数据元素的有限序列。 常见的线性表:顺序表、链表、栈、队列、字符串…… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理内存上存储时,通常以数组和链式结构的形式存储。 本篇博客所讲述的顺序表,就是以数组结构存储的线性表 2.编写你的顺序表! 为了保证写完之后不要进入贤者debug状态,建议每编写一个模块,就在test.c的main函数中进行测试,保证当前编写的模块正确后再进行下一步! 不然问题多了,改起来很头疼的! 2.0 赛前准备 和我们日常所用的数组不同,顺序表的这个结构,主要的组成部分是一个结构体(本篇博客中的线性表以int为例) 123456struct SeqList{ int* a; int size; // 存储数据个数 ...
【教程】Gitee如何下载单个文件
本篇博客将教您如何在gitee上下载单个文件 引出问题 不知使用gitee的你,有没有遇到过需要下载某个仓库文件的情况? 比如下面这个仓库,是@宏沉一笑大佬转载obsidian的插件的仓库 链接 点击下载,你会发现gitee开始给你打包整个仓库文件,一个几百m的仓库怎么说也要几分钟才能下完。可是,我只是需要某一个主题或者插件,gitee却不能单文件或者单文件夹下载,这个时候又要怎么弄呢? 解决问题 解决这个问题的方法非常简单! 只需要用chome或者新版edge浏览器,就能使用一个插件,来解决这个难题! 我们可以在edge设置里面打开扩展商店,搜索GITEE 下载gitee助手即可! 安装这个扩展以后,重启浏览器,再次打开gitee 可以看到,每个文件之后出现了单独的下载图标,点击它即可下载单个文件了 gitee助手的代码也是开源的,主页链接👉点我 大佬的提交绿点就是不一样 结语 个人也建议大家直接用edge浏览器和微软自带的输入法(这两个现在已经做的很好了) 避免其他国产流氓污染自己的电脑 如果对你有帮助,还请点个👍,万分感谢!
【leetcode】189. 轮转数组(C语言)
问题来源 leetcode 189. 轮转数组 给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 123456输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4] 这道题的底部有一个进阶要求: 进阶: 尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗 正好最近学习了空间复杂度和时间复杂度,这里可以用于练习 方法1-基本方法 最基本的方法就是直接旋转,把最后一位数字移动到数组的第一位,然后将第二位开始的每一位往前移动一位 需要先执行移动操作再替换第一个数 1234567891011121314void rotate(int* nums, int numsSize, int k) { k %= numsSize; for (int i...