1. 棧stack
棧是一種從后進(jìn)先出原則的有序集合。新添加或待刪除的元素都保存再棧的同一端赏半,稱作棧頂,另一端叫做棧底淆两。在棧里断箫,新元素都是靠近棧頂,舊元素都接近棧底秋冰,? ? 例子:一摞書
創(chuàng)建一個基于數(shù)組的棧
需要提供一下功能
push(element(s)) : 添加一個(或幾個)新元素到棧頂
pop() :? 移除棧頂?shù)脑刂僖澹瑫r返回被移除的元素
peek() :返回棧頂?shù)脑兀粚W鋈魏涡薷?br>isEmpty(): 如果棧里面沒有任何元素就返回true,否則就返回fasle
clear(): 移除棧里面的所有元素
size(): 返回棧里面的元素個數(shù)
class Stack {
constructor(){
this.items = []
}
push(element){
this.items.push(element)
}
pop(){
return this.items.pop()
}
peek(){
return this.items[this.items.length - 1]
}
clear(){
this.items = [];
}
size(){
return this.items.length;
}
isEmpty(){
? ? return?this.items.length===0;
}
}
應(yīng)用的中例子剑勾,將十進(jìn)制轉(zhuǎn)二進(jìn)制
function change(number){
let rectItems? = new Stack();
let result = ''
let docNumber = number;
while(docNumber > 0 ){
? ? ? ? let rem? = Math.floor( docNumber % 2);
? ? ? ? rectItems.push(rem);
? ? ? ? docNumber =? Math.floor( docNumber / 2);
}
while(!rectItems.isEmpty()){
result += rectItems.pop();
}
return result;
}
js 中隊(duì)列和雙端隊(duì)列
隊(duì)列是遵循先進(jìn)先出原則一組有序的項(xiàng)埃撵。隊(duì)列在尾部添加新元素,并從頂部移除元素甥材。最新添加的元素必須排在隊(duì)列的末尾盯另。 現(xiàn)實(shí)生活的例子排隊(duì)
創(chuàng)建一個隊(duì)列,實(shí)現(xiàn)如下方法
enqueue(element(s)) :向隊(duì)列尾部添加一個(或多個)新的項(xiàng)
dequeue(): 移除隊(duì)列的第一項(xiàng)(即排在對)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
peek() 返回隊(duì)列中第一個元素-------最先被添加洲赵,也將是最先被移除的元素鸳惯、
isEmpty() 如果隊(duì)列中不包含任何元素,返回true, 否則返回false
size() 返回隊(duì)列的元素格式叠萍,與數(shù)組的length類似
class Queue {
? ? constructor(){
? ? ? ? this.count = 0;
? ? ? ? this.items = {};
? ? ? ? this.lowecount = 0;
? ? }
? ? enqueue(data){
? ? ? this.items[this.count] = data;
? ? ? this.count ++;
? ? }
? ? dequeue(){
? ? ? ? if(this.isEmpty()){
? ? ? ? ? ? return undefined;
? ? ? ? }
? ? ? ? const rel = this.items[this.lowecount];
? ? ? delete? this.items[this.lowecount];
? ? ? this.lowecount ++;
? ? ? ? return rel;
? ? }
? ? isEmpty(){
? ? ? ? return this.count - this.lowecount === 0;
? ? }
? ? size(){
? ? ? ? ? ? return this.count -? this.lowecount
? ? }
? ? peek(){
? ? ? ? ? if(this.isEmpty()){
? ? ? ? ? ? return undefined;
? ? ? ? }
? ? ? ? return this.item[this.lowecoun] ;
? ? }
}
//傳花游戲
function chuanhua(list , num){
? ? let que = new Queue();
let enen = []
? ? list.forEach( d => {
? ? ? ? que.enqueue(d)
? ? })
? ? ? while(que.size() > 1) {
? ? ? ? for(let i = 0; i< num ; i++){
? ? ? ? ? ? que.enqueue(que.dequeue());
? ? ? }
? ? ? ? ? ? enen.push(que.dequeue())
? ? }
? ? return{
? ? ? ? wineer: que.dequeue(),
? ? enen:enen
? ? }
}
console.log(11, chuanhua([1111,2222,3333,444],2))
雙端隊(duì)列