JavaScript 算法 1_1 下压堆栈 (链表实现)
2021-01-14 13:26
155 查看
JavaScript 算法 1_1 下压堆栈 (链表实现)
链表是一种递归的数据结构
[TOC]
1. 节点结构
node = { ele: null, next: null, }
这里使用了 ele 作为一个节点的元素内容, next 作为下个节点的索引
2. 构造链表
let next = {}; Object.assign(next, {ele:null, next:null}); next.ele = item;
使用了 Object.assign 函数复制了节点结构
3. 从表头插入和删除元素
push(item){ let oldFirst = this.first; let next = {}; Object.assign(next, {ele: null, next: null}); next.ele = item; this.first = next; this.first.next = oldFirst; this.count++; } pop(){ let top = this.first.ele; this.first = this.first.next; this.count--; return top; }
- 插入时先保存栈顶元素到 oldFirst, 后创建 next 节点, 置为栈顶
- 删除时移除栈顶元素并返回
4. 代码实现
链表类
// 类定义 class Stack{ constructor() { // 栈顶元素, 包括 next 和 ele this.first = null; this.count = 0; } isEmpty(){ return this.count === 0; } size(){ return this.count; } push(item){ let oldFirst = this.first; let next = {}; Object.assign(next, {ele: null, next: null}); next.ele = item; this.first = next; this.first.next = oldFirst; this.count++; } pop(){ let top = this.first.ele; this.first = this.first.next; this.count--; return top; } // 下回分解迭代器 // [Symbol.iterator](){ // // } }
使用方式
const stack = new Stack(); // 可以使用任意类型放入 stack.push(20); stack.push('小歪'); stack.push([20, 30]); stack.push({name: '张三'}); let pop = stack.pop(); // pop: { name: '张三' } pop = stack.pop(); // [ 20, 30 ] pop = stack.pop(); // 小歪 pop = stack.pop(); // 20 console.log(stack); // Stack { first: null, count: 0 }
代码可以按要求运行 √
相关文章推荐
- 数据结构与算法-----堆栈-使用链表(链式结构)实现
- JavaScript 算法 1_2 先进先出队列 (链表实现)
- 数据结构与算法 JavaScript实现 —— 链表
- 算法复习(5)链表实现的堆栈
- 翻转链表的算法实现
- 算法实现----链表(六)
- 【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】
- 模式匹配算法以及KMP的javascript实现
- 无序符号表(链表实现,JAVA,算法(四))
- 算法-javascript自实现继承extend(单次继承原型对象和单次继承构造函数)
- 二元查找树转变成排序的双向链表之C#算法实现
- 【算法题】使用递归和非递归实现单向链表的转置
- 人见人爱A-B(链表的算法实现)
- 基本算法实现小结(一)—— 单链表
- 链表经典算法题实现
- 算法:一元多项式的表示及相加(链表实现)-数据结构(4)
- 堆栈之链表实现
- 每天一算法(一)——用链表实现加减乘运算
- 【LeetCode-面试算法经典-Java实现】【143-Copy List with Random Pointer(有随机指针的链表复制)】
- JavaScript实现算术平方根算法-代码超简单