数据结构和算法教程(C语言版)

六年创作,三次迭代,千般打磨,成就了现在这套精品的数据结构和算法教程。

  • 博客(284)
  • 收藏
  • 关注

原创 十分钟彻底了解C语言(小白必读)

对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。文章篇幅较长,大家一定要耐心看完。读完本文,能彻底搞清楚以下几个问题:C语言究竟是一门怎样的语言?C语言到底能做什么?C语言能找什么工作?能拿多少钱?程序员必须要学习C语言吗?学编程难吗?多久能入门?C语言和C++到底是什么关系?

2025-01-15 20:21:16 1808

原创 ASCII码一览表,ASCII码对照表(新手必备)

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。ASCII 编码于 1967 年第一次发布,最后一次更新是在 1986 年,迄今为止共收录了 128 个字符,包含了基本的拉丁字母(英文字母)、阿拉伯数字(也就是 1234567890)、标点符号(,.!

2024-09-14 20:10:38 18742

原创 C语言是干嘛的,我列举了8种经典案例

虽然C语言的开发场景看起来很多,但是如果总结一下的话,无非就是:底层/系统开发 +关键组件/模块的开发 + 贴近硬件的开发,这些开发场景非常关注运行效率,或者响应时间,或者硬件资源。C语言基础教程​http://​www.54benniao.com/c/?pid=8​。

2024-06-12 22:33:56 1048

原创 C语言是什么,花十分钟彻底搞清楚!

对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。C语言发布于 1972 年,今年是 2023 年,它已经 50 多岁了,是一个不折不扣的“大叔”或者“大爷”。但是呢,现在的 C 语言依然非常流行,每一个科班出身的程序员都必学C语言。在 2023 年 10 月份发布的世界编程语言排行榜中,C 语言拿了一个第二名的好成绩,占据了 12.08% 的市场份额。这些底层知识决定了你的发展高度,也决定了你的职业生涯。如果你希望成为出类拔萃的人才,而不仅仅是码农,这么这些知识就是不可逾越的。

2024-06-11 20:41:14 2785

原创 C语言编译器大全(含下载和安装教程)

本篇文章搜集了常用的几乎所有C语言编译器(编程软件),同时附带下载地址、详细的安装教程和使用教程。我们还对比了不同C语言编译器(C语言编程软件)的优缺点,让初学者知道该如何选择。本节给大家介绍的 C 语言编译器覆盖全平台,包括 Windows、Linux 和 Mac OS,不管你使用什么电脑,都能编写C语言代码。Windows 下的C语言编译器众多,多如牛毛,有的功能强大,但是安装和使用都比较复杂,有的小巧灵活,但是功能较弱;这里我们收集了八款常用的编译器,供大家下载。

2024-06-11 19:28:26 79924 2

原创 data.biancheng.net数据结构网站

网站上有一整套的数据结构和算法教程,是 C 语言版本的,整套教程通俗易懂,不学院派,内容全面详尽,提供了完整、可运行的 C 语言程序,非常适合有 C 语言基础、对数据结构感兴趣的读者。感兴趣的小伙伴可以访问。

2024-01-17 17:35:14 609

原创 一对一辅导C语言和数据结构

学习 C 语言和数据结构遇到障碍的小伙伴,我可以提供一整套的文字教程,外加一对一答疑服务,全程助力你快速入门编程。

2024-01-10 16:04:40 584

原创 数据结构和算法教程(C语言版)

数据结构研究的是数据之间的关系,再进一步说,它研究的是多份数据之间的分布、排列和勾连的关系,以及在此基础之上如何进行高效的增删改查操作。数据结构是计算机专业的基础课程,也是所有程序员的内功心法;不懂数据结构就是写代码的农民,了解数据结构才能成为行业专家。六年创作,三次迭代,千般打磨,成就了现在这套精品的数据结构和算法教程。为了降低阅读门槛,本教程所有代码都基于C语言编写。

2023-11-04 14:20:52 1406

原创 数据结构QQ交流群:937184979

数据结构QQ交流群:937184979,快速提升数据结构水平!!

2019-11-18 13:04:44 725

原创 C语言socket编程实现文件传输功能(源码+解析)

注意 server.cpp 第42行代码,recv() 并没有接收到 client 端的数据,当 client 端调用 closesocket() 后,server 端会收到FIN包,recv() 就会返回,后面的代码继续执行。FIN 包表示数据传输完毕,计算机收到 FIN 包后就知道对方不会再向自己传输数据,当调用 read()/recv() 函数时,如果缓冲区中没有数据,就会返回 0,表示读到了”socket文件的末尾“。recv() 返回 0 的唯一时机就是收到FIN包时。请看下面完整的代码。

2025-07-15 19:43:07 416

原创 图解TCP四次握手断开连接(新手必看)

建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。下图演示了客户端主动断开连接的场景:建立连接后,客户端和服务器都处于ESTABLISED状态。这时,客户端发起断开连接的请求:1) 客户端调用 close() 函数后,向服务器发送 FIN 数据包,进入FIN_WAIT_1状态。FIN 是 Finish 的缩写,表示完成任务需要断开连接。

