自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 数据结构之队列

​在上一章中,我们学习了数据结构之栈,知道了栈遵循后进先出(LIFO)原则。与栈相对的,队列中的数据元素遵循先进先出(FIFO)原则。那么什么是队列呢?字面意思来看,就是下图中小狗们排队的场景,每当新的小狗想加入队列时,就会排到最后面;如果最前面的小狗打完饭了,就会出队列。也就是我们说的先进先出(FIFO)。​

2024-07-07 17:42:00 995 1

原创 数据结构之栈

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除操作。进入数据插入和删除操作的一端称为栈顶,另一端称为栈底。

2024-07-07 17:33:47 978 3

原创 每日一题---OJ题:分隔链表

思路:定义2个链表,大链表和小链表,遍历原链表的节点将其放到对应的新链表中,最后将大链表和小链表首尾相连。

2024-07-01 11:06:21 350 1

原创 数据结构之排序(上)

嗨,小伙伴们,大家好!我们今天来学习数据结构之排序(上),今天我们先讲一讲3个排序,分别是直接插入排序、冒泡排序以及希尔排序。

2024-05-12 15:30:52 796 2

原创 二叉树习题汇总

所以,其实这道题和相同的树有点类似,都是先比较根节点,再比较根节点的左右子树。对称二叉树是左子树和右子树进行比较, 左子树的左子树与右子树的右子树进行比较,以及左子树的右子树与右子树的左子树进行比较。可以通过比较根节点的左右子节点是否相等,以及递归地比较左子树的左子节点与右子树的右子节点,左子树的右子节点与右子树的左子节点,来判断二叉树是否对称。今天我们学习了7道二叉树的练习题,说句心里话,第一次我做题的时候,也是迷迷糊糊,磕磕碰碰,但是多做几遍,多画一画图,我相信,小伙伴们都能学会~Ready Go!

2024-05-08 21:12:40 808 6

原创 数据结构之二叉树

1. 树概念及结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,一颗根朝上,叶朝下的树。

2024-05-04 16:39:06 1084 12

原创 堆排序以及TOP-K问题

这里我们先假设要排成升序,也就是从左到右,结点的值依次增大思路一:①先有堆这个数据结构,②给定一个数组arr, 我们可以把arr数组里面的元素全部拷贝到堆中,然后利用堆自身向下调整算法来进行排序,排成小堆,排好序后,再逐一拷贝回arr数组。

2024-05-02 23:50:56 853 8

原创 C语言:文件操作(下)

​嗨!小伙伴们,在前2篇中,我们分别讲述了C语言:文件操作(上)和C语言:文件操作(中),今天我们将会学习文件操作(下),准备好了吗?Ready Go ! ! !

2024-05-01 17:02:07 916 1

原创 C语言:文件操作(中)

需要注意的是,fscanf函数会按照格式化字符串中的格式要求进行读取,如果格式不匹配,可能会导致读取错误或结果不正确。函数会根据format字符串中的格式指示符,将可变参数列表中的数据按照指定的格式输出到文件中。读取的位置随着每次读取而向后移动。今天我们学习了另外4个函数,分别是fprintf函数,fscanf函数,fwrite函数,fread函数,希望看完这篇文章能对友友们有所帮助!fread函数时C语言中的文件输入函数,用于从文件中读取指定数量的数据项,并将其存储到指定的内存块中。Ready Go!

2024-04-29 23:15:36 731

原创 C语言:文件操作(上)

如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件

2024-04-28 23:56:25 2057 1

原创 建堆时间复杂度

所以,F(H) = 2^(h-2)*1 + 2^(h-3)*2 + ...... + 2^3*(h-4) + 2^2*(h-3) + 2^1*(h-2) + 2^0*(h-1),F(H) = F(h1)+F(h2)+F(h3)+F(h4)+.......+F(h-1)+F(h) ,其中,F(h) = 每层结点个数 * 向下调整次数。所以,F(H) = 2^1*1 + 2^2*2 + 2^3*3 + ...... + 2^(h-2)*(h-2) + 2^(h-1)*(h-1) ,我们用。

2024-04-27 11:46:30 751 1

原创 数据结构之堆

保持中间所有元素在堆中的相对位置不变,然后。

2024-04-25 21:08:58 819 1

原创 数据结构之带头双向循环链表

