原标题:JavaScript中的数据结构——栈(Stack)和队列(Queue)
栈在Java中的实现和原理
栈(stack),也称堆栈,在计算机科学领域中,栈是一种线性数据结构,它只能在数据串列或阵列的一端进行入栈(push)和出栈(pop)操作,按照后进先出(LIFO)原理进行运作,一张图表示栈的工作如图1:
下面将使用Java实现这一数据结构。
栈的操作
根据栈的工作方式,我们定义栈的两个操作:
1.push(data):加入数据,也称入栈。
2.pop():将最近加入的数据移除,也称出栈。
栈的具体实现
通过使用Java构造函数和原型的方式实现栈的功能。每个构造函数拥有_size和_storage两个属性。
function Stack() { this._size = 0; this._storage = {};}
_storage:存储栈的数据,使用对象作为栈数据的集合;
_size:栈的数据长度,当栈新增加(push)一个数据,时,size长度加1,当栈弹出(pop)一个数据,size长度减1。
有了Stack构造函数,接下来通过原型对象实现push(data)方法(因为push方法时所有栈共有方法,故使用prototype使得该方法共享)。
push(data)方法需要具备以下两个功能:
1.每次增加一个数据,我们希望增加栈的数据长度;
2.每次增加一个数据,我们希望将此数据加在栈的顶端。
具体的代码实现如下:
Stack.prototype.push = function(data) { // 增加数据长度 var size = this._size++; // 将数据加到栈的顶部 this._storage[size] = data;};
push(data)方法之后就是pop()方法,针对pop()的设计思想是:
1.通过栈的当前的长度获取栈顶数据;
2.删除第一步获得的栈顶数据;
3.栈长度size减1;
4.返回弹出栈的数据。
具体的代码实现如下:
Stack.prototype.pop = function() { var s