跳至主要內容
链表

链表是一种线性数据结构,其中的每一个元素都是一个节点,其中每一个节点都通过指针相连接,指针记录了下一个节点的内存地址,通过它可以从当前节点访问到下一个节点。


要知道计算机中的内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处,我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间,此时链表的灵活性优势就体现出来了。


王泽权大约 8 分钟CC数据结构
队列

在计算机科学中,数据结构是软件开发的基础,它们负责组织和存储数据以优化算法性能。其中,队列是一种基础且广泛应用的线性数据结构,尤其在多任务处理、消息传递、操作系统调度等领域具有重要作用。本文将重点探讨如何在 C 语言中实现并操作队列。

队列的概念

队列(queue)遵循先进先出的原则,就像现实生活中排队等待服务的情景一样,最先到达的元素最先离开。


队列的常用操作

我们将队列头部称为“队首”,尾部称为“队尾”,队列有两个主要的操作:“入队”与“出队”,将把元素加入队尾的操作称为“入队”,删除队首元素的操作称为“出队”。


王泽权大约 4 分钟CC数据结构

栈是一种遵循先入后出的逻辑的线性数据结构。我们可以将栈类比为桌面上的一摞盘子,如果想取出底部的盘子,则需要先将上面的盘子依次移走。我们将盘子替换为各种类型的元素(如整数、字符、对象等),就得到了栈这种数据结构。


栈的常用操作

我们把堆叠元素的顶部称为“栈顶”,底部称为“栈底”。将把元素添加到栈顶的操作叫作“入栈”,删除栈顶元素的操作叫作“出栈”。


王泽权大约 3 分钟CC数据结构
找素数

素数(也称为质数)的定义是一个大于 1 的自然数,除了 1 和它本身以外,不能被其他正整数整除。换句话说,一个素数只有两个正因数:1 和它自己。 例如,2、3、5、7、11、13、17、19、23 等都是素数,因为它们只能被 1 和它们自身整除。而 4、6、8、9、10 等不是素数,因为它们可以被其他的正整数整除,比如 4 可以被 2 整除,6 可以被 2 和 3 整除,以此类推。 素数在数学中有着重要的地位,特别是在数论领域。许多数学定理和算法都与素数有关,包括著名的费马小定理和欧拉定理。

判断一个数是否为素数: 在 code - 1 中,我们定义了一个名为 is_prime 的函数,它接受一个整数作为参数,并返回一个布尔值,表示该整数是否为素数。如果输入的整数小于等于 1,则不是素数;否则,我们从 2 开始遍历到该整数的平方根,如果该整数可以被任何一个小于它的正整数整除,则不是素数。


王泽权大约 6 分钟CC算法训练
数组

在 C 语言中,数组是将其相同类型元素存储在连续的内存空间中,数组通过变量名后加方括号表示,方括号里面是数组的元素数量。


声明数组

数组通过变量名后加方括号表示,方括号里面是数组的元素数量,也就是: 类型 + 变量名称 + [一个正值的长度], 在 code - 1 中声明了名为 array 长度为 100 元素类型为 int 的数组。

int array[100];

王泽权大约 4 分钟CC数据结构
基本语法

语句

C 语言的代码是由一行行的语句所组成,语句就是程序执行的一个操作命令,C 语言规定,语句必须使用分号结尾,除非有明确规定可以不写分号。

int x = 1;

王泽权大约 3 分钟CC
变量

变量名

在 C 语言中变量名属于标识符,命名有严格的规范:

  1. 只能由字母(包括大写和小写)、数字和下划线 ‘_’ 组成。
  2. 不能以数字开头。
  3. 长度不能超过 63 个字符。
  4. 变量名区分大小写,star、Star、STAR 都是不同的变量。

并非所有的词都能用作变量名,有些词在 C 语言里面有特殊含义(比如 int),另一些词是命令(比如 continue),它们都称为关键字,不能用作变量名,另外,C 语言还保留了一些词,供未来使用,这些保留字也不能用作变量名,下面就是 C 语言主要的关键字和保留字。


王泽权大约 4 分钟CC
二分查找

给定一个拥有 n 个不同元素的有序(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

当遇到这样的题目时我们就可以采用二分查找来完成,二分查找又称折半查找,是一种常见的查找算法,它的基本思想是将一个有序的数组按照中间值分成两个部分,然后判断目标值与中间值的大小关系,如果相等,则查找成功,如果目标值比中间值小,则在左半部分继续查找,如果目标值比中间值大,则在右半部分继续查找,直到找到目标值或者查找范围为空为止。

二分查找的具体实现过程如下:

  1. 设置查找范围的左右边界 left 和 right,分别指向数组的第一个元素和最后一个元素。

王泽权大约 3 分钟CC算法训练
汉诺塔

汉诺塔是一个经典的益智游戏,源自于印度数学家毕达哥拉斯所提出的问题。该游戏通常由三个柱子和若干个圆盘组成,目标是将若干个圆盘从起始柱子移动到目标柱子(且保持圆盘的排列顺序不变),同时遵守以下规则:

  1. 每次只能移动一个圆盘。
  2. 大圆盘不能放在小圆盘上面。

问题:如果将若干个圆盘从起始柱子 a 移动到目标柱子 c 上?(最少要移动多少次?) 提示:可将圆盘临时置于 b 塔,也可将从 a 塔移出的圆盘重新移回 a 塔,但都必须遵循上述两条规则。


王泽权大约 5 分钟CC算法训练
main 函数

C 语言的执行开始于 main 方法,main 方法是所有 C 语言程序执行的入口,在程序的开头,通常会定义一个 main 方法,并且它会作为程序的起始点,也就是说所有的 C 语言程序都需要一个称之为 mian 的方法,程序执行是从 main 方法中的第一句开始执行,当 main 函数返回时程序也会随之结束。

在最新的 C99 标准中 main 函数只有两种标准形式,值得注意的是标准 C 的返回值是一个整数,若 main 方法执行到末尾没有遇到返回语句,则直接默认执行了 return 0,而 0 值一般代表着成功的意思,如果对其他非 0 值感兴趣的话可以试着去搜索一下“Linux 或 Window 错误代码及其含义”这里就不做过多陈述。


王泽权大约 3 分钟CC