一 单向链表
1插入 在a和c之间插入b
b.next = a.next; //a的后继(c)变为b的后继
a.next = b; //b变为a的后继
2删除 在a和b之间删除c
- next =c.next; //c的后继(b)变为a的后继
二 双向链表
1插入 在a和c之间插入b
b.next=a.next;//a的后继(c)变为b的后继
a.next.previous=b;//b变为a后继(c)的前驱
b.previous=a;//a为b的前驱
a.next=b;//b为a的后继
问:在两个元素之间插入新元素,先计算新元素与后面的关系还是前面的关系?
答:都行。一般双向链表是在数据存储中使用的,如果需要插值,一定要先锁住链表,插值结束后再解锁,如果不加锁,那个先那个后都有问题。
2 删除 在a和c之间删除b
b.previous.next=b.next;//b的后继(c)变为b前驱的后继(即a的后继)
b.next.previous=b.previous;//b的前驱(a)变为b后继的前驱(即c的前驱)
数组与链表性能比较
数组和链表都是线性表,数组是线性表的顺序实现,链表是线性表的链接实现
1 空间性能
衡量指标通常是存储密度,存储密度是指存储结点中数据域占用的存储量与整个存储结点所占用的存储量之比。数组为1,链表小于1。数组的空间利用率高与链表。
2 时间性能
运算实现的时间复杂度
对于查询运算,数组O(1),链表O(n)
对于插入和删除运算,数组O(n),链表O(n)