Stack_Empty(S) if S.top == 0 return True else return False
Push(S,x) if S.top != n S.top += 1 S[S.top] = x else error "overflow"
出栈 出栈是不用指定元素的, 由于栈只能Pop出最顶端的元素前端
Pop(S) if Stack_Emypty(S) error "underflow" else S.top -= 1 return S[S.top+1]
队列数组
Queue_Empty(Q) if head == tail && tag return False else if head == tail && !tag return True
入队数据结构
n 为 Q的长度 Enqueue(Q,x) if head == tail && tag return "overflow" else { Q[tail++] = x tail %= n tag = 1 }
出栈spa
n 为 Q的长度 Dequeue(Q) if head == tail && !tag return "underflow" else { head = (head+1) % n tag = 0 }
List_Search(L, k) x = L.head // 从头开始查找 while x != Null && x.key != k x = x.next // 没有找到且不是最后一个元素就一直往下找 return x
List_Insert(L, x) x.next = L.head if L.head != Null L.head.prev = x L.head = x x.prev = Null
List_Delete(L, x) if x.prev != Null // 若是x的前驱不为空, 那么就让它指向x的后驱元素 x.prev.next = x.next else L.head = x.next if x.next != null // 若是x的后驱不为空, 那么就让它指向x的前驱元素 x.next.prev = x.prev
如下为加了哨兵改动过的代码:3d
搜索指针
List_Search'(L, k) x = L.nil.next // 从头开始查找 while x != L.nil && x.key != k x = x.next // 没有找到且不是最后一个元素就一直往下找 return x
List_Insert'(L, x) x.next = L.nil.next L.nil.next.prev = x L.nil.next = x x.prev = L.nil
删除code
List_Delete'(L, x) x.prev.next = x.next x.next.prev = x.prev