面试遇到的问题,当时有点懵 脑袋一片空白,面试完了想了下,我可能是傻了,明明在问这个问题之前面试官问了我字符串都有哪些操作方法!!!我是真鱼吧!
今天看了下《学习JavaScript数据结构与算法》堆栈相关章节,有自挂东南枝的想法。
栈
数据结构有讲过,栈是一种遵从后进先出原则的有序集合,书中对栈的形容非常到位,就像是堆盘子,先放的肯定在下面的位置,最上面的是才放的。给栈内添加元素,最先添加的在栈底,最后一个加进去的称为栈顶元素。
js实现栈及其方法
具体内容有
- 创建栈:在js里我们用数组类比栈
- 向栈里添加元素push()
- 移除元素 delete()
- 栈大小 size()
- 查看栈顶元素 peek()
- 检查栈是否为空 isEmpty()
- 清空栈 empty()
- 打印栈 print()
- 使用
代码
function Stack(){
var stack=[];
this.push=function(para){
stack.push(para);
};
this.delete=function(){
// 删除栈顶元素
stack.pop();//删除数组末尾元素,
}
this.size=function(){
return stack.length;
}
this.peek=function(){
return stack[stack.length-1];
}
this.isEmpty=function(){
if(stack.length==0){
return true;
}else{
return false;
}
}
this.emptyStack=function(){
stack=[];
}
this.print=function(){
return stack.toString();
}
}
使用
var myStack=new Stack();
myStack.push(1);
myStack.push(4);
myStack.push(6);
console.log('删除前栈内元素'+myStack.print());
console.log('删除前栈顶元素'+myStack.peek());
console.log('删除前栈元素size'+myStack.size());
myStack.delete();
console.log('删除后栈内元素'+myStack.print());
console.log('删除后栈顶元素'+myStack.peek());
console.log('删除前栈元素size'+myStack.size());
console.log('栈是否为空'+myStack.isEmpty());
myStack.emptyStack();
console.log('清空栈,栈是否为空'+myStack.isEmpty());
console.log('清空栈,栈元素size'+myStack.size());
队列
先进先出,就像喝孟婆汤要排队一样,先来的排在前面,后面来的就排在队尾,要投胎肯定是前面喝完的人去,操作队列也一样,从队列前面移除元素,从队尾添加元素。和栈的实现大同小异
function Queue(){
var queue=[];
this.push=function(para){
queue.push(para);
}
this.delete=function(){
// 从队首移除,即删除的是数组第一位
queue.shift();
}
this.queueFront=function()