
c语言
文章平均质量分 83
C语言的学习
WGzZsyu
感谢你的关注
展开
-
快速选择排序
这份快排算法代码在面对大量重复数的时候,时间复杂度会下降到O(n^2),这也是为什么leetcode显示最后会超时。也许在此之前,可以先回顾回顾快排三步核心算法步骤。前些天有些无聊,想试试自己写的快排能否过leetcode上的排序算法题。结果是,不用截图可想而知,肯定是没过的,否则也不会有这篇文章的产出。"你经过我每个灿烂时刻,我才真正学会如你般自由"原创 2023-10-03 22:23:58 · 360 阅读 · 0 评论 -
可变参数列表
可变参数是函数调用,而这里和函数栈帧的开辟以及参数的创建强相关,为此,在进行图示之前,你可以先看看下面的几个问题,看你是否真的掌握了函数栈帧的细节。如果你在访问了几个可变参数之后想半途终止,这是可以的,但是,如果你想一开始就访问参数列表中间的参数,那是不行的。我们上面的实验是针对传入的是整型而言,现在我们来看看如果将传入的参数是" char"类型时,该函数还能否实现我们预期的功能?要弄清楚可变参数如何传参,如何让指针指向不同的值,来完成对参数的读取,我们一定得看看这 宏定义 " 四板斧"的底层是什么。原创 2023-06-15 20:33:53 · 612 阅读 · 0 评论 -
模拟实现C库函数(2)
(unsigend char)s每次将原内存的比特位置位: 00000001。上一篇的模拟实现了好几个库函数,strlen\strcpy\memcpy\memmove,那么这一篇又会增加几个常用C库函数的模拟实现 memset\itoa\atoi。不过,对于设置0而言,memset(arr1, 0, sizeof(int) * 10)可以完美做到。比较32个位都是0。变量类型的本质只是标志从某一内存地址开始读取的位数,强制转换就是改变读取位数的大小。改变的不是变量本身,而是从内存中读取每个bit的方式。原创 2023-01-28 17:26:24 · 492 阅读 · 0 评论 -
模拟实现C库函数(1)
当你行走了一段时间后,回头往往那不管是起初咿咿呀呀胡乱踩陷的小坑时,还是之后慢慢地、熟练地避开了水洼、泥淖,不同的时段,不同的境地,回首那时的稚嫩与热情,我想总该会留下些感慨和欣慰。我们通过访问str的每个字符,将下一个字符串的地址传递给递归函数并+1。很久没更新过C专栏的文章了,借复习(review)的机会,本节的内容针对我们常见、常用的C串库函数的模拟实现。我们都知道,strlen函数,求的是一个字符串的长度。那么当它遇到"\0"时,就结束。当指针-指针,得到的结果是,这个区域之间的个数。原创 2023-01-28 00:47:30 · 479 阅读 · 0 评论 -
排序篇(叁)终篇
-----------远途的路固然值得探索,但当下的路也应踏实上篇讲了大部分的排序思想,那么这篇博客呢,也是承接上篇博客的排序。围绕比较复杂的快排、归并排序来讲。快速排序的思想很简单:任取一个值作为key值(比较值)。要的结果是——比key大的在右边,比key小的在左边。分成key的区间。并重复一样的操作。直到让每个元素在相应位置为止。hoare 也称 左右指针法。是最早的快排思想。上图说明,进行一次快排,可以让key 排到自己有序序列的位置。下面的问题是常常会犯的错误: 因为要递归,...原创 2022-06-15 18:01:25 · 157 阅读 · 1 评论 -
排序篇(贰)直、希尔、选、冒泡
但问耕耘,莫问前程上一篇呢,讲了排序中较为复杂的排序——堆排序。这一篇主要围绕,直接插入、希尔、选择、冒泡排序、计数排序总结。直接插入排序的思想很简单,就是把前K个数看成有序,再让后K个数有序插入到K个有序序列中。首先封装个打印排序后数组的函数和原始数组在写排序代码的时候,更偏向于先写一趟排序的思想,再来写整个排序的过程。 所以在设置end位置的时候是很重要的。所以我们可以在外层套一个循环,每次移动完数据后,及时更新end。 代码优化如下:还有一点值得注意: 在设计外层循环的时候,一定是n原创 2022-06-15 11:48:38 · 164 阅读 · 1 评论 -
又论二叉树2.0
---------------------这片博客主要是总结二叉树部分的练习主要有另个部分,一是二叉树链式结构、极其功能。二是相关而查实OJ。-------------前言 九个节点的开辟。 为了检验我们是否链接成功,我们需要去遍历一遍二叉树. 前序遍历递归图: 中序、后序代码依旧变更不多,也就不再多画图>求二叉树节点的个数,需要去遍历一遍二叉树,那么选什么遍历容易些呢? 答案是后序。求二叉树节点的个数有三种方法,其中很第一种和第二种的思想差多,就是环一种写法。最后一种就是传址变量+原创 2022-06-12 14:28:44 · 111 阅读 · 0 评论 -
排序篇(壹) 堆排序
---------------说起堆,很难不去联想到二叉树。目录(1)堆的概念以及结构①为什么未出现堆这个概念?②堆 有什么性质?(2)堆的实现①向下调整法 那些事儿那如何建大堆呢?或者如果 数组序列不符合 向下调整法的前提,又该怎样做?②建堆:编辑 ③如何用堆实现排序?编辑④小插曲~ 为什么建堆的时间复杂度为O(n)? 那么堆排序的时间复杂度是多少呢?(3)堆的功能堆的增和删:总结:1.堆中某个节点的数值,总是大于或小于 ”左右子树”。2.堆总是一棵完全二叉树。根据性质1,也就可以把堆分为大堆、小堆原创 2022-06-09 15:08:56 · 188 阅读 · 6 评论 -
二叉树与树的概念
从前有棵树,上面挂了很多学生,叫做“高数”。又走着走着,看见一颗树,上面挂着学生,叫做“二叉树” ……-------前言(1)树的概念以及结构:①数的结构:树,和之前说的链表、顺序表一样,都是一种数据结构。但:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。②树的结构:任何树都是有一个"根节点"和其他"子节点"构成。根节点:是一个特殊的节点...原创 2022-05-28 19:44:38 · 199 阅读 · 1 评论 -
栈与队列(数据结构篇)
在前面讲解两个比较基础的数据结构——链表、顺序表,做了一定的基础,因此用这两个方式来实现现在的,队列和栈并不会太难。(一)什么是栈、什么是队列?栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。(1)区别:原则:先进后出,后进先出(First in Last out) ---------->栈 先进先出,后进后出(Firstin First out)--------...原创 2022-05-19 15:51:57 · 189 阅读 · 0 评论 -
我们来谈谈指针和数组1~
C中的语法的重难点莫过于指针,掌握指针,也就很容易上手C了-----------前言还是提三个核心问题>为什么要有指针变量?因为把进程加载到内存中,CPU通过寻址来进行数据的处理。通过定义指针变量存放相应的地址,目的还是在于提高CPU的寻址效率。(一)指针与指针变量如何理解“指针是内存地址,指针变量是用来存放内存地址的变量”?很多时候,我们常常把指针和指针变量搞混,然而事实上两者不仅仅在概念上存在差距。在说之前不得不谈谈C中表达式的左、右值:左值: a...原创 2022-05-08 16:17:19 · 240 阅读 · 0 评论 -
浅涉~数据结构
本篇仅谈谈,数据结构中基础的两个表(线性表、顺序表)。(1)顺序表实现①什么是顺序表?顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存 储。在数组上完成数据的增删查改。②顺序表的分类:1. 静态顺序表:使用定长数组存储。 2. 动态顺序表:使用动态开辟的数组存储。静态表:动态表:③为什么更多时候用的是动态的顺序表?1.静态表的数组容量往往是固定的,难以适应环境需求的变化。容易造成空间开多了浪费,开少了不够用。...原创 2022-05-01 10:25:01 · 670 阅读 · 0 评论 -
浅谈~函数栈帧
如果清楚下面的问题,也就没必要花诸君的时间来阅读:①调用函数一定形成临时拷贝吗?是如何拷贝的?②临时变量为什么具有临时性?③函数被调用后,形成的新栈帧是怎样被回收,释放的?④函数临时变量的拷贝是否有规律可循?⑤函数调用的成本体现在什么上?1.什么是栈帧?所谓的栈帧,就是指的是,在栈区开辟的一块临时内存空间。图示:简画C程序空间区域分布:2.汇编命令要理解函数栈帧的过程,而栈的变化又难以在C中得到清晰的认识。因此要借助反汇编理解。基本命令:3.认识寄..原创 2022-04-25 13:08:58 · 331 阅读 · 1 评论 -
学途的踉跄~TOP2 取模取余,傻傻分不清~
每当我们回首那段日子,尽管算不上光辉灿烂,也论得上跟后辈们闲扯的资本。 -----------------前言目录(1)整数的取整方案:①0向取整:②地板(-∞)取整:③向+∞取整:④:四舍五入:小结:trun...原创 2022-04-09 22:04:16 · 1131 阅读 · 0 评论 -
浅谈~(承上)数据类型(struct\union\enum\数组\void\指针)及其存储
前面两篇我们分别讲了,整型、浮点型,他们的类型以如何在内存中进行存储的。那么这一篇,我们就要开启,C语言中,其他自定义类型,他们在内存中是怎样存储的,占我们多大的内存空间。(1)数组的大小:谈到数组,我们不难发现,数组其实上,我们前面几个类型的几何体,当然也不仅仅只有整型,浮点型。从展现出的数据来看,我们数组,其本质就是一个集合。集齐同一种属性的集合,类似一个封装瓶,在里面只能存放同种性质的东西。除开我们常见的char int类型的数组,这里还涉及到指针数组。(存放指...原创 2022-04-07 15:23:32 · 409 阅读 · 0 评论 -
学途的踉跄~Top 1 (关于按位操作符的那些事)
我们是否曽因为一时的失败而自责,陷入无言的自卑?我们是否也曾再一次挺身站起,却又被当头一棒狠狠地打翻在地?我们是否也曾劝说自己内心那颗不屈的内心放下那份热忱,放弃那份持久的坚守?我们是否……“但问耕耘,莫问归期”。学途尚知道阻且艰,一旦认定那是自己所憧憬一切的开始,那就一定要不顾一切走下去。即便那现实或许落下冷笑,嘲弄我们所追寻的那荒诞的做法,即便那最后,“鬓微霜”,外表的老化以及内心的麻木。但至少,也曾为之挥下泪水和汗水。继续向前吧!行路人~ ...原创 2022-04-05 00:26:09 · 188 阅读 · 1 评论 -
浅谈~数据存储(承上)----浮点型篇
上一篇主要谈论了,计算机中为什么要有数据,以及数据为什么具有多样性,并提到一部分,整型是如何存入内存当中的。而,这一篇主要是介绍浮点型在内存中的存储方式。1.什么是浮点型数据?...原创 2022-04-04 21:40:55 · 1251 阅读 · 6 评论 -
语言的学习
不要问我从哪里来,我来自一个神秘的地方。不要问我到哪里去,我要去的地方很遥远。原创 2022-04-01 17:01:53 · 458 阅读 · 1 评论