栈,是一种特殊的线性表,其插入及删除的操作都在线性表的同一端进行。这一端称为栈顶,另一端称为栈底。就类似于餐厅里的一摞盘子,后放的盘子在上方,也会先被人拿走。栈具有“后进先出”的逻辑特性。栈在计算机科学中有着广泛的应用,递归函数的实现就利用了栈这种数据结构,在递归时,计算机会维护一个递归工作栈,当一个递归函数被调用时,被调函数的局部变量、形参的值以及一个返回地址就会储存在递归工作栈中。运行时按照后进先出的顺序,进行函数执行,完成递归操作。编译原理中也多次使用栈这种数据结构~

栈是一种特殊的线性表,故其在存储结构上也有链式存储和顺序存储两种。代码如下:

/*链栈的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();
}
}

最新文章

  1. HTML文档声明
  2. Android之ContentProvider数据存储
  3. Android的编码规范
  4. lightoj1348
  5. 你还记得windows workflow foundation吗
  6. Microsoft.Owin.Hosting 实现启动webapp.dll
  7. [算法] 高斯消元法 列主消元法 C++ 代码
  8. qTip2 精致的jQuery提示信息插件
  9. opencv提取截获图像(总结摘来)
  10. HDU 5680 zxa and set (数学 推导结论)
  11. Git教程(11)把本地的项目传到远程
  12. Robot Framework之测试用例分层实战
  13. Ajaxpro使用的方法
  14. 1. ELK 之elasticsearch 简介、获取、安装
  15. [每天解决一问题系列 - 0005] WiX Burn 如何校验chained package的合法性
  16. Zookeeper入门(二)之基础
  17. 中南月赛 1313: ZZY的宠物
  18. C# 重命名文件
  19. 使用Verilog描述RTL图
  20. Oracle基础 10 表 table

热门文章

  1. Apache commons-configuration setDelimiterParsingDisable不生效的处理
  2. web自动化工具-Browsersync
  3. Dotnet文件格式解析
  4. Java课程设计--山寨版QQ
  5. 【openStack】Libcloud 如何支持 keystone V3?
  6. Docker - Dockerizing applications: A “Hello world”
  7. Python3.5在Windows 7下连接ORACLE数据库
  8. 如何封装JS ----》JS设计模式《------ 封装与信息隐藏
  9. python 旋转数组
  10. .net MVC 简单图片上传