栈栈是一种遵循后入先出(LIFO,全称LastInFirstOut)的数据结构,是一种运算受限的线性表,其限制是仅允许在表的一端进行操作,这一端被称之为栈顶。
由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问,如果要访问栈底的元素,必须先移除上面的元素。
栈的实现在JavaScript中,采用数组座位存储数据的底层数据结构。
定义Stack构造函数
functionStack(){
this.items=[];
}
栈具有以下方法
push()进栈
pop()退栈
size()栈大小
empty()判断栈是否为空
peek()返回栈顶元素
clear()清空栈
push向栈中压入新元素时,元素位于当前栈顶指针所对应的位置,压入后,栈顶指针应指向下一个位置
functionpush(item){
this.items[this.top++]=item;
}
poppop与push方法相反,返回栈顶元素,同时top的值减1
functionpop(){
if(this.top===0)return;
varitem=this.items[this.top-1]
this.items.length=--this.top;
returnitem;
}
sizesize方法返回栈内的元素个数
functionsize(){
returnthis.top;
}
empty检查栈是否为空,为空则返回true,否则返回false
functionempty(){
returnthis.top===0;
}
peek返回栈顶元素
functionpeek(){
returnthis.items[this.top-1];
}
clear清空栈内所有元素
functionclear(){
this.items=[];
this.top=0;
}
给栈添加方法利用原型将以上方法添加给Stack构造函数
Stack.prototype={
constructor:Stack,
push:push,
pop:pop,
size:size,
empty:empty,
peek:peek,
clear:clear,
}
栈的实际应用下面是一个递归函数,用来计算数字的阶乘
functionfactorial(n){
if(n===0){
return1;
}else{
returnn*factorial(n-1);
}
}
使用该函数计算5的阶乘
factorial(5)//
如果使用栈来模拟计算5!的过程,将5到1依次压入栈,然后再将数字依次弹出连乘,即可得到计算结果
functionfactorial2(n){
vars=newStack(),
result=1;
while(n1){
s.push(n--)
}
while(s.size()0){
result*=s.pop()
}
returnresult;
}
使用该函数计算5的阶乘
factorial(5)//
小拳拳捶你胸口
赞赏
人赞赏
北京治疗白癜风医院那里好治疗白癜风哪里好啊