自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构——队列的模拟实现

首先来认识一下队列:队列就像我们上学时的排队一样,有一个队头也有一个队尾。有人入队的话就从对尾入队出队只能从对头出队,队头出队之后后面的人才可以选择出队。队列的特点就是:队尾入,对头出,先进先出(first in first out)(先入队的先出队)。1 2 3 4 入——1 2 3 4出。队列的模拟实现是选择数组还是链表呢?队列的特定规则需要两个指针分别指向首元素和尾原元素,如果选用数组的话,删除队首的数据就比较复杂(向前覆盖,时间复杂度为O(N))。

2024-12-17 18:39:44 1025

原创 数据结构——栈的模拟实现

与顺序表和单链表不同的是:顺序表和单链表都可以在头部和尾部插入和删除数据,但是栈的结构就锁死了(栈的底部是堵死的)栈只能从栈顶插入(数据入栈)和删除(数据出栈)数据————last in first out(后进先出)(最后入栈的数据要第一个出栈如果进栈过程中不允许出栈:入栈 1 2 3 4————出栈4 3 2 1。

2024-12-14 22:29:54 1070

原创 数据结构(3)单链表的模拟实现

链表的核心是结点,定义链表的结构就是定义结点的结构。至于之所以要将int进行typedef重命名,参考上一篇博客————顺序表。相较于顺序表单链表在中间或者头部插入或者删除数据时间复杂度为O(1),而顺序表为O(n).单链表在尾部插入或者删除数据时间复杂度为O(n),而顺序表为O(1)。不同的数据结构都有各自独特的优势(当然也有劣势)没有哪个好哪个坏这一说法看实际应用的场景,不同的场景要使用不同的数据结构!

2024-12-10 22:32:33 981 1

原创 数据结构(2)——顺序表的模拟实现

通过数据结构(1)对于算法复杂度的理解,现在我们正式进入数据结构的核心内容,今天,先来使用C语言实现一下数据结构中最简单的顺序表。首先介绍一下顺序表的概念,先从线性表说起。线性表:n个具有相同结构的数据元素的有限序列。在逻辑结构上一定是线性的,在物理结构上不一定是线性的。顺序表:如果线性表的物理地址连续,那么其就算是顺序表。一般情况下采用数组存储。顺序表的底层逻辑就是数组。但相较于数组,它增添了一些功能。也就是对数组进行一系列的功能包装,就形成了顺序表。

2024-12-04 18:24:54 1149 2

原创 算法与数据结构(1)复杂度

数据结构是计算机存储与组织数据的方式(包括增加数据、删除数据、查找数据、改写数据等)指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有的用途都有用,所以我们要学习各种各样的数据结构,如:线性表、树、图、哈希……数组 int arr[4]={0,1,2,3};就是一个简单的数据结构。可以插入删除查找修改其中的元素。但是数组元素只能时同类型的,数组这一单一的数据结构不是对所有的用途都有用,比如不同类型的数据,这时候我们就可以用另外一种数据结构————结构体。

2024-11-29 21:33:56 2139 1

原创 C语言中的文件操作

磁盘(硬盘)上的文件是文件。在程序设计中,我们一般谈到的文件有两种:程序文件以及数据文件(从文件功能的角度分类)。

2024-11-25 17:11:54 945

原创 C语言中的预处理详解

C语言中的预处理

2024-11-25 15:55:42 510

原创 动态内存管理

再想要找回p数组中的元素(printf函数要通过str去找p数组中的字符,找到一个打印一个) 已经不可能了,(但如果幸运的话,也有可能打印出hello world)原因在于str仍然是空指针,strcpy实现的过程中一定会有对str的解引用操作,对空指针解引用是非法的,会报警告。本程序中由于开辟的空间过大,内存不足,无法成功开辟,就会返回空指针NULL,形成对空指针的解引用。且这个程序在使用free函数之后没有将str置NULL,str的值是不确定的,就会形成野指针。

2024-11-21 18:27:39 1930 1

原创 联合体和枚举

这种代码虽然可行,用起来也方便,但是结构体中包含了所有商品个各种属性,这样结构题的大小就会偏大(实际上每个商品不一定包含上面的全部属性)就会浪费内存,代码性能就会降低。联合体也存在内存对齐,当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍(关于最大对齐数的相关内容,请参考上一篇博客:结构体)联合体的关键字是union,联合体类型的创建方法——变量的创建方法——变量的输入输出等——和结构体类似(具体可以看我的上一篇博客:结构体)一个联合变量的大小,至少是那个最大成员的大小。

2024-11-18 21:13:52 668 2

原创 自定义类型:结构体

当然是传址,无论是什么类型的地址,大小都仅仅只是4个字节,但入果是传值,要去创建临时变量存放1000多个整型数据的值,空间的开销太大,容易导致性能下降。答案是不⾏的,因为Node是对前⾯的匿名结构体类型的重命名产⽣的,但是在匿名结构体内部提前使 ⽤Node类型来创建成员变量,这是不⾏的。3. 结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的。4. 如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构。⽽对⻬的内存访问仅需要⼀次访问。

2024-11-17 22:05:45 964 4

原创 一篇水文抒发我对于编程的反思

就在今天(2024年11月17日早上9:00左右)我打开了比特的作业解析视频,听完老师对这道题目的讲解,让我对编程,对以后的学习有了新的看法。2.关于代码的可读性:老师提供的代码用整形变量del来表示要去除的值,del的原型是delete(删除),使用户或者其他程序员可以清楚的知道这一行代码的含义和目的。并且严格意义上讲不满足题目的要。求,题目要求删除a中的元素,但我的代码实际上并没有做到这一点,只是跳过了这一元素,把。综上,再回想我写的代码,无论是时间和空间的开销,还是代码的可读性都有一定的缺陷,

2024-11-17 11:40:07 262

原创 数据在内存中的存储

具体的编译器),另外,对于位数⼤于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度⼤ 于⼀个字节,那么必然存在着⼀个如何将多个字节安排的问题。这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着⼀个字节,⼀个字节为8 bit 位,但是在C语⾔中除了8 bit 的 char。很多的ARM,DSP都为⼩端模式。是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。

