目录
始
特征:物理结构不一定连续,逻辑结构一定连续。物理结构:地址不是连续的,
逻辑结构:通过某几个地址能够找到一些参数,并把连接起来。
这些玩意儿叫节点(多半是结构体类型), 节点里面会放一些数据,以及 下一个节点的地址
节点:分为两部分,数据(可以放很多也可以很少,具体看需求)以及下一个节点的地址。
![]()
打印
首先,创建一个结构体类型的指针,赋值为NULL(表示为空链表),在插入几个数据之后打印。
我们直接传递的是这个变量,这个变量里面存的是地址,由于我们不需要修改实参的数据,所以可以直接使用变量访问。
创建一个临时变量存放p里面的地址,用 cp 访问,每次进来打印里面的数据 a ,再将下一位的地址赋给 p ,上来判断是否为 NULL
也可以不用创建临时变量不会影响实参的。
void SLNprint(SLN* p)//打印链表里的数据 { assert(p); while (p) { printf("%d->", p->a); p = p->Next; } }
开辟节点
用malloc开辟一个节点的空间,判断是否为空,最后是返回开辟成功的地址
SLN* SLNinvent(void) { SLN* iplist = (SLN*)malloc(sizeof(SLN)); if (iplist == NULL) { perror("malloc"); exit(EOF); } return iplist; }
尾插
大致可以把尾插分两部分开辟节点,和找到尾部
开辟节点后给节点赋值上你要插入的值,将下个节点的指针置NULL
第二部分:
创建一个临时节点变量,用来存放头结点的的地址
判断头链表是否是空链表(人话:头结点是否是空指针)
else遍历链表,直到遇见某个节点的 Next 是NULL,此时的slntail 变量放的是最后一个节点的地址(一个结构体空间的起始地址)。再将这个节点里面的Next 赋值为刚刚开辟的节点地址。
void SLNpushback(SLN** phead,int a) { assert(phead); SLN* list = SLNinvent(); list->a = a; list->Next = NULL; SLN* slntail = *phead; if (*phead == NULL)