数据结构----链表
链表的每个元素都是一个对象x,x.key(键值),x.prev(上一个指针), x.next(下一个指针),x.head(表头)
双向链表:x.prev, x.next,x.head
单向链表:x.next,x.head
循环链表:即表头元素(x.head.prev) 指向 表尾元素,可以想象成一个圆圈
对x进行操作 NIL == null
链表的搜索:
LIST_SEARCH(L,k){
x = L.head;
while x != NIL and x.key != k
x = x.next;
return x;
}
链表的插入:
// 向前端插入
LIST_INSERT(L,k){
x.next = L.head
if L.head != NIL
L.head.prev = x
L.head = x
x.prev = NIL
}
链表的删除:
LIST_DELETE(L,k){
if x.prev != NIL
x.prev.next = x.next
else L.head = x.next
if x.next != NIL
x.next.prev = x.prev
}
哨兵:简化边界条件 ------->上面代码可以用哨兵来简化代码LIST_INSERT 和 LIST_DELETE过程上节约了O(1) 的时间
链表中设置一个对象L.nil,该对象代表NIL,L.nil.prev指向表尾,L.nil.next指向表头
使用多了浪费内存空间