栈(Stack)
维基百科:
在栈中,被删除的是最近插入的元素:栈实现的是一种后进先出(last-in, first-out, LIFO)策略。
栈上的INSERT操作称为压入(PUSH), 而无元素参数的DELETE操作称为弹出(POP)。
伪码:
STACK-EMPTY(S)
if S.top == 0
return TURE
else return FALSE
PUSH(S, x)
S.top = S.top + 1
S[S.top] = x
POP(S)
if STACK-EMPTY(S)
error "underflow"
else S.top = S.top - 1
return S[S.top + 1]
队列
维基百科:
在队列中,被删去的总是在集合中存在时间最长的那个元素:队列实现的是一种先进先出(first-in, first-out, FIFO)。
队列上的INSERT操作称为入队(ENQUEUE),DELETE操作称为出队(DEQUEUE);如栈的POP操作一样,DEQUEUE操作也没有元素参数。
伪码:
ENQUEUE(Q, x)
Q[Q.tail] = x
if Q.tail == Q.length
Q.tail = 1
else Q.tail = Q.tail + 1
DEQUEUE(Q)
x = Q[Q.head]
if Q.head = Q.length
Q.head = 1
else Q.head = Q.head + 1
return x
链表
维基百科:
链表是一种这样的数据结构,其中的各对象按线性顺序排列。
单向链表:
双向链表:
循环链表:
伪码:
(假设以下所处理的链表都是未排序的且是双链的)
LIST-SEARCH(L, k)
x = L.head
while x != NIL and x.key != k
x = x.next
return x
LIST-INSERT(L, x)
x.next = L.head
if L.head != NIL
L.head.prev = x
L.head = x
x.prev = NIL
LIST-DELETE(L, x)
if x.prev != NIL
x.prev.next = x.next
else L.head = x.next
if x.next != NIL
x.next.prev = x.prev