尾插函数
测试
判空(判断链表是否为空)
获取数据结点的个数
测试
在链表plsit中 查找第一个key值,找到返回key值的结点地址,没有找到返回空NULL
删除第一个val的值
前面的链表操作删除第一个val值时,通常调用返回key的前驱下标
但在双向链表里面,前驱已经用prio保存了(在找到Search的结点里面的prio),所以不用调用函数了
之前链表删除,是一句穿透,现在要两句穿透——
将第一行中的300(p->prio->next)改成200(p->next),
第二行中的300(p->next->prio)改成500(p->prio)
同理,写多级指针时,必须要判断一下是否为空(有空则会崩溃),
上句中的p->next就有可能为空(p为最后一个末尾结点时)
这时只执行第一句话就可以了,200变成NULL,第一条链就断了;
虽然第二条链没断,但在free(p)之后,整个结点p都没了,此时第二条链自然就断了
所以第二句话不用写,
p->prio则不可能为空,因为它最多可能在下图中的位置,prio也是plist的位置100
最后,删除中,在穿透之后就必须free释放
测试
返回key的前驱地址,如果不存在(key无前驱,在表头)返回NULL
//返回key的后继下标,如果不存在(key无后继,在表尾)返回NULL
清空链表中的数据
跟前面链表一样,调用销毁函数就行了
销毁整个链表内存(交回)
销毁函数跟前面链表的销毁是一模一样的,也是只穿透删除第一条线,没有写第二条线
这是因为上面第一条线已经把表连接起来了,并且穿透一个结点紧接着就free释放这个结点
所以第二条线可以处理,也可以不处理,
但一般情况下为了简洁高效就不处理第二条线,就像扔垃圾前不用洗垃圾一样
测试