2025-07-15 19:33:48 368

原创 哈希查找算法C语言详解(完整源码+解析)

哈希查找算法又称散列查找算法,是一种借助哈希表(散列表)查找目标元素的方法,查找效率最高时的时间复杂度为 O(1)。哈希查找算法适用于大多数场景,既支持在有序序列中查找目标元素,也支持在无序序列中查找目标元素。讲解哈希查找算法之前,我们首先要搞清楚什么是哈希表。

2025-07-06 21:34:28 901

原创 C语言二分查找(折半查找)详解(源码+解析)

二分查找又称折半查找、二分搜索、折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn)。二分查找算法仅适用于有序序列,它只能用在升序序列或者降序序列中查找目标元素。

2025-07-06 21:22:51 553

原创 C语言main函数中的argc和argv参数有什么用?

在C语言中,main 函数是程序的入口点,它是程序开始执行的地方。例如,我们可以根据命令行参数来改变程序的行为,读取输入文件的名称,或者设置程序的配置选项。需要注意的是,argv[0] 通常是程序本身的名称,而实际的命令行参数从 argv[1] 开始。在这个带参数的 main 函数中,argc 和 argv 是两个非常重要的参数,它们允许程序接收和处理命令行参数。总的来说,main 函数中 argc 和 argv 参数用于在程序启动时,接收来自命令行的参数。这种形式适用于不需要处理命令行参数的简单程序。

2025-06-24 12:29:26 322

原创 C语言NULL和0的区别(非常详细)

另一方面,使用 0 来表示空指针,虽然在技术上是正确的,但可能会引起混淆,特别是在复杂的表达式中。相比之下,0 是一个整数常量,它在C语言中有多重含义:可以表示数值零,也可以在某些上下文中表示假(false)的布尔值。当用于指针时,0 会被隐式转换为空指针常量;在这种情况下,使用 NULL 而不是 0 来表示空指针就显得尤为重要,因为它可以被定义为一个不同于 0 的值,以避免与有效的内存地址产生冲突。NULL 是一个宏定义,通常在标准头文件中定义,被用来表示空指针,即不指向任何有效的内存地址的指针。

2025-06-24 12:20:51 553

原创 C语言变量作用域(3种)

在C语言中,变量的作用域是指变量在程序中可以被访问和使用的范围,它决定了变量的可见性和生命周期。C语言中主要有三种变量作用域:局部作用域、全局作用域和块作用域。接下来,让我们深入探讨每种作用域的特点和使用场景。

2025-06-20 13:05:50 441

原创 C语言变量初始化和赋值的区别(非常详细)

在C语言中,变量初始化和赋值是两个相关、但不完全相同的概念,它们都涉及给变量赋予一个值,但发生的时机和使用的方式有所不同。变量初始化是在变量声明的同时给它赋予一个初始值,这个过程发生在变量的生命周期开始时。初始化可以确保变量在首次使用时已经有一个明确的、可预测的值,从而避免使用未初始化变量可能带来的不确定行为。变量赋值则是在变量声明之后的任何时候,给变量赋予一个新的值。值得注意的是,变量初始化在某些情况下是必要的,而在其他情况下则是可选的,这取决于变量的存储类别和作用域。

2025-06-20 12:57:08 425

原创 C语言#include命令的用法(非常详细)

通过使用 #include 命令,我们可以避免在每个源文件中重复编写这些常用的代码片段,从而大大简化了代码的维护工作。当编译器遇到 #include 指令时,它会将指定文件的全部内容插入到 #include 指令的位置,这个过程是在实际编译开始之前由预处理器完成的。总的来说,#include 命令是C语言中一个简单但强大的语法,它不仅允许我们重用代码,还帮助我们组织和管理复杂的项目结构。在C语言中,#include 命令是一个预处理指令,用于在编译之前将其他文件的内容包含到当前源文件中。

