栈的JS实现
2024-10-08 12:18:47
栈,是一种特殊的线性表,其插入及删除的操作都在线性表的同一端进行。这一端称为栈顶,另一端称为栈底。就类似于餐厅里的一摞盘子,后放的盘子在上方,也会先被人拿走。栈具有“后进先出”的逻辑特性。栈在计算机科学中有着广泛的应用,递归函数的实现就利用了栈这种数据结构,在递归时,计算机会维护一个递归工作栈,当一个递归函数被调用时,被调函数的局部变量、形参的值以及一个返回地址就会储存在递归工作栈中。运行时按照后进先出的顺序,进行函数执行,完成递归操作。编译原理中也多次使用栈这种数据结构~
栈是一种特殊的线性表,故其在存储结构上也有链式存储和顺序存储两种。代码如下:
/*链栈的JS实现*/
function LinkedStack(){
//节点结构定义
var Node = function(element){
this.element = element;
this.next = null;
} var length = 0,
top; //栈顶指针
//压栈操作
this.push = function(element){
var node = new Node(element),
current; if(!top){
top = node;
length++;
return true;
}else{
node.next = top;
top = node;
length++;
return true;
}
}
//退栈操作
this.pop = function(){
var current = top;
if(top){
top = current.next;
current.next = null;
length--;
return current;
}else{
return 'null stack';
}
}
//获取栈顶节点
this.top = function(){
return top;
}
//获取栈长
this.size = function(){
return length;
} this.toString = function(){
var string = '',
current = top; while(current){
string += current.element;
current = current.next;
} return string;
}
//清空栈
this.clear = function(){
top = null;
length = 0; return true;
}
} //顺序栈的JS实现 这里直接使用了JS内置的Array对象
function ArrayStack(){
var arr = [];
//压栈操作
this.push = function(element){
arr.push(element);
}
//退栈操作
this.pop = function(){
return arr.pop();
}
//获取栈顶元素
this.top = function(){
return arr[arr.length-1];
}
//获取栈长
this.size = function(){
return arr.length;
}
//清空栈
this.clear = function(){
arr = [];
return true;
} this.toString = function(){
return arr.toString();
}
}
最新文章
- HTML文档声明
- Android之ContentProvider数据存储
- Android的编码规范
- lightoj1348
- 你还记得windows workflow foundation吗
- Microsoft.Owin.Hosting 实现启动webapp.dll
- [算法] 高斯消元法 列主消元法 C++ 代码
- qTip2 精致的jQuery提示信息插件
- opencv提取截获图像(总结摘来)
- HDU 5680 zxa and set (数学 推导结论)
- Git教程(11)把本地的项目传到远程
- Robot Framework之测试用例分层实战
- Ajaxpro使用的方法
- 1. ELK 之elasticsearch 简介、获取、安装
- [每天解决一问题系列 - 0005] WiX Burn 如何校验chained package的合法性
- Zookeeper入门(二)之基础
- 中南月赛 1313: ZZY的宠物
- C# 重命名文件
- 使用Verilog描述RTL图
- Oracle基础 10 表 table
热门文章
- Apache commons-configuration setDelimiterParsingDisable不生效的处理
- web自动化工具-Browsersync
- Dotnet文件格式解析
- Java课程设计--山寨版QQ
- 【openStack】Libcloud 如何支持 keystone V3?
- Docker - Dockerizing applications: A “Hello world”
- Python3.5在Windows 7下连接ORACLE数据库
- 如何封装JS ----》JS设计模式《------ 封装与信息隐藏
- python 旋转数组
- .net MVC 简单图片上传