10.1-5 双端队列

一、题目

栈的插入和删除操作都是在一端进行的,而队列的插入和删除却是在两头进行的。另有一种双端队列(deque),其两端都可以做插入和删除操作。对于一个用数组构造的双端队列,请写出四个在两端进行插入和删除的操作的过程,要求运行时间都为O(1)

二、伪代码

NEXT(p, l)
1    if p = l
2        then ret <- 1
3        else ret <- p + 1
4    return ret
PRE(p, l)
1    if p = 1
2        then ret <- l
3        else ret <- p - 1
4    return ret
DEQUEUE-LEFT-INSERT(D, x)
1    l <- PRE([left[D], length[D])
2    if l = right[D]
3        then error "overflow"
4    if left[D] = right[D]
5        right[D] <- NEXT(right[D], length[D])
6   D[left[D]] <- x
7   left[D] <- l
DEQUEUE-RIGHT-INSERT(D, x)
1    r <- NEXT([right[D], length[D])
2    if r = left[D]
3        then error "overflow"
4    if left[D] = right[D]
5        left[D] <- PRE(left[D], length[D])
6    D[right[D]] <- x
7   right[D] <- r 
DEQUEUE-LEFT-DELETE(D)
1    if left[D] = right[D]
2        then error "underflow"
3    ret <- D[left[D]]
4    left[D] <- NEXT(left[D], length[D])
DEQUEUE-RIGHT-DELETE(D)
1    if left[D] = right[D]
2        then error "underflow"
3    ret <- D[right]
4    right[D] <- PRE(right[D], length[D])

三、代码

Last updated