2025-06-19 16:22:35 759

原创 #include <stdio.h>的含义和用法(非常详细)

值得注意的是,#include 指令不仅仅用于包含标准库头文件。在中大型项目中,我们经常会创建自己的头文件来组织代码,下面是一个实例演示。首先,我们将创建一个名为 mathoperations.h 的自定义头文件,其中包含一些基本的数学运算函数声明;然后,我们将在主程序中包含并使用这个头文件。/*** 系统学习C语言 https://xiecoding.cn/c/**/// 函数声明在这个头文件中,我们定义了四个基本的数学运算函数:加法、减法、乘法和除法。

2025-06-19 16:13:40 952

原创 一文快速搞懂C语言字符串结束标志(空字符)

例如,当使用 strncpy() 函数复制固定长度的字符串时,如果源字符串的长度超过了指定的长度,结果字符串可能不会自动添加结束标志。例如,如果我们忘记为字符串分配足够的空间来容纳结束标志,或者在复制字符串时忽略了结束标志,就可能导致程序出现意外行为或崩溃。从输出结果我们可以看到,虽然字符串的可见长度是 5,但数组的实际大小是 6,这就是因为结束标志 '\0' 占用了一个额外的字节。在C语言中,字符串有一个特殊的结束标志,这个结束标志是一个空字符(null character),用。

2025-06-18 18:03:48 359

原创 C语言数组逆序输出方法大全(附带源码,新手必看)

数组逆序输出是C语言编程中一个常见且实用的操作,这个过程涉及将数组中的元素按照与原始顺序相反的顺序进行输出。接下来,我将带各位读者一起学习几种数组逆序输出的方法。

2025-06-18 17:55:43 699

原创 null在c语言什么意思(非常详细,新手必看)

需要注意的是,虽然 NULL 通常被定义为整数 0,但在C语言中,我们不应该直接使用 0 来代替 NULL。使用 NULL 可以提高代码的可读性,并且更明确地表达我们的意图是在处理指针。总的来说,NULL 在C语言中表示空指针,它可以帮助我们初始化指针、检查内存分配是否成功、防止悬挂指针问题,以及在各种数据结构中标记特殊位置。在这个例子中,我们使用 NULL 作为循环的终止条件,当遇到 NULL 时,就知道已经到达了链表的末尾。在C语言中,NULL 代表了一个特殊的指针值,用来表示“空”或“无效”的指针。

2025-06-17 13:41:43 215

原创 C语言指针常量和常量指针的区别(新手必看)

相反,ptr2 可以改变它所指向的地址(从指向 x 变为指向 y),但我们不能通过 ptr2 来修改它所指向的值。然而,我们可以通过这个指针来修改它所指向的内容(也就是它所指向的内存位置中的值)。换句话说,指针是固定的,但指针指向的内容是可变的。这意味着指针可以指向不同的内容(也就是它所指向的内存位置中的值),但是不能通过这个指针来修改内容。也就是说,指针本身可以改变,可以指向不同的内容,但是它所指向的内容是不可修改的。指针常量通常用于确保指针始终指向特定的内存位置,而常量指针则用于保护数据不被意外修改。

2025-06-17 13:30:34 819

原创 return 0在c语言中的功能(非常全面,附带实例)

return 0 在C语言中扮演着重要的角色,它不仅标志着程序的正常结束,还为程序与操作系统之间的通信提供了一种简单而有效的机制。养成在 main 函数末尾使用 return 0 的习惯,可以使你的代码更加规范,更易于理解和维护。同时,合理使用不同的返回值,可以让你的程序在遇到错误时提供更多有用的信息,从而提高程序的健壮性和可调试性。

2025-06-16 14:09:10 940

原创 C语言函数返回数组的4种方法(非常全面,新手必看)

虽然 C语言不支持直接返回数组,但我们有多种方法可以实现类似的功能。选择哪种方法取决于具体的需求,如数组大小是否固定、是否需要动态分配内存、是否需要返回额外信息等。在实际编程中,我们需要权衡这些方法的优缺点,选择最适合当前场景的解决方案。无论选择哪种方法,都要注意内存管理,避免内存泄漏和访问越界等常见问题。

2025-06-16 13:38:21 537

