CLRS 10 1棧和佇列

2021-07-05 00:27:23 字數 2608 閱讀 6819

第乙個棧從

1 到

n增長,第二個棧從

n 到

1遞減,只有當兩個棧指標相鄰時再入棧才會溢位 。

10.1-3

圖略,在此只給出q.headq.tail

初始:q.head = q.tail = 1

enqueue(q,4): q.head = 1 , q.tail = 2

enqueue(q,1): q.head = 1, q.tail = 3

enqueue(q,3): q.head = 1 , q.tail = 4

dequeue(q): q.head = 2 , q.tail = 4

enqueue(q,8): q.head = 2 , q.tail = 5

dequeue(q): q.head = 3 , q.tail = 5

10.1-4

enqueue(q, x)

if q.head == (q.tail + 1) % q.length

error "queue overflow"

q[q.tail] = x

if q.tail == q.length

q.tail = 1

else

q.tail = q.tail + 1

dequeue(q)

if q.head == q.tail

error "queue underflow"

x = q[q.head]

if q.head == q.length

q.head = 1

else

q.head = q.head + 1

return x

10.1-5

直接上**

#include 

using

std::cout;

using

std::endl;

const

int max_size = 20;

struct deque_t

;void init_deque(deque_t *deque)

bool isempty(deque_t *deque)

void push_back(deque_t *deque,int key)

deque->array[deque->tail] = key;

if(deque->head == -1)

deque->head = deque->tail;

deque->tail = (deque->tail + 1) % max_size;

}int pop_back(deque_t *deque)

deque->tail = (deque->tail - 1 + max_size) % max_size;

if(deque->head == deque->tail)

deque->head = -1;

return

deque->array[deque->tail];

}void push_front(deque_t *deque,int key)

if(deque->head == -1)

deque->head = deque->tail;

deque->head = (deque->head - 1 + max_size) % max_size;

deque->array[deque->head] = key;

}int pop_front(deque_t *deque)

int ret = deque->array[deque->head];

deque->head = (deque->head + 1) % max_size;

if(deque->head == deque->tail)

deque->head = -1;

return ret;

}void print(deque_t *deque)

int main()

10.1-6

設現在有兩個棧 a,

b ,入隊的時候就將元素 pu

sh到

b 中,出隊的時候就從 a中

pop ,若

a 空,則將

b中的元素乙個個彈出然後壓入到

a 中,然後再彈出。

出隊操作是 o(

n),入隊操作是 o(

1)。10.1-7

使用兩個佇列,將其中乙個記做活動佇列,每次對棧的壓入操作時,都將元素入隊到活動佇列。每次對棧的彈出操作,把活動佇列的元素(除去最後乙個元素)入隊到非活動佇列,然後出隊活動佇列的元素,同時將活動和非活動佇列的標記進行轉換。

彈出操作是o(n)。

棧和佇列 單調佇列 單調棧

講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...

棧和佇列 佇列

佇列 又一種特殊的線性表 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...

棧和佇列(佇列)

列隊類 public class myqueue 帶引數構造方法,引數為陣列大小 public myqueue int maxsize 新增資料 從隊尾插入 public void insert int value arr end value 注意是 end 不是end element 刪除資料,從...