自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【数据结构】二叉树链式结构的实现《遍历,实现》(题库+解析+源码)

二叉树的学习离不开对堆的理解,这是上篇堆的传送门。

2024-04-22 21:59:13 958

原创 【数据结构】堆的实现《解析》

现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整 成一个小堆。向下调整算法有一个前提:左右子树必须是一个堆,才能调整。

2024-04-22 21:37:45 239

原创 【数据结构】二叉树OJ题目

如果二叉树每个节点都具有相同的值,那么该二叉树就是。只有给定的树是单值二叉树时,才返回。

2024-03-13 17:12:05 418

原创 【C语言】三种方式实现字符串(char*)/字符数组(char[ ])输入输出

字符输入函数,没有参数,从输入缓冲区里面读取一个字符 - 「 一次只能读取一个字符 」(-1) - end of file 文件结束标志 - 键盘上用 ctrl + z 实现。

2024-03-13 17:09:23 1018

原创 【数据结构】二叉树

树的高度或深度:树中节点的最大层次;如上图:树的高度为4 堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点。

2024-03-13 16:29:06 961

原创 【数据结构】栈和队列(概念选择题)

【代码】【数据结构】栈和队列(概念选择题)

2024-03-02 17:15:37 655

原创 【数据结构】OJ面试题《设计循环队列》(题库+代码)

设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。FrontReardeQueue()isEmpty()isFull()// 设置长度为 3// 返回 true// 返回 true// 返回 true。

2024-02-27 17:19:27 1732

原创 【数据结构】栈OJ题《用栈实现队列》(题库+解析+代码)

通过前面栈的实现和详解大家对队列应该有一定熟悉了,现在上强度开始做题吧请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalsesizeis empty。

2024-02-26 18:13:36 467

原创 【数据结构】队列OJ题《用队列实现栈》(题库+解析+代码)

通过前面队列的实现和详解大家对队列应该有一定熟悉了,现在上强度开始做题吧请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop和empty实现MyStackint pop()int top()truefalsesizeis empty。

2024-02-26 16:14:40 503

原创 【数据结构】队列「介绍+完整代码+调试」

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。

2024-02-20 17:50:13 443

原创 【数据结构】栈「介绍+完整代码+调试」

栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的 代价比较小。

2024-02-20 17:42:52 359

原创 【数据结构】链表OJ面试题5《链表的深度拷贝》(题库+解析)

其实就是,一个正常的单链表,但是有数据位,也能有指向下一个节点位,但是多出来一个指针会随机指向此链表的如何一个节点,而我们就要对他进行一个复制。而且我们复制的时候随机指针还是要指向原本对应的节点。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。的链表,每个节点包含一个额外增加的随机指针。,该指针可以指向链表中的任何节点或空节点。返回复制链表的头节点。

2024-02-10 22:16:56 729 1

原创 【数据结构】双向链表(链表实现+测试+原码)

2. 带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,今天我们就来实现这种代码。1. 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。

2024-02-10 21:52:24 993

原创 【数据结构】链表OJ面试题4《返回链表入环的第一个结点》(题库+解析)

前五题在这后三题在这给定一个链表,判断链表中是否有环。记录每天的刷题,继续坚持!2.OJ题目训练。

2024-02-07 16:06:41 955

原创 【数据结构】链表OJ面试题3《判断是否有环》(题库+解析)

前五题在这后三题在这记录每天的刷题,继续坚持!2.OJ题目训练。

2024-02-06 21:39:35 692

原创 【数据结构】链表OJ面试题2《分割小于x并排序链表、回文结构、相交链表》+解析

那我们就要用到两个新的链表来存放值,一边存放小于x的,右边按顺序存放大于x的,最后再将两个链表连起来形成新的链表,就可以完成此题。比x小的值在比x大的值后面的情况,那他就会指回L表,造成回环(假设第二个1本来是在4的后面,所以4的next节点还是指向1)通过计算两表的长度,让较长的表提前向前走差值步,再进行比较,当第一次比较相等时,那就是相交节点!返回ghead既为合并的表。那么我们要怎么让两个节点的比较值相对整个表是一样的,因为有长短不一的表。根据这种链表的特点,我们可以清楚他们的尾节点一定是相等的。

2024-02-03 21:56:15 1010

原创 【数据结构】链表OJ面试题(《删除定值、反转、返回中间结点、倒数第k节点、合并链表》)+解析)

还不清楚链表的码喵们可以看看前篇关于链表的详解。

2024-01-30 17:58:10 902

原创 【数据结构】链表(单链表实现+测试+原码)

概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的。1.从上图可看出,链式结构在逻辑上是连续的。但是在物理上不一定连续2.现实中的结点一般都是从堆上申请出来的3.从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续。

2024-01-30 12:52:37 624

原创 顺序表Plus版本

在上一篇顺序表的基础上添加了中间插入等功能,并且实现了简单的复用以介绍系统资源,并写了一个简单的菜单。(7来打印表中数据)

2024-01-15 21:41:03 358

原创 顺序表和链表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。

2023-11-21 15:39:51 87

原创 数据结构前言(空间复杂度)

空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。O(1)我们理解空间复杂度就可以用这个函数为了完成这个功能所额外开辟的空间因为是初始值,所以指针a和n不算是额外开辟的(必须要有他们才能开始执行函数)而这三个就是额外创建的变量所以O(3)->O(1)O(n)大多数空间复杂度为O(1)或O(n)O(n)

2023-11-14 20:34:09 135

原创 数据结构前言(算法效率、时间复杂度、时间复杂度计算举例)

算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。(对数据进行处理运算,达到自己想要的结果)

2023-11-02 21:43:39 243

原创 只用C语言解决环形链表的约瑟夫问题