原创 C语言水仙花数详解(附带源码和解析)

通过这个水仙花数的 C语言实现案例,我们能够直观地理解如何运用数学运算与循环结构来解决特定的数字问题。这不仅有助于我们深入掌握 C语言的基本运算和控制流程,还能有效锻炼逻辑思维能力。希望大家能够多多从这类小实例中汲取经验,不断提升编程技能,为解决更复杂的问题打下坚实基础。

2025-06-10 19:49:31 407

原创 顺序表与数组根本不是一码事!(新手必看)

网络上,很多人认为顺序表就是数组,或者数组就是顺序表等等,这些理解都是错误的、片面的。数组是一种数据类型,专门用来存储一组数据;顺序表是一种存储结构,专门用来存储逻辑关系为“一对一”的一组数据。

2025-06-10 19:45:13 297

原创 C语言数组去重的2种方法(附带实例)

在实际应用中,选择哪种去重方法取决于多个因素,如数组是否有序、数组的大小、可用的内存空间等。对于大型数组,可能需要考虑更高效的算法,如使用哈希表来检测重复元素,这可以将时间复杂度降低到 O(n),但会增加空间复杂度。这个函数的工作原理是:对于数组中的每个元素,我们检查它是否已经存在于新数组(即前 newSize 个元素)中,如果不存在,我们就将它添加到新数组的末尾。在 C语言中,去掉数组中重复的元素是一个常见的编程任务,这个过程通常被称为数组去重。这种方法的时间复杂度较高,但不要求输入数组有序。

2025-06-06 19:54:00 319

原创 C语言数字转字符串方法大全(附带实例)

在这三种方法中,snprintf() 函数是最推荐的选择,它结合了 sprintf() 的灵活性,并带来了额外的安全性,可以有效防止缓冲区溢出。需要注意的是,这些函数都假设目标字符串有足够的空间来存储转换后的结果。在使用这些函数时,始终要确保分配足够的内存来容纳转换后的字符串,包括结尾的空字符。此外,对于浮点数的转换,可以使用相同的 sprintf() 或 snprintf() 函数,只需要更改格式说明符(例如使用 %f 代替 %d)。

2025-06-06 19:43:41 1175

原创 C语言转义字符大全(附带实例,非常详细)

C语言中的转义字符是一种特殊的字符,用于表示一些无法直接输入或者具有特殊含义的字符。这些转义字符以反斜杠开头,后跟一个或多个字符。转义字符在字符串和字符常量中使用,能够让我们更灵活地处理各种特殊情况。

2025-06-04 21:28:24 860

原创 C语言二维数组初始化方法大全(附带实例)

在 C语言中,二维数组用于存储和处理矩阵或表格形式的数据。初始化二维数组是编程中的一个重要步骤,特别是当我们需要将所有元素设置为特定值(如 0)时。本文将详细介绍如何在 C语言中将二维数组的所有元素初始化为 0,并探讨不同的方法及其适用场景。二维数组本质上是一个“数组的数组”,可以看作是由多个一维数组组成的结构。在C语言中,我们有多种方法可以将二维数组的所有元素初始化为 0。让我们逐一探讨这些方法,并分析它们的优缺点。

2025-06-04 21:24:12 1014

原创 C语言判断素数(附带源码和解析)

通过这个程序,我们不仅可以判断单个数是否为素数,还可以通过简单的修改来找出一定范围内的所有素数。素数,也称为质数,是一个大于 1 的自然数,除了 1 和它本身外,不能被其他自然数整除。如果找到了这样的数,那么它就不是素数。在 C语言中,我们可以使用 for 循环来实现素数的判断,这种方法的基本原理是:对于给定的数 n,我们只需要检查从 2 到 n 的所有整数是否能整除 n。通过这个例子,我们可以看到 C语言 for 循环在解决实际问题中的应用,它不仅可以用于判断单个数是否为素数,还可以用于生成素数表。

2025-06-02 21:29:11 499

原创 C语言从1加到n怎么求(附带源码和解析)

在 main 函数中,我们声明了两个整型变量:n 用于存储用户输入的数字,sum 用于存储累加的和,初始值设为 0。要计算 1 到 n 的和,我们需要创建一个循环,从 1 开始,一直累加到 n。例如,如果 n 是 5,循环将执行 5 次,sum 的值将依次变为 1、3、6、10、15。接下来,我们使用 printf 函数提示用户输入一个正整数,然后用 scanf 函数读取用户的输入并存储在 n 变量中。在C语言中,使用 for 循环求 1 到 n 的和是一个常见的编程任务。1 到 5 的和是:15。

