演算法導論10 1 5習題解答 deque實現原始碼

2021-09-08 14:36:21 字數 1548 閱讀 6409

clrs 10.1-5

棧的插入和刪除操作都是在一端進行的,而佇列的插入和刪除卻是在兩頭進行的。有一種雙端佇列(deque),其兩端都可以做插入和刪除的操作。對於乙個用陣列構造的雙端佇列,請寫出四個在兩端進行插入和刪除操作的過程,要求執行時間為o(1)。

#include

<

iostream

>

using

namespace

std;

template

<

class

t>

class

deque

;int

main()

template

<

class

t>

void

deque

<

t>

::push_front(t t)

//保證新插入的元素總在前面

head

=(head ==0

) ?max -1

: head -1

;arr[head] =t;

count++;

}template

<

class

t>

void

deque

<

t>

::push_back(t t)

//保證新插入的元素總在後面

tail

=(tail

==max -1

) ?0: tail +1

;arr[tail] =t;

count++;

}template

<

class

t>

t deque

<

t>

::pop_front()

inttemp

=head;

head

=(head

==max -1

) ?0: head +1

;count--;

return

arr[temp];

}template

<

class

t>

t deque

<

t>

::pop_back()

inttemp

=tail;

tail

=(tail ==0

) ?max -1

: tail -1

;count--;

return

arr[temp];

}template

<

class

t>

deque

<

t>

::deque(

intm)

template

<

class

t>

deque

<

t>::~

deque()

演算法導論習題解答 2 3 7

2.3 7 請給出乙個執行為 nlgn 的演算法 偽碼 使之能在給定乙個由n 個整數構成的集合s 和另乙個整數x 時,判斷出s 中是否存在有兩個其和等於x 的元素。解 解題思路 先對集合s進行歸併排序,然後新建乙個陣列s1,使得s1 i x s i 再將兩個陣列並起來。如果在並的過程中發現有兩個元素...

演算法導論6 5 7習題解答

clrs 6.5 7 heap delete a,i 操作將結點i中的項從堆a中刪去。對含n個元素的最大堆,請給出時間為o lgn 的heap delete的實現。演算法思想 對即將被刪的i處的元素設定為堆中末尾的元素,同時堆的大小減1.此題同時附帶6.2 5的解答 如下 1 include 2 u...

演算法導論12 2節習題解答

clrs 12.2 1 c錯,240及240之後的節點應該都為911左子樹上的節點,那麼所有節點必然小於或等於911,但點912明顯違反了。clrs 12.2 2 search minimum x if left x nil search minimum left x return x search...