|
|
本文实例为大家分享了javascript实现双端队列的具体代码,供大家参考,具体内容如下* m" H+ T, Q; C7 Q- ?3 ^
1.双端队列
" V" e9 _5 k6 j: }6 Q7 F2 H8 }3 W, g9 D! ]& B% ?5 X. L
$ V7 O E5 D- a3 C& F t* \; Z双端队列是一种允许我们同时从前端和后端添加和移除元素的特殊队列
! O2 j+ x2 J; A" P% n1 {& E# P2.双端队列的应用: [3 l; A9 H C+ E5 v+ |
) U' u" n+ G) d* r
$ V/ r3 C* H2 O( I. G+ W: E* s一个刚买了票的入如果只是还需要再问一些简单的信息,就可以直接回到队伍头部,另外队伍末尾的人如果赶时间也可以直接离开队伍
2 m" U4 n/ _; N3.双端队列的方法
9 ]3 r. t; ]9 G$ T1 B3 {
. b( u8 r* j/ u( n/ Q# r) C! U" ~5 P- A+ l
addFront(element):该方法在双端队列前端添加新的元素- Q+ N" [, d! ]( \) N
addBack(element):该方法在双端队列后端添加新的元素(实现方法和 Queue 类中的enqueue 方法相同)。4 S( G9 E" _6 x$ @, Z
removeFront():该方法会从双端队列前端移除第一个元素
1 r) c' \ s8 w, b8 bremoveBack():该方法会从双端队列的后端移除第一个元素
. k; A) N& @& I6 H0 SpeekFront():该方法返回双端队列的第一个元素。
* \, F: r+ O" ]* v9 epeekBack()):该方法返回双端队列后端的第一个元素。
) J8 E2 c% M4 k8 E4.实现
, L, C# h6 O9 |: |: |0 e) |! q/ x3 B. @; b$ o6 g# ]6 J
[code]class Deque{ constructor(){ this.items = {}; this.count = 0; this.lowestCount = 0; } // 在双端队列前端添加新元素 addFront(element){ if(this.isEmpty()){ this.addBack(element); } else if(this.lowestCount > 0){ this.lowestCount -- ; this.items[this.lowestCount] = element; } else{ for(let i=this.count;i>0;i--){ this.items = this.items[i-1]; } this.lowestCount = 0; this.items[this.lowestCount] = element; this.count++; } }; addBack(element){ this.count++; this.items[this.count-1] = element; }; removeFront(){ if(this.isEmpty()){ return undefined; } const result = this.items[this.lowestCount]; delete this.items[this.lowestCount]; this.lowestCount++; return result; }; removeBack(){ if(this.isEmpty()){ return undefined; } const result = this.items[this.count-1]; delete this.items[this.count-1]; this.count--; return result; }; peekFront(){ if(this.isEmpty()){ return null; } return this.items[this.lowestCount]; }; peekBack(){ if(this.isEmpty()){ return null; } return this.items[this.count-1]; }; isEmpty(){ return this.count - this.lowestCount == 0; } size(){ return this.count - this.lowestCount; } toString(){ if(this.isEmpty()){ return ''; } let objString = `${this.items[this.lowestCount]}`; for(var i=this.lowestCount+1;i |
|