2024-11-14 16:14:37 1724 2

原创 几道指针运算相关的笔试题

解析:&a(&数组名)取出的是整个数组的地址,&(a+1)强制转化成int*类型赋给指针变量ptr1。&(a+1)跳过整个数组,由于指针变量ptr是int型,因此减一跳过1个整型,过一个字节,指向 2,*(a+1)获得整型数据2。a是数组名,数组名表示数组首元素的地址,a数组的元素是int型,+1跳。指向5,解引用 得到整形数据5。今天来分享几道和指针运算相关的笔试题目。

2024-11-10 23:11:08 509

原创 C语言中sizeof和strlen的区别

由于数组中每个元素的类型时int型,因此a+1跳过4个字节指向2这个元素,即&a[1],第二个元素的地址。strlen(arr1)————strlen函数要在字符串arr1中找'\0',arr1仅有的三个元素中没有'\0',因此strlen会去其他内存空间越界访问去寻找'\0',因此返回值是一个随机值。2.指针类型决定了————指针解引用时的访问权限是几个字节,指针+-整数时移动的步长。sizeof(arr1)————计算arr1的长度————返回值是三。sizeof(类型)————括号不可以省略。

2024-11-08 22:31:11 590

原创 C语言模拟实现字符串函数strlen的三种方法

定义一个新的指针变量end并对其赋初值p接着运用循环依次让end+1,直至end遇到'\0',最终返回end-start。————————指针-指针的结果是两个指针所指向位置之间的元素个数。首先定义一个整型变量count并对其赋初值0,接着遍历字符串,统计'\0'之前的字符个数。本方法不用额外创建变量就可以达到模拟strlen的效果。

2024-11-08 21:35:14 305

原创 位操作符——

比如1100.10 首位1的权重是2的3次方,第二个1的权重是2的平方,小数点后的1权重是2的-1 次方。二进制转十六进制——从右到左每4个二进制位换算一个十六进制位,左边不够4位补零。八进制转十六进制等等——————先转二进制,将二进制作为中间桥梁再去转化。二进制转八进制——从右到左每3个二进制位换算一个八进制位,左边不够3位补零。6.十六进制转二进制——每一个的十六进制位换算为4个二进制位。4.八进制转二进制——每一个八进制位换算为3个二进制位。(这里不再过多展开)

2024-11-03 21:14:21 487 1

原创 C语言三种交换变量值的方法

C语言三种交换变量值的方法

2024-11-03 18:01:10 477

空空如也

空空如也

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

TA关注的人

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