实际中使用的链表结构都是带头双向循环链表。另外,这个结构虽然复杂,但是会带来很多优势,后面我们进行增删改查接口实现的时候就会感受到这个结构的奇妙之处了。在上一篇文章中,我们介绍了链表的概念、结构、分类和单链表的增删改查接口的实现,同时提到了带头双向循环链表这一结构。本篇文章中,我们来详细的学习带头双向循环链表和它的增删改查接口实现。今天我们学习了什么是带头双向循环链表,以及如何实现带头双向链表,希望看完这篇文章能对友友们有所帮助!emmm,这个代码和我们之前学过的单链表的初始化很相似,But!

2024-04-23 18:36:37 705 1

原创 数据结构之单链表

链表是一种在逻辑结构上线性的,而在物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接的顺序来实现的,我们可以想象成一列火车,火车头就是头节点,每一节车厢都是一个节点,“车厢”与“车厢”之间用指针来建立联系。图中指针变量plist保存的是第一个节点的地址,我们称plist此时"指向"第一个节点,如果我们希望plist"指向"第二个节点时,只需要修改plist保存的内容为0x0012FFA0。与顺序表不同的是,链表里的每节“车厢”都是独立申请下来的空间,我们称之为“结点/节点”。

2024-04-22 23:08:32 2146 4

原创 基于顺序表实现通讯录项目

我们都知道,顺序表实际上就是一个数组,而使用顺序表来实现通讯录,它的本质就是将顺序表中存放的数据类型改为结构体,将联系人的信息存放到结构体中,通过对顺序表的操作来访问通讯录。在实现通讯录函数的时候我们可以套用顺序表的接口函数以减轻工作量,但是这并不意味着所有顺序表的函数都能直接照搬。在上一篇中,我们学习了什么是顺序表以及如何实现顺序表,今天我们将使用顺序表的结构来完成通讯录的实现,准备好了吗?在实现通讯录函数之前,我们先把通讯录界面和主函数写出来。因此,我们可以将通讯录理解为套壳的顺序表。

2024-04-21 20:56:09 960

原创 数据结构之顺序表

线性表的顺序存储又称为顺序表,顺序表是用一段地址连续的存储单元来依次存储数据元素的线性结构,从而使得逻辑上相邻的两个元素在物理位置上也相邻,也就是说我们可以通过下标来依次访问结构中的内容。平时我们使用的数组也是顺序表的一种实现方式。

2024-04-20 21:16:49 2111 1

原创 每日一题---OJ题: 设计循环队列

初始时,front和rear都指向数组的第一个位置(下标为0处)(ps: 题目条件说: 队列的长度为k,说明有效元素为k个,我们多开辟一个空间,队列的空间总数是 k+1 ,待会儿后面慢慢讲, 这里看不懂莫着急)

2024-04-19 20:25:00 684

原创 每日一题---OJ题: 用栈实现队列

这里,我先把有关栈的代码放出来哈~栈的头文件 Stack.hint top;}Stack;//初始化栈//入栈//出栈//获取栈顶元素//获取栈中有效元素的个数//检测栈是否为空//销毁栈栈的具体操作 Stack.c//初始化栈assert(st);//入栈assert(st);//扩容\n");exit(1);st->top++;//出栈assert(st);= 0);st->top--;//获取栈顶元素assert(st);

2024-04-18 21:11:01 809

原创 每日一题---OJ题: 用队列实现栈

