- 博客(21)
- 收藏
- 关注
原创 【数据结构与算法】——树和二叉树(上)
树和二叉树树的概念和结构什么是树与树有关的概念树的表示方法树在实际中的应用二叉树的概念和结构概念特殊二叉树满二叉树完全二叉树二叉树的性质二叉树的储存结构顺序结构三级目录树的概念和结构什么是树树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树的原因是它看起来像一颗倒挂的树,根朝上,叶朝下。注意:在树形结构中,子树之间不能有交集,否则就就不是树形结构与树有关的概念节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的子树位A的度为
2022-06-06 01:16:08
812
16
原创 【leetcode622】——设计循环队列
循环队列题目描述思路分析代码实现MyCircularQueue(k):构造器isEmpty(): 检查循环队列是否为空isFull(): 检查循环队列是否已满enQueue(value): 向循环队列插入一个元素deQueue(): 从循环队列中删除一个元素Front: 从队首获取元素Rear: 获取队尾元素释放空间,防止内存泄漏题目描述设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。循环队列的一个好处是我们可以利用这
2022-05-06 11:02:00
346
16
原创 【数据结构与算法】——队列
队列队列的定义队列的基本操作三级目录队列的定义只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头队列的基本操作队列采用链表而不用数组的原因:由于队列的结构是先进先出,出队列的时候,数组每次都需要覆盖掉第一个数据,效率很低,而链表可以直接在队头出数据,队尾入数据,时间复杂度都是O(1).定义一个队列typedef struct Queu
2022-05-06 07:11:50
929
2
原创 【牛客刷题】——链表分割
链表分割题目描述思路分析代码实现题目描述现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针思路分析我们令cur=pHead让cur遍历链表,在开辟两个新结点lessHead和greaterHead,把链表分为两部分,第一部分是小于x的结点放在lessHead->next里,大于x的结点放在greaterHead->next里当cur走到NULL时,让lessTail-
2022-04-28 09:43:02
173
6
原创 【leetcode】——合并两个有序链表
合并两个有序链表题目描述思路分析代码实现题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:思路分析以此实例为例,用newhead来保存新链表的头结点,然后比较两个链表的头结点数据,取出较小的,尾插到新链表,直到其中一个链表的指针走到NULL,这时直接把另一个链表剩余结点全部尾插就可以了代码实现struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l
2022-04-27 23:50:44
511
原创 【牛客刷题】——链表中倒数第K个结点
链表中倒数第K个结点题目描述思路分析代码实现题目描述思路分析我们可以使用快慢指针的方法,定义两个指针,fast为快指针,slow为慢指针。先让fast走k步,然后让fast和slow同步向前走,当fast走到NULL时,slow恰好走到倒数第k个数。我们以k=2为例:代码实现struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) { struct ListNode* fast,*slow; fast
2022-04-27 15:47:28
869
原创 【leetcode876】——链表的中间结点
链表的中间结点题目描述思路分析代码实现题目描述给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。思路分析快慢指针:定义两个指针,fast和slow,fast指针一次走两步,slow指针一次走一步,当链表结点个数为奇数个时,fast走到尾,slow正好走到中间,当链表结点为偶数个,fast为空时,slow正好走到中间第二个代码实现struct ListNode* middleNode(struct ListNode* head){
2022-04-08 23:30:32
144
1
原创 【leetcode206】——反转链表
反转链表题目描述解题思路代码实现题目描述解题思路将链表反转,可以认为是把箭头反向,将每一个结点的next值指向前一个结点,这样就达到了反转链表的目的,其中,prev表示前一个结点,cur表示当前结点,next用来保存cur的下一个结点,防止cur->next指向prev后找不到下一个结点代码实现struct ListNode* reverseList(struct ListNode* head){ struct ListNode* cur = head; struct ListN
2022-04-08 22:53:43
462
原创 【leetcode 203】—— 移除链表元素
leetcode 203 移除链表元素题目思路三级目录题目思路思路一:创建一个新的头结点,一个cur指针表示当前结点地址,一个tail指针用来找尾。当cur->val==val时,释放cur,否则,将cur进行尾插;如果头接待你为空,即链表为空,则直接返回NULL;struct ListNode* removeElements(struct ListNode* head, int val){ struct ListNode* tail = NULL, *newhead = NULL
2022-03-25 17:20:36
593
1
原创 【数据结构与算法】——单链表的基本操作
单链表基本操作链表的定义和结构基本操作定义链表打印链表创建节点尾插头插尾删头删计算结点的个数查找功能插入数据删除Pos位置的数据链表的定义和结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。基本操作从图中可以看出,单链表的 链式结构在逻辑上是连续的,但是在物理上不一定连续,因为在现实中,结点一般是从堆上申请出来的,而从堆上申请的空间是按照一定策略来分配的,连续两次申请的空间可能连续也可能不连续。此单链表的结构是,plist存放第一个
2022-03-24 19:16:45
571
11
原创 【数据结构与算法】——顺序表的基本操作
顺序表顺序表静态顺序表动态顺序表三级目录顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表实际上就是连续的物理空间,即数组,要求数据依次连续储存比如:用顺序表存储几个数据 1 2 3 4 5这样储存数据在物理空间上是不连续的,从顺序表的定义上看是不行的正确的存储方式:静态顺序表使用定长的数组存储元素静态顺序表缺点:N的大小固定,空间可能给大了或者小了,一般无法确定因此,一般不使用静态顺序表,
2022-03-07 15:06:01
789
18
原创 【数据结构与算法】——时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度算法效率时间复杂度时间复杂度的概念时间复杂度计算案例案例一案例二案例三案例四案例五案例六案例七案例八空间复杂度实例复杂度的练习消失的数字旋转数组算法效率衡量一个算法的好坏需要看这个算法的效率,而算法的效率由时间和空间两个维度来衡量,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法运行的快慢,空间复杂度衡量算法运行所需要的额外空间。时间复杂度时间复杂度的概念在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,一个算法所花费的时间与其中语句的执行次
2022-01-19 23:02:32
1064
8
原创 【C语言】初阶指针
目录1.指针的定义二级目录三级目录1.指针的定义指针就是一个变量,是一个用来专门储存地址的变量。比如在一个走廊里,两侧有很多房间,每个房间都挂有门牌号,门牌号就是每个房间的地址,通过门牌号可以找到指定的房间。指针就相当于是用来存放这些门牌号的变量,通过指针就可以找到以它为地址的内存单元。用代码来说int main(){ int a = 0;//在内存中开辟一块空间 int* p = &a;//取出a的地址,把a的地址储存在p变量中,p就是一个指针变量 return 0;}
2021-09-07 18:24:27
296
原创 【C语言】简单猜字游戏
猜字游戏问题描述解决方案代码实现问题描述系统产生一个100以内的随机数,玩家来猜,输入一个值,系统提示猜大或猜小直到猜准为止解决方案产生随机值需要调用rand函数,查阅MSDNrand函数返回的是一个随机整数,范围是0到RAND_MAX而RAND_MAX是一个16进制数字,为0x7fff,转化为十进制为32767,也就是短整型的最大值调用rand函数之前需要调用srand函数,否则每次生成的随机值都是一样的这样游戏只能玩一次,是系统生成的伪随机值对rand函数的解释对srand函数的
2021-08-26 23:23:31
786
原创 【C语言】简单扫雷游戏
扫雷游戏基本流程我们想要的棋盘效果是这样的代码实现1.首先了解一下整个游戏的实现流程2.创建两个棋盘3.初始化两个棋盘4.打印棋盘5.布置雷6.排查雷7.结果演示代码实现基本流程1.打印菜单,选择是否进行游戏2.创建两个二维数组存储数据,一个存储布置好雷的信息,一个存放排查出雷的信息3. 初始化棋盘,布置好的雷用 ‘0’表示,向玩家展示的棋盘上的界面用’*'表示4.打印展示给玩家的棋盘5.布置雷6.排查雷我们想要的棋盘效果是这样的代码实现解释一下定义的宏的意思ROW&C
2021-08-26 19:59:42
243
原创 【C语言】三子棋游戏
三子棋游戏基本流程具体步骤1.代码分配2.菜单的创建三级目录基本流程打印菜单,选择是否开始游戏创建并初始化棋盘打印棋盘玩家走(以输入坐标的形式进行游戏,“x”表示玩家下的棋子),并判断输赢电脑走(以生成随机值的形式进行游戏,“o”表示电脑下的棋子),并判断输赢最后打印棋盘以显示结果具体步骤1.代码分配代码共写入三个文件,分别是game.h : 头文件,进行函数的声明game.c : 源文件,进行函数的实现test.c : 源文件,进行游戏的实现2.菜单的创
2021-08-24 00:11:49
435
原创 【C语言】函数1
函数函数定义c语言中函数的分类库函数自定义函数函数的参数函数的调用函数的嵌套调用和链式访问函数定义在计算机科学中,函数是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。c语言中函数的分类库函数我们在开发的过程中每个程序员都可能用的到的代码,为了支持可移植性和提高程序的效率,C语言基础库中提供了一系列类似的库函数,方便程序员进行开发。C语言中常用的库函数有I
2021-07-25 13:58:16
201
原创 【C语言】循环语句
循环语句while语句1. 语法形式2.流程图3. 当有break和continue时4.getchar的作用for语句1. 语法形式2.流程图3.当有break和continue语句时4.for语句的循环控制变量的一些建议do...while语句1.语法形式2.流程图3.当有break和continue语句时while语句1. 语法形式while(判断条件){语句项;}2.流程图while语句执行时,当判断条件为真时,执大括号内的表达式;当判断条件为假时,跳出循环。3. 当有break
2021-07-20 22:42:45
358
1
原创 【C语言】分支语句
悬空else首先看下面一段代码int main(){int a=0;int b=2;if(a==1) if(b==2) printf("yes");else printf("no");return 0;} 你觉得会输出yes 还是 no?我们看一下运行结果:结果是什么都没有输出 。原因分析许多人会认为a=0不符合第一个if后的条件,于是跳出if语句,运行else语句,最后打印出No。实际上else会和与他最近的if相匹配也就是因此 第一个if
2021-07-19 18:03:08
88
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人