事情起因与我的老师把答卷发错了,大家都把C++学完了而我刚学到数据结构还在吃奶的阶段,就让我遇到他了,所以这次只靠C语言的知识不用链表来解决,等我学成C++归来再把它做一次来源:牛客网。

2023-11-02 21:12:02 127

原创 完美解决Window11附加表时: Microsoft SQL Server Management Studio-附加数据库时出错。有关详细信息,请单击“消息”列中

标题: Microsoft SQL Server Management Studio------------------------------附加数据库时出错。有关详细信息,请单击“消息”列中的超链接。------------------------------按钮:确定------------------------------

2023-11-02 09:27:16 3362

原创 ATOI的模拟实现

例:" 123abc456" 转换为 123,虽然最终的输出结果是一个整数,但这属于非法转换。解析C字符串str,将其内容解释为一个整数,该整数作为int值返回。例:“abc” " abc" “” 为非法转换,最终会输出整数0。例:" -123456" 转换为 -123456。:将字符串转换为整数。

2023-10-19 22:28:37 40

原创 如何用C语言找到单身狗

当我们拥有一对数组数组中只有一个数字是出现一次(单身狗),其他所有数字都出现了两次。编写一个函数找出这个只出现一次的数字。例如:有数组的元素是:1,2,3,4,5,1,2,3,4只有5出现1次,要找出5这只单身狗。

2023-10-17 22:03:18 119

原创 程序环境和预处理

_FILE__ //进行编译的源文件名字__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义int main()当前VS是不支持ANSLLreturn 0;输出:717:02:35在预编译期间,系统会把所有的__***___文件替换为应该输出的值//语法:举几个例子;) //死循环。

2023-09-20 20:42:03 40

原创 C语言文件操作

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。//写文件,写进一个字符'a'//读文件//关闭文件fclose(pf);pf = NULL;return 0;

2023-09-12 18:11:19 44

原创 动态内存管理(常见的动态内存错误)

也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。但是被static修饰的变量存放在数据段(静态区),数据段的特点是在上面创建的变量,直到程序 结束才销毁。实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。这样柔性数组成员a,相当于获得了100个整型元素的连续空间。此处代码是为了考察str函数能否重新使用。烫烫烫烫烫烫烫 鱴湍。正常运行但是不够完美。

2023-09-08 22:02:25 38

原创 动态内存管理

malloc。

2023-09-01 23:23:56 47

原创 C语言实现通讯录功能(包含按需开辟空间、文件操作)

2.删除指定联系人信息。3.查找指定联系人信息。4.修改指定联系人信息。5.显示所有联系人信息。7.按姓名将联系人排序。这是苹果电话的通讯录。

2023-08-31 17:05:27 53

原创 自定义类型:(结构体,枚举,联合)

有了结构体类型,那如何定义变量,其实很简单。int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化//结构体嵌套初始化1.位段的成员必须是 int、unsigned int 或signed int。2.位段的成员名后边有一个冒号和一个数字。int _b:5;

2023-08-28 15:54:15 40

原创 内存操作函数(memcpy,memmove,memset,memcmp)

void * memmove ( void * destination, const void * source, size_t num ) //和memcpy函数一模一样。当我们将4 拷贝到 5,再将源头地址第二位拷贝到6的地址时,会发现原来的5已经被4覆盖,不能正确的做到拷贝。例如memcpy(arr2,arr1,40):就是将arr1的前40个字节的地址拷贝到arr2中。当两块空间会重叠,我们在进行拷贝的时候会把原来需要拷贝的source地址进行覆盖;自己写出一个函数实现。

2023-08-27 15:46:45 62

原创 字符函数和字符串函数

strlen字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。参数指向的字符串必须要以 '\0' 结束。注意函数的返回值为size_t,是无符号的( 易错 )学会strlen函数的模拟实现int main()elsereturn 0;答案:srt1>str2这个结果当然是错误的str1明显大于str2,这是英文strlen返回的是无符号的整形类型,不论多小的值返回都是正数,所以打印str2>str1。

2023-08-07 14:08:48 39

原创 指针习题练习

数组名的意义:1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。3. 除此之外所有的数组名都表示首元素的地址。

2023-07-29 19:56:11 39

原创 指针的详解②( 函数指针数组,)

那要把函数的地址存到一个数组中,那这个数组就叫函数指针数组,那函数指针的数组如何定义呢?答案是:parr1 parr1 先和 [] 结合,说明 parr1是数组,数组的内容是什么呢?是 int (*)() 类型的函数指针。函数指针数组的用途:转移表举个例子:(我们用函数实现计算器的加减乘除功能)可以发现用函数指针数组来存放函数并使用会简单很多,我们只需要加上一些对于cho范围的判断条件就可以了,并且添加新的函数只需要在数组中加上,避免了冗余。

2023-07-26 12:31:45 97

原创 指针的详解①( 字符指针,指针数组,数组指针,数组参数、指针参数,函数指针)

数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针: int * pint;能够指向整形数据的指针。浮点型指针: float * pf;能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。下面代码哪个是数组指针?//p1, p2分别是什么?//解释:p先和*结合,优先级高,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。//这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。

2023-07-16 16:12:00 317 1

原创 深度剖析数据在内存中的存储②(浮点型在内存中的存储,)

常见的浮点数:3.14159浮点数家族包括: float、double、long double 类型。浮点数表示的范围:float.h中定义。

2023-07-14 21:51:18 41 1

原创 深度剖析数据在内存中的存储

char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数//C语言有没有字符串类型?以及他们所占存储空间的大小。大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。上代码举例子int main()int a = 1;return 0;

2023-06-21 03:41:31 38

原创 原码—补码相互转换的技巧

【代码】原码—补码相互转换的技巧。

2023-06-21 03:19:49 2773 5

空空如也

空空如也

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

TA关注的人

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