1. 栈stack
栈是一种从后进先出原则的有序集合。新添加或待删除的元素都保存再栈的同一端,称作栈顶,另一端叫做栈底。在栈里,新元素都是靠近栈顶,旧元素都接近栈底, 例子:一摞书
创建一个基于数组的栈
需要提供一下功能
push(element(s)) : 添加一个(或几个)新元素到栈顶
pop() : 移除栈顶的元素,同时返回被移除的元素
peek() :返回栈顶的元素,不对栈做任何修改
isEmpty(): 如果栈里面没有任何元素就返回true,否则就返回fasle
clear(): 移除栈里面的所有元素
size(): 返回栈里面的元素个数
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;
}
}
应用的中例子,将十进制转二进制
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 中队列和双端队列
队列是遵循先进先出原则一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。 现实生活的例子排队
创建一个队列,实现如下方法
enqueue(element(s)) :向队列尾部添加一个(或多个)新的项
dequeue(): 移除队列的第一项(即排在对)
peek() 返回队列中第一个元素-------最先被添加,也将是最先被移除的元素、
isEmpty() 如果队列中不包含任何元素,返回true, 否则返回false
size() 返回队列的元素格式,与数组的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))
双端队列