队列的头文件 Queue.htypedef struct QueueNode { //队列的每一个结点}QNode;typedef struct Queue { //队列//头结点//尾结点int size;//队列的长度}Queue;//初始化队列//队尾入队列//队头出队列//获取队列头部元素//获取队列队尾元素//获取队列中有效元素的个数//检测队列是否为空//销毁队列定义队列的实现方法 Queue.c//初始化队列assert(q);

2024-04-17 23:44:34 667

原创 每日一题---OJ题: 有效的括号

那就是当*s已经走到'\0',但是栈不是空,说明栈里面还有左括号,不合题意, 此时StackEmpty返回false;如果栈为空,返回true。今天我们学习了一道OJ题---有效的括号,里面包含了栈的一些基础知识,希望看完这篇文章能对友友们有所帮助!我们刚写了一个栈,直接把 Stack.h 和 Stack.c 复制粘贴过去,把头文件删掉, 再把 typedef。如下图所示,上方表示一个字符串数组,存放不同种类的左括号和右括号,用一个指针依次遍历字符串中的每一个元素。OK啦,我们的栈就实现完毕!

2024-04-15 21:18:03 650

原创 每日一题---OJ题: 随机链表的复制

举个例子呗!还是上面那幅图第一步: 我们在原链表中插入拷贝结点我们先定义一个指针pcur,用来遍历原链表,再申请一块空间存放新结点copy,将pcur指针指向结点的数据域拷贝到copy新结点的数据域中。再让copy结点的next指针指向pcur结点的下一个结点,pcur结点的next指针指向copy结点(注意: 顺序千万不能颠倒哦!再让pcur指针移动到原链表的下一个结点,同时申请一块新结点,将原链表的数据拷贝到新结点中。

2024-04-14 15:01:25 967

原创 每日一题---OJ题: 环形链表 II

当slow指针走到中间的时候,fast指针开始进环链表头->入口点: L当slow指针开始进环的时候,fast指针在环中可能已经走了n圈了此时,fast指针和slow指针都在环里面,slow指针进环以后开始追击。在上一章中,我们知道,当。

2024-04-13 21:23:24 885 8

原创 每日一题---OJ题: 环形链表

思路分析: slow指针走1步,fast指针走2步,一定可以追上吗?会不会追不上?当slow指针走到中间的时候,fast指针开始进环当slow指针开始进环的时候,fast指针在环中可能已经走了n圈了因为slow指针和fast指针都在环里面,slow指针进环以后开始追击。假设此时fast指针和slow指针之间的距离为N , 每追击一次,它们之间的距离缩小一步。追击过程中, fast 和 slow 之间的距离变化第0次: N第1次: N-1第2次: N-2第3次: N-3。

2024-04-13 16:57:01 675 2

原创 每日一题---OJ题: 返回倒数第 k 个节点

初始时,fast 和 slow 指针都指向头结点fast 指针先走k步,假如这里k = 3,我们求倒数第3个结点,fast指针走到"4"的位置接着让 slow 和 fast 指针一起往后走,直到fast 指向空第一次:第二次:此时fast 指针指向空slow指针指向的结点刚好是倒数第3个结点,返回slow指向结点的数据域//初始时,fast指针指向头结点//初始时,slow指针指向头结点while(k--){ //fast指针先走 k 步while(fast!

2024-04-12 14:58:13 423 1

原创 每日一题---OJ题: 相交链表

今天我们学习了一道OJ题: 相交链表,里面运用到了计算链表的长度,查找链表的尾结点以及比较两个链表的结点等相关知识,希望看完这篇文章能对友友们有所帮助!上图中,A链表有5个结点,分别为 a1,a2,c1,c2,c3;B链表有6个结点,分别为 b1,b2,b3,c1,c2,c3;哈哈哈,代码量看似很多,但是里面的逻辑一点也不复杂,只要认真分析,一定能克服难关!长的链表先走长度差,再同时走找交点(第一个地址相同的就是交点)。接下来就是尾结点相同,说明两个链表相交,我们一起来找交点。

2024-04-12 11:05:15 521 1

原创 每日一题---OJ题: 链表的回文结构

比如:我们定义2个变量,A表示指向链表的头结点(第一个结点),rmid 表示指向反转链表返回的新结点我们让 A 和 rmid 指向的结点依次比较,如果中途 A 指向结点的值不等于rmid结点指向的值,那么直接退出循环,返回false;如果比较到 A 和 rmid 都为空, 那么返回true第一次比较: A 和 rmid 指向的结点的数据域都相等, 那么指针 A 向后走一步, 指针 rmid 向后走一步。

2024-04-11 15:32:22 853 3

原创 每日一题---OJ题: 旋转数组

/求出最终旋转次数//定义一个临时数组temp,初始化数组为0//将原数组的后time个数拷贝到临时数组temp的前面位置中//将原数组的前size-time个数拷贝到临时数组temp的后面位置中//将临时数组temp的所有元素拷贝回原数组i < size;运行结果为:我们把代码提交到leetcode上去,显示通过。

2024-04-11 01:05:02 776 1

原创 每日一题---OJ题: 消失的数字

是不是很简单?//计算 0~numSize 累加和,累加和依次减去数组中的值i++) {ret += i;return 0;运行结果为:8同时,leetcode也提交通过。

2024-04-10 17:11:11 431 1

原创 C语言: 内存函数(下)

memset函数逐字节地设置内存区域的值,因此在使用时要确保设置的值与要设置的内存区域的类型相匹配。因为它是按字节操作的,所以当你对非字符类型(如整数、浮点数等)的数组是用memset函数时,要格外小心。memcmp 函数按字节比较两个内存区域的内容,而不是按数据类型或元素进行比较。因此,只要你知道要比较的字节数,它对于比较任意类型的内存区域都是有效的。memset函数是C语言中的一个库函数,用于将某一内存块中的内容全部设置为指定的值。num: 要设置的内存区域的大小,以字节为单位。

2024-04-10 09:04:47 729 1

原创 C语言: 内存函数(上)

从7位置开始拷贝: 5->7 4->6 ,后2个数还可正常拷贝,但是当 3->5 的时候,就出现问题了,本应该是"5"的位置被拷贝过来的"7"覆盖掉了,之前的"5"消失了,因此,从后往前拷贝失败。从1位置开始拷贝: 3->1 4->2 , 前2个数可以正常拷贝,但是当 5->3 的时候,就出现问题了,原本是"3"的位置,现在被拷贝过来的"1"覆盖了,原来的"3"消失了,因此,从前往后拷贝失败。从6的位置开始拷贝: 1->6 2->7 3->8 4->9 5->10 拷贝成功。

2024-04-09 23:42:09 949 2

原创 C语言: 字符串函数(下)

在不同的系统和C语言标准库的实现中都规定了一些错误码,一般放在errno.h 这个头文件中说明的,C语言程序启动的时候就会使用一个全局变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在errno中,而一个错误码的数字是整数,很难理解是什么意思,所以每一个错误码都是有对应的错误信息的。strtok函数是C语言中的字符串分割函数,用于将一个字符串按照指定的分隔符进行分割并返回分割后的子字符串。

2024-04-08 20:25:57 865 1

原创 C语言: 字符串函数(上)

在这篇文章中,我们学习了一些字符串函数,还有更多的字符串函数等着我们去探索,我将留在下一篇文章。希望看到这篇文章的友友们,能!!!!

2024-04-07 11:38:26 862

原创 每日一题---OJ题: 环形链表的约瑟夫问题

/创建一个新结点//向内存中申请一块空间//如果申请失败,直接退出exit(1);//新结点的数据域为x//新结点的next指针置为空//将新结点返回第一次: 链表的头结点和尾结点都指向第一个结点,新结点的next指针指向NULL。

2024-04-05 19:22:42 559 1

原创 每日一题---OJ题: 合并两个有序链表

/定义l1变量,指向list1//定义l2变量,指向list2//定义新链表的头结点//定义新链表的尾结点if(l1){//l1没有遍历完链表if(l2){//l2没有遍历完链表//如果list1为空,则返回list2//如果list2为空,则返回list1//malloc了空间,但这块空间实际上用不了,应该将其释放掉return ret;//返回头结点的下一个结点。

2024-04-05 09:32:10 818 1

原创 每日一题---OJ题5: 反转链表

分别记录前驱结点,当前结点,后继结点,改变原链表指针的指向。

2024-04-04 21:43:03 329 1

原创 补充:OJ题4: 移除链表元素

/prev指针指向pcur的下一个结点//用临时变量del来保存pcur结点free(del);//将del结点释放,pcur现在是野指针//pcur指向prev结点的next指针//定义一个哨兵结点,便于后续执行删除操作//哨兵结点的next指向头结点//prev指向哨兵结点//pcur指向头结点,依次遍历链表中每一个结点while(pcur!=NULL){//从头结点开始,一直到NULL结束//结点的值为val,执行删除操作//prev指向pcur的下一个结点。

2024-04-04 20:24:40 239 1

原创 每日一题---OJ题4: 移除链表元素

/pcur用来遍历原链表//新链表的头结点为空//新链表的尾结点为空。

2024-04-04 10:23:37 280 1

原创 每日一题---OJ题3: 链表的中间结点

/count变量用来统计结点个数//pcur变量用来遍历整个单链表while(pcur!= NULL){//pcur指向下一个结点count++;//count自增一次//count保存了单链表的长度,我们用count/2得到中间结点的下标inext不为空时,进入while循环//fast指针每次走2步。

2024-04-04 00:37:31 344 1

原创 每日一题---OJ题2: 合并两个有序数组

int i = m;int j = 0;while(j!i++;j++;l3--;l1--;}else{l3--;l2--;l3--;l2--;

2024-04-02 19:01:29 483 1

原创 每日一题---OJ题1: 移除元素

int i = 0;int j = 0;for(i = 0;i<numsSize;= val){j++;return j;src++;src++;好啦,今天的讲解就到这里啦,我们下期再见!

2024-04-02 13:13:11 247 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除