JavaScript数据结构与算法
1. 栈结构
数组
- 我们知道数组是一种线性结构, 并且可以在数组的任意位置插入和删除数据.
- 但是有时候, 我们为了实现某些功能, 必须对这种任意性加以限制.
- 而栈和队列就是比较常见的受限的线性结构, 我们先来学习栈结构.
栈(stack),它是一种运算受限的线性表,后进先出(LIFO)
- LIFO(last in first out)表示就是后进入的元素, 第一个弹出栈空间. 类似于自动餐托盘, 最后放上的托盘, 往往先把拿出去使用.
- 其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
- 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
- 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
2. 栈结构的实现
-
栈的常见操作
-
push(element):添加一个新元素到栈顶位置。
-
pop():移除栈顶的元素,同时返回被移除的元素.
-
peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)
-
isEmpty():如果栈里没有任何元素就返回true,否则返回false
-
size():返回栈里的元素个数。这个方法和数组的length属性类似
-
toString():将栈结构的内容以字符形式返回
// 栈类 function Stack() { // 栈中的属性 var items = [] // 栈相关的方法 // 压栈操作 this.push = function (element) { items.push(element) } // 出栈操作 this.pop = function () { return items.pop() } // peek操作 this.peek = function () { return items[items.length - 1] } // 判断栈中的元素是否为空 this.isEmpty = function () { return items.length == 0 } // 获取栈中元素的个数 this.size = function () { return items.length } }
-
3. 队列
-
队列的常见操作
-
enqueue(element):向队列尾部添加一个(或多个)新的项
-
dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素
-
front():返回队列的第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息——与stack类的peek方法类似)
-
isEmpty():如果队列中不包含任何元素,返回true,否则返回false
-
size():返回队列包含的元素个数,与数组的length属性类似
-
toString():将队列的内容,转成字符串形式
// 自定义队列 function Queue() { var items = [] // 队列操作的方法 // enter queue方法 this.enqueue = function (element) { items.push(element) } // delete queue方法 this.dequeue = function () { return items.shift() } // 查看前端的元素 this.front = function () { return items[0] } // 查看队列是否为空 this.isEmpty = function () { return items.length == 0 } // 查看队列中元素的个数 this.size = function () { return items.length } }
-
posted on
浙公网安备 33010602011771号