【学习 + 笔记】LinuxC 动态数据结构

335 阅读2分钟

链表

这是一个比较简单的静态链表

链表中的每个元素都是一个节点,每个节点包含两个部分,一部分保存的是用户储存的数据,另外一部分是指向下一个节点的地址

链表中的各个节点之间的地址不一定是连续的, 详见《看得见的算法中介绍》

数组中每个值之间的位置是连续的

如果没有头指针,链表是不能被访问的

需要一个借助一个指针p,来访问起始节点

动态链表

建立动态链表,指的是,在程序运行中从无到有的建立一个链表

单向动态链表

来一个创建链表的函数,这个函数的返回值是链表的头指针, head 是头指针, p1 , p2 一个指向新创建的节点,一个用来指向上一个节点,创建一个临时变量n,来记录当前链表的个数, 之后使用melloc函数去开辟第一个节点,第一个节点让p1 p2都指向它

之后输入数据赋给p1的节点,第一个节点单独来处理

一开始链表是不存在的,我们给head头指针赋值为NULL, 这样就可以进入大批量输入数据的过程了

这里需要一个约定 ,如果我们输入了price为0 ,这个时候,这个节点就不会链接在链表中了,如果不为0,就让它链接到链表中来

所以在做循环的时候呢,我们做一个判定这个p里的 price成员如果不等于零,那么我们就让他进入这个循环。首先我要让n做一个++的操作。元素个数加一。

那如果是第一次运行到这里的时候呢,n++加之后 n就变成一了,这里我们需要做一个特殊处理。如果是第一个添加到链表中的节点,我们需要让head指向这个元素的地址。

如果不是第一次,我们就需要让当前这个节点的上一个结点的next指向当前的这个节点,我们用p2来保存我们之前创建这个节点。

在完成了这个if判定之后。因为第一次运行的时候,他走的是这个上面这些号,然后执行完之后每次都让p2等于p1,保留这个节点然后我们需要开辟一个新的动态存储区,把这个起始地址再给p1。

开辟了一个新的存储区之后,我们需要进入到一个输入的环节,while步骤就已经全部完成了。

最后在main中调用