数据结构基础
基本概念

1. 数据
是描述客观事实的符号,是计算机中可以操作的对象,能被计算机识别,并输入给计算机处理的符号集合。
数据结构研究数据元素之间的关系,包含逻辑结构与物理结构。线性表分为顺序表和链表。链表通过指针连接节点,包含头指针和头节点。单向链表的基本操作包括创建、头插、尾插、头删、尾删、修改和查找。操作时需注意空链表、单节点边界条件及逻辑与短路特性,确保内存安全与正确性。时间复杂度方面,顺序访问为 O(n),随机访问为 O(1)。

是描述客观事实的符号,是计算机中可以操作的对象,能被计算机识别,并输入给计算机处理的符号集合。
性质相同的数据元素集合,是数据的子集。
是组成数据的、具有一定意义的基本单位,被计算机当作整体来处理。
数据不可再分的最小单位。
逻辑关系(结构):从逻辑上存在的一种联系。 存储关系(结构):存储到计算机的结构。
不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称为结构。 包括:逻辑结构、物理结构、算法。
逻辑结构是指数据对象中数据元素之间的相互关系。
数据元素除了同属一个集合之外,它们之间没有必然联系。

其中的数据元素之间是一对一的关系。

其中的数据元素之间存在一对多的层次关系。

其中的数据元素之间是多对多的关系。

物理结构是指:数据的逻辑结构在计算机中的存储形式。

把数据元素存放在任意的存储单元里,这组存储单元可以说连续的,也可以是不连续的。
2) 特性:
根据地址就可以找到对应的关键字。可以理解成一个黄页,你根据一个人的名字,就可以找到他的电话。所以索引存储又被称为直接寻址。数组就是一个常见的索引存储结构,可以通过下标来直接访问。索引表是有序的。
'散列存储'名字中的'散列'就是常听到的 hash(哈希值),hash 是通过一种算法来运算出来的,比如 MD5。在这种存储格式下,地址会通过 hash 算法来运算成一个相同长度的 hash 值,然后存放这个 hash 值,而不是直接存放地址。在访问关键字的时候会通过运算解码 hash 值,然后再访问。
算法是解决问题的步骤,不同的数据结构决定了所对应的算法不同。
输入、输出、有穷性、确定性、可行性。
准正确性、健壮性、可读性、时间和空间效率。
时间复杂度、空间复杂度。
零个或多个数据元素的有限序列。
以顺序结构存储的线性表。



编写程序时要充分考虑空链表、只有一个有效节点、用户输入数据为 NULL 等特殊情况的排查。在判断条件中要考虑到逻辑与的短路特性,基本操作的前提都是在链表内完成的。
指针域的定义如下所示。

从头部插入,先插入的后输出。例如头插:1, 2, 3, 4;打印输出是:4, 3, 2, 1。

从尾部插入,先插入的先输出。例如尾插:1, 2, 3, 4;打印输出是:1, 2, 3, 4。
p_new->pnext = NULL; 必须写,因为此时插入的节点是尾节点,尾节点指针域必须为空。


p 必须从头节点(phead)开始遍历,而不是从首节点(phead->pnext)开始,主要是为了安全处理链表只有一个有效节点的边界情况。当头节点作为起始点时,当链表仅有一个节点时,p->pnext->pnext 直接为 NULL,循环不会执行,可直接释放尾节点并更新头节点的指针;若从首节点开始,此时 p 即为尾节点,p->pnext 为 NULL,访问 p->pnext->pnext 会导致对空指针解引用,引发段错误。因此,从头节点出发能统一处理各种节点数量情况,避免非法内存访问。
while((p != NULL) && (p->data != old)) 这里的条件不能调换顺序,因为如果调换为 (p->data != old) && (p != NULL),当 p 为 NULL 时,会先访问 p->data 导致段错误。目前的顺序是正确的,利用了逻辑与的短路特性。&& (p->data == old) 这个判断是多余的。因为循环结束的条件只有两种可能:p == NULL(遍历完链表没找到)p->data == old(找到了)
所以只要 p != NULL,就一定是找到了目标节点。

NULL。while 的条件语句也不可以调换顺序,因为逻辑与的短路特性存在,指定值和节点数据域相等的前提应该是在链表内。

判断链表是否为空
在非空链表中,判断链表是否只有一个有效节点是:phead->pnext->pnext == NULL;

遍历打印链表数据域

计算链表长度


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online