- 博客(48)
- 收藏
- 关注
原创 7_队列【C语言】
顺序存储的队列之所以被称为循环队列,是因为可以利用更新队头队尾的下标信息,来循环地利用整个数组,出队入队时也不必移动当中的数据。从上图可以看到,链式队列主要控制队头和队尾,由于管理结构体中保存了当前队列元素个数size,因此可以不必设计链表的头节点,初始化空队列时只需要让队头队尾指针同时指向空即可。队列是最常见的概念,日常生活经常需要排队,仔细观察队列会发现,队列是一种逻辑结构,是一种特殊的线性表。从上述动图中可以观察到,需要牺牲至少数组中的一个存储位置,来区分循环队列中的满队和空队。
2025-02-23 19:47:58
923
原创 6_栈【C语言】
链式栈的组织形式与链表无异,只不过插入删除被约束在固定的一端。不管是顺序栈,链式栈,栈的操作逻辑都是一样的,但由于存储形式不同,代码的实现是不同的。一般而言,可以采用顺序存储形成顺序栈,或采用链式存储形成链式栈。”的逻辑,这种逻辑就被称为栈。栈在生活中到处可见,比如堆叠的盘子、电梯中的人们、入栈/压栈:将节点插入栈顶之上,也称为压栈,函数名通常为push()出栈/弹栈:将节点从栈顶剔除,也称为弹栈,函数名通常为pop()取栈顶:取得栈顶元素,但不出栈,函数名通常为top()栈顶:可以进行插入删除的一端。
2025-02-23 19:43:05
344
原创 C语言多人聊天室 ---c(客户端)
4.通过makefile编译项目,直接输入make。说明:1.基于乌邦图系统16.04开发的。3.通过tcp/ip协议进行网络通信。2.数据库采用mysql。
2025-02-23 19:14:12
245
原创 5-双向循环链表【C语言】
适合用于节点数目不固定,动态变化较大的场合。适合用于对节点查找效率不十分敏感的场合。适合用于节点需要频繁插入、删除的场合。
2025-01-20 19:08:09
268
原创 4_双向链表【C语言实现】
当然,我们经常在剔除了一个节点之后,紧接着的动作往往是释放它,但是将“剔除”与“释放”两个动作分开,是最基本的函数封装的原则,因为它们虽然常常连在一起使用,但它们之间并无必然联系,例如:当我们要移动一个节点的时候,实质上就是将“剔除”和“插入”的动作连起来,此时就不能释放该节点了。对链表而言,双向均可遍历是最方便的,另外首尾相连循环遍历也可大大增加链表操作的便捷性。由于链表中的各个节点被离散地分布在各个随机的内存空间,因此销毁链表必须遍历每一个节点,释放每一个节点。
2025-01-20 19:07:35
540
原创 3_单向循环链表【C语言实现】
先让前一个指针遍历到第50个节点的位置,然后后一个指针,再跟随前一个指针一起向后移动,当前一个指针遍历完所有节点,后一个指针就是指向了倒数第50个节点的位置。所谓的循环,指得是将链表末尾节点的后继指针指向头结点。对于一个具有n和节点的单向链表(n>100),只通过一次遍历找到倒数第50个节点。循环链表的操作跟普通链表操作基本上是一致的,只要针对循环特性稍作修改即可。
2025-01-20 15:10:03
660
原创 2_单链表【C语言实现】
链式存储中,所有节点的存储位置是随机的,他们之间的逻辑关系用指针来确定,跟物理存储位置无关,因此从上述示例代码可以很清楚看到,增删数据都非常迅速,不需要移动任何数据。另外,又由于位置与逻辑关系无关,因此也无法直接访问某一个指定的节点,只能从头到尾按遍历的方式一个个找到想要的节点。由于头结点是不存放有效数据的,因此如果空链表中带有头结点,那么头指针 head 将永远不变,这会给以后的链表操作带来些许便捷。由于链表中的各个节点被离散地分布在各个随机的内存空间,因此销毁链表必须遍历每一个节点,释放每一个节点。
2025-01-14 08:49:49
852
原创 1_线性表、顺序表【C语言实现】
数据结构:数据结构就是计算机存储,组织,管理数据的方式方法;顺序存储中,由于逻辑关系是用物理位置来表达的,因此从上述示例代码可以很清楚看到,增删数据都非常困难,需要成片地移动数据。顺序表对数据节点的增删操作是很不友好的。优点不需要多余的信息来记录数据间的关系,存储密度高所有数据顺序存储在一片连续的内存中,支持立即访问任意一个随机数据,比如上述顺序表中第 个节点是 s->data[i]缺点插入、删除时需要保持数据的物理位置反映其逻辑关系,一般需要成片移动数据。
2025-01-12 21:57:03
1271
原创 18_C语言 -位运算
结果将是一个只在第 n 位上有可能是 1(如果 a 的第 n 位是 1 的话),其他位上都是 0 的数。a |= (1 << n1 | 1 << n2 | 1 << n3) :将a与上述得到的数进行按位或运算,从而将a在n1, n2, n3位上设置为1。1 << n1 | 1 << n2 | 1 << n3 :将多个这样的数进行按位或运算,得到一个在n1, n2,n3位上为1的数。1<<n :将数字 1 左移 n 位,生成一个只在第 n 位(从右侧开始,从 0 计数)上有1,其他位上都是 0 的掩码。
2025-01-10 11:22:59
1877
原创 17_C语言的编译步骤
预处理就是在源文件(如.c文件)编译之前,所进行的一部分预备操作,这部分操作是由预处理程序自动完成;当源文件在编译时,编译器会自动调用预处理程序来完成预处理执行的解析,预处理执行解析完成才能进入下一步的编译过程。gcc 源文件 -E -o 程序名[.后缀]不带参数的宏定义# define 宏名 常量数据宏定义的预处理机制:此时的预处理只做数据替换,不做类型检查注意:我们定义的宏是不会占用内存空间,还没有进入到编译环节,更不要说运行了,在编译前已经将宏名替换成了常量数据。
2025-01-09 17:53:53
1306
原创 16_C语言 -文件操作(文件IO)
什么是文件文件是保存在外存储器(一般代指磁盘,U盘,移动硬盘等)的数据的集合。文件操作体现在那几个方面文件内容的读取文件内容的写入数据的读取和写入可被视为针对文件进行输入(Input)和输出(Output)操作,此时数据像水流一样从外存储去流向内存,或者从内存流向外存储器,所以系统形象的称文件操作为文件流。C语言程序对文件的操作采用“文件缓冲区机制”。就是说在程序对文件的数据读写并不是直接操作文件中的数据,而是系统会为文件在内存中创建“文件缓冲区”,程序对文件的操作 ,其实是在缓冲区进行的。
2024-12-30 09:41:52
1057
原创 15_C语言 -构造类型
定义:自定义数据类型的一种,关键字 struct,结构体类型的变量可以存储多个不同数据类型的数据。struct 结构体数据类型1 成员名称;// 结构体中的变量叫做成员数据类型2 成员名称;···注意:结构体中定义的变量,我们称之为成员变量结构体名:合法的标识符,建议单词的首字母大写(所谓的结构体名,就是自定义类型的类型名称)数据类型n:C语言支撑的所有类型(包括函数,函数在这里用函数指针表示)成员的名称:合法的标识符,就是变量的命名标准。
2024-12-30 09:29:00
1058
原创 14_C语言 -动态内存分配
但又由于这是一块系统“飞地”,所有的细节均由开发者自己把握,系统不对此做任何干预,给予开发者绝对的“自由”,但也正因如此,对开发者的内存管理提出了很高的要求。分配所需的内存空间,并返回一个指向它的指针。返回值类型:void*(万能指针):该函数返回一个指针,指向已分配大小的内存,如果请求失败,返回NULL(0x000000000000对应的一块不可访问的区域)内容,所存储的内存区域是不同的,且不同的区域有不同的特性。的地址规范范围,最重要的特征是所有的虚拟内存布局都是相同的,极大地方便内核管理不同的进。
2024-12-30 09:17:55
973
原创 指针练习题15道【C语言】
4)定义一维指针数组p,它有n个指向整形变量的指针元素;8)p为指向函数的指针变量,该函数返回一个整形值;7)p为返回一个指针的函数,该指针指向整形数据;3)定义整形一维数组p,它有n 个整形元素;9)p是一个指向整形指针变量的指针变量;2)p为指向整形变量的指针变量;6)p为返回整形函数值的函数;1)定义整形变量i;
2024-12-19 20:28:03
820
1
原创 13_C语言 -指针
内存地址:系统为了内存管理的方便,将内存划分为一个个的内存单元的(通常是1个字节),并为每一个内存单元进行编号,内存单元的编号称之为该内存单元的地址。一般情况下,我们每一个变量都是由多个内存单元构成的,多以每个变量的内存地址,其实就是这个变量对应的第一个内存单元的地址,也叫基地址/首地址。变量指针称之为该变量的指针(本质是地址)。变量地址往往是指在 内存中第一个内存单元的编号(首地址)int a;&a --- 变量a的地址,也称为变量a的指针int arr[2];
2024-12-16 15:26:14
2136
原创 12_C语言 -变量的作用域
我们在函数设计的过程中,经常要考虑对于参数的设计,换句话说,我们需要考虑函数需要几个参数,需要什么类型的参函数,但我们并没有考虑函数是否需要提供参数,如果说函数可以访问到已定义的数据,则就不需要提供函数形参。总结:我们发现弊大于利,建议减少多全局变量的使用,函数之间要 产生联系,仅通过实参+形参的方式 产生联系。外部函数:使用extern修饰的函数,称作外部函数,extern是默认的,可以不写(区分环境),内部函数:使用static修饰的函数,称作内部函数,内部函数只能在当前文件中调用。
2024-12-16 15:24:11
789
原创 11_C语言 -函数
函数:实现一定功能的,独立的代码模块。我们的函数一定是先定义,后使用。使用函数的优势:我们可以通过函数提供给别人使用。也可以使用别人提供的函数,减少代码量。借助函数减少重复性的代码(提高代码的复用性)实现结构化(模块化)程序设计思想。关于结构化设计思想:将大型的任务功能划分为相互独立的小型的任务模块来设计。函数是C语言程序的基本组成单元:C语言程序是由一个(必然是main函数)或多个函数组成。[返回的类型|类型标识符] 函数名([形参列表]) // 函数头 | 函数首部函数体语句;
2024-12-16 15:22:35
596
原创 10_C语言 -数组(常规)
数组是相同类型有序数据的集合。类型说明符 数组名[数组的容量];数组的类型说明符由数组中的元素来决定,也就是元素是什么类型,数组就是什么类型数组名也是 标识符,我们所说的数组 (名),大家可以理解为数据类型是数组的变量(名)。命名规则于变量名相同。遵循标识符 命名 规则数组容量也可以叫做元素个数或者常量表达式,表达式必须为整型,==可以包含常量和符号常量,但不能是变量。// 常量5// 符号常量// 常量表达式类型:代表了数组中元素的类型。
2024-12-06 15:08:34
2430
原创 循环结构练习题11道【C语言】
Description: 计算 1 + 1/(2 * 3) + 1/(3 * 4) + ...+ 1/(n * (n + 1)) =?直到最后一相值小于0.00001为至。> Created Time: 2024年12月02日 星期一 18时33分58秒// 定义一个变量,用于累加// 循环变量,1单独计算,从二开始// 死循环一直进行累加while(1)// 判断该项数是否小于0.00001break;// 对每一项进行累加// 每次循环自增1i++;
2024-12-03 18:50:51
996
原创 C语言 -分支结构练习题(7道)//只使用分支结构
市区徐某家4⽉份 的⽤电量为96千⽡时,其电费计算如下:基本电费部分:96千⽡时×0.538元/千⽡时=51.65元;计算bmi的值, bmi = (体重(kg)/⾝⾼(m)的平⽅) 如果bmi ⼩于18.5,则显⽰“偏瘦,注意加强营养” 如果bmi 在18.5和23.9之间,则显⽰“体重指数良好,注意保持” 如果bmi值⼤于23.9 ,则显⽰“你有点偏胖,注意锻炼”出租⻋费计算程序,起步公⾥数3公⾥,⻋费8元,超出3公⾥,每公⾥1.8元,不⾜⼀公⾥,按照1公⾥计算。
2024-11-30 23:35:29
670
原创 8_C语言 -分支结构
在C语言中,用1(非0)表示关系表达式的值为真(条件成立),0表示关系表达式的值为假(条件不成立),即关系表达式的值要么是1(条件成立),要么是0(条件不成立)条件判断的结果是逻辑值(布尔类型值,也就是说分支语句的条件可以使用关系表达式和逻辑表达式),在程序中用真(1)和假(0)来表示。 若表达式的值为1,则执行语句1;实际上,逻辑运算符两侧的运算对象不但可以是0和1,或是0和⾮0,⽽且也可以是字符型、实型和指针型。switch后括号内的表达式可以是任何类型的表达式,单是表达式的值必须为。
2024-11-30 23:30:30
778
原创 7_C语言 -流程控制
广义的说,为解决一个问题而采取的方法和有限的步骤,就称为“算法”例如: 将大象放入冰箱的算法就可以如下描述: 打开冰箱门 - 把大象装进去 - 关闭冰箱门。
2024-11-30 23:26:15
399
原创 6_C语言 -数据的输入与输出
缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或者输出的数据,这部分预留的空间叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
2024-11-28 17:39:58
1147
原创 5_C语言 -运算符
C语言规定了运算符的优先级和结核性。在表达式求值时,按运算符的优先级别的高低次序执行。如果运算对象两侧的运算符优先级别相同,如a+b+c,则按照规定的“结合方向”处理。
2024-11-26 20:08:30
1015
原创 4_C语言 -基本类型数据
a 的原码和反码都是0000 0000 0000 0110;对于有符号数,内存要区分符号位和数值位,对于人脑来说,很容易辨别,但是对于计算机来说,就要设计专门的电路,这无疑增加了硬件的复杂性,增加了计算的时间。 另外,加法和减法也可以合并为一种运算,就是加法运算,因为减去一个数相当于加上这个数的相反数,例如,5 - 3 等价于 5+(−3),10−(−9)等价于 10+9。可见:在存放整数的存储单元中,一般情况下,最左边的一位用来表示符号位,符号位未0表示整数,符号位为1表示负数。
2024-11-26 19:31:50
799
原创 2_C语言 -数据类型.md
数据类型其实是固定大小内存的别名,并描述了一个变量存放什么类型的数据。简单来说,就是组织和操作数据。数据:计算机要处理的数据(数字、字符串、文字、符号、图片、音频、视频等)。小贴士:简单来说,程序的运行需要用到内存。
2024-11-25 19:10:44
290
原创 1_C语言 -预备知识
计算机(Computer)硬件(Hardware)组成计算机的各种物理部件键盘、⿏标、显⽰器、内存、硬盘、光驱等等硬件 = 电⼦设备 + 单⽚机编程(单⽚机,微控制器) + 集成电路(原理图PCB设计) + 嵌⼊式系统软件(Software)计算机中运⾏的程序和数据软件 = 系统软件(linux系统) + 应⽤软件 + 编程语⾔(C/C++) + 算法和数据结构中央处理器(CPU)内存(Memory)输⼊设备(Input Devices)输出设备(Output Devices)、
2024-11-25 19:07:49
941
原创 Linux基础 -进程相关
说明:查看实时的系统状态信息,包括进程的数据PID、进程属主、优先级、%cpu、%Memony等。可以使用这些显示支出资源使用量。说明:根据进程名终止进程(我们自己开发的程序,说明:根据进程的PID终止进程。:显示所有未连接终端的进程。说明:查看系统运行的进程。:显示进程的所有者的信息。:显示所有终端中的进程。
2024-11-22 21:52:53
199
原创 Linux基础 -挂载及卸载
Linux中的根目录以外的文件想要被访问,就需要将其关联Linux系统中的某个目录来实现,我们将这种关联称之为“挂载”,这个目录就是“挂载点”,Linux专门提供了一个用于挂载的目录,叫做mnt。解除此关联关系的过程被称之为“卸载”。
2024-11-22 21:52:18
328
原创 Linux基础 -磁盘相关
以人们较容易阅读的GB,MB,KB等格式显示,最常用的选项。:以人们较容易阅读的GB,MB,KB等格式显示,最常用选项。:以BYTE为单位显示大小,1byte = 8bit。:以KB为单位显示大小,1kb =1024byte。:以MB为单位显示大小,1MB = 1024KB。:以byte为单位显示完整的磁盘使用情况。说明:显示磁盘分区上磁盘空间的使用详情。说明:显示某文件和目的磁盘的空间大小。:仅显示总结,(用于显示目录的大小)
2024-11-22 21:51:05
137
原创 Linux基础 -虚拟机网络模式
注意:此指令常常用来查看本机IP,如用使用ifconfig来配置网络接口,可能需要root权限,windows使用ipconfig。 和windows的网段不一样,是由虚拟网卡分配网段和IP,并且能够与windows一样可以连接到互联网。说明:查看及临时配置网络接口(所谓的临时配置网络,也就是一关机就失效了,下次开机需要重新配置) 坏处:占用路由器的IP,如果路由器发的载荷过大,网络会掉线。 和windows的网段不一样不能连接网络。 好处:不占用路由器的IP。建议选择“桥接模式”
2024-11-22 21:49:00
269
原创 Linux基础 -Vim编辑器
本质上我们Linux自带的编译器叫做vi编辑器,名字取自Visual,它是一个全屏幕文本编辑器(程序)。在Linux系统中Vi是最常用的编辑程序,它的文本编辑功能十分强大,使用起来比较复杂。Vim是Vi的增强版,所以Vi的功能Vim都有,而且Vim新增了许多Vi没有的功能,它比Vi更容易使用。这个工具不是Linux内置,需要额外安装。
2024-11-22 21:46:44
1002
原创 Linux基础 -压缩和解压缩
解包时,tar首先调用gzip/bzip2解压缩,然后再解开被gzip/bzip2处理过的.tar文件。 关于tar和gzip、bzip2实现混合使用的时候,一定是先打包,再压缩。:覆盖解压(文件夹中有同名文件,用解压出来的文件覆盖同名文件) gizp可以压缩文件夹中的所有文件,bzip2不可以。:与-z类似,不过使用的是bzip2指令,扩展名是。:打包时压缩/解包时解压缩,操作的文件扩展名为。说明:压缩文件为**.bz2**的格式。说明:文件的后缀名是**.zip**
2024-11-22 21:42:43
290
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人