2025-06-02 21:21:59 439

原创 二叉树是什么,二叉树简介(图文并茂,新手必看)

满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。本节主要介绍了什么是二叉树、满二叉树和完全二叉树,以及它们各自具有的性质。实际开发中,合理利用二叉树的性质可以快速操作二叉树中的结点,提高程序的执行效率。1%7D。

2025-05-26 19:46:43 663

原创 c语言链表详解(超详细,图文并茂)

以上内容详细介绍了对链表中数据元素做"增删查改"的实现过程及 C 语言代码,最后给大家一段完整的代码,实现对有头结点链表的“增删查改”,大家可以去我的个人网站获取。静态链表做 "增删查改" 操作的完整实现代码,大家可以去我的个人网站获取。最后给大家双链表中对数据进行 "增删查改" 操作的完整实现代码,可以去我的个人网站获取。

2025-05-26 19:21:32 1130

原创 C语言求斐波那契数列(附带源码和解析)

首先,我们声明了变量 n 来存储用户想要生成的斐波那契数列的项数,i 作为循环计数器。使用 for 循环来生成斐波那契数列不仅高效,而且直观易懂,这种方法避免了递归调用带来的栈溢出风险,同时也减少了重复计算,使得即使对于较大的 n 值也能快速生成斐波那契数列。斐波那契数列是一个经典的数学序列,它在自然界、艺术和计算机科学中都有广泛的应用。这个方法的核心思想是使用三个变量:两个用来存储前两个数,一个用来存储当前计算的数。在 for 循环中,我们使用了一个巧妙的方法来生成斐波那契数列。

2025-05-21 20:15:52 465

原创 C语言求1到100的和(附带源码和解析)

在C语言中,使用 for 循环来计算 1 到 100 的和是一个常见的编程练习。这个任务不仅能帮助初学者熟悉循环结构,还能加深对变量累加和基本算术运算的理解。接下来,让我们一步步深入探讨如何实现这个功能,并解析代码的每个部分。

2025-05-21 20:12:02 492

原创 C语言函数的用法(超级详细,新手必看)

如果函数不接收用户传递的数据,那么定义时可以不带参数,它的语法格式如下://bodydataType 是返回值类型,它可以是C语言中的任意数据类型,例如 int、float、char 等。functionName 是函数名,它是标识符的一种,命名规则和标识符相同。函数名后面的括号( )不能少。body 是函数体,它是函数需要执行的代码,是函数的主体部分。即使只有一个语句,函数体也要由{ }包围。如果有返回值,在函数体中使用 return 语句返回。

2025-05-19 22:08:43 1165

原创 形参和实参的区别是什么(C语言版,新手必看)

如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。

2025-05-19 21:54:47 794

原创 C语言数组定义和赋值(超级详细,全网最新)

其中,dataType 是每个元素的类型,比如 int、float、char 等;dataType 是数组的名字,它是一个自定义的标识符,符合标识符的命名规则;方括号[ ]中的 length 是数组的长度,也即数组包含的元素的个数。这样就定义了一个名为 nums 的数组,它包含 4 个 int 类型的元素。//定义一个可以存储 100 个浮点数的数组//定义一个可以存储 20 个字符的数组。

2025-05-16 21:16:11 1122

先序线索二叉树、中序线索二叉树和后序线索二叉树

对先序线索二叉树、中序线索二叉树和后序线索二叉树进行了 C 语言实现,主要包括线索二叉树的建立和遍历过程。

2024-01-01

栈求表达式的值(C语言实现)

用栈求表达式的值,提供了完整、可执行的 C 语言程序

2023-12-28

双向链表实现贪吃蛇游戏(C语言版)

本资源设计实现的贪吃蛇游戏,用双向链表实现,编程语言为 C 语言,源码文件有 3 个,分别为 snake.h、snake.c 和 main.c。

2023-12-26

反转带头结点的链表(4种方法)

用迭代、递归、头插、就地逆置共 4 种方法反转带头节点的链表,代码用 C 语言实现。

2023-12-26

反转链表(不带头结点)

用迭代、递归、头插、就地逆置共 4 种方法反转不带头节点的链表,代码用 C 语言实现。

2023-12-26

空空如也

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

TA关注的人

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