JS数据结构及算法(一) 堆栈
最近在看《学习JavaScript数据结构与算法》这本书,感觉自己又涨知识了 哈哈... 现在将自己看的做个总结,也是巩固理解。
栈:先进后出,新添加和待删除的元素都保存在栈顶。可以用数组的push方法入栈,pop出栈。
class Stack {
constructor () {
this.items = [];
}
push(element){
this.items.push(element);
}
pop(){
return this.items.pop();
}
peek(){
return this.items[this.items.length-1];
}
isEmpty(){
return this.items.length == 0;
}
size(){
return this.items.length;
}
clear(){
this.items = [];
}
print(){
console.log(this.toString());
}
toString(){
return this.items.toString();
}
}
栈的实际应用:二进制转十进制、十进制转换任意进制(二进制、八进制、十六进制);平衡圆括号、汉诺塔问题
/**
* 十进制转二进制
* @param num --十进制数据
* @returns {string} 转换后的二进制数
*/
function devideBy2(num) {
let stack = new Stack();
let rem;
let binaryStr='';
while(num>0){
rem = num%2;
stack.push(rem);
num = Math.floor(num/2);
}
while (!stack.isEmpty()){
binaryStr +=stack.pop().toString();
}
return binaryStr;
} /**
* 十进制转换为任意进制
* @param num
* @param base
* @returns {string}
*/
function baseConvert(num,base) {
let stack = new Stack();
let rem;
let baseStr='';
let digit='0123456789ABCDEF'; //十六进制会转换
while(num>0){
rem = num%base;
stack.push(rem);
num = Math.floor(num/base);
}
while (!stack.isEmpty()){
baseStr +=digit[stack.pop()];
}
return baseStr;
}
检查括号是否匹配:左括号入栈,当检测到右括号时,进行出栈,看出栈的左括号与右括号是否可以配对,以此类推,直到栈为空。
/**
* 括号配对
* @param str 包含括号的字符串
* @returns {boolean|*} 配对成功返回true,失败返回false
*/
function checkSymbol(str) {
let openers = '([{',
closers = ')]}',
balanced = true,
index = 0,
tmp,
stack = new Stack(),
arr = str.split('');
while (balanced && index < arr.length) {
if (openers.indexOf(arr[index]) !== -1) {
stack.push(arr[index]); //左括号入栈
}
else {
if (stack.isEmpty()) {
balanced = false;
}
else {
tmp = stack.pop();
if (openers.indexOf(tmp) !== closers.indexOf(arr[index])) {
balanced = false;
}
} }
index++;
}
return (balanced && stack.isEmpty());
}
JS数据结构及算法(一) 堆栈的更多相关文章
- 数据结构和算法 – 3.堆栈和队列
1.栈的实现 后进先出 自己实现栈的代码 using System; using System.Collections.Generic; using System.Linq; using ...
- JS数据结构与算法——栈
JS数据结构与算法--栈 1.栈结构概念 栈(Stack)是一种先进后出(LIFO Last in First out)的线性表,先进栈的将会比后进栈的先出栈. 栈的限制是仅允许在一端进行插入和删除运 ...
- JS数据结构与算法-概述
JS数据结构与算法概述 数据结构: 计算机存储, 组织数据的方式, 就像锅碗瓢盆 算法: 一系列解决问题的清晰指令, 就像食谱 两者关系: 程序 = 数据结构 + 算法 邂逅数据结构与算法 什么是数据 ...
- JS数据结构与算法--双向链表
双向链表中链接是双向的:一个链向下一个元素,另一个链向上一个元素,如下图所示: 双向链表结构代码如下: class Node { constructor(element) { this.element ...
- JS数据结构及算法(二) 队列
队列是遵循先进先出的一种数据结构,在尾部添加新元素,并从顶部移除元素. 1.普通队列 function Queue() { this.items = []; } Queue.prototype = { ...
- 用Python实现的数据结构与算法:堆栈
一.概述 堆栈(Stack)是一种后进先出(LIFO)的线性数据结构,对堆栈的插入和删除操作都只能在栈顶(top)进行. 二.ADT 堆栈ADT(抽象数据类型)一般提供以下接口: Stack() 创建 ...
- js数据结构与算法存储结构
数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间 ...
- js数据结构与算法--单链表的实现与应用思考
链表是动态的数据结构,它的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 现实中,有一些链表的例子. 第一个就是寻宝的游戏.你有一条线索,这条线索是指向寻找下一条线 ...
- JS数据结构与算法 - 剑指offer二叉树算法题汇总
❗❗ 必看经验 在博主刷题期间,基本上是碰到一道二叉树就不会碰到一道就不会,有时候一个下午都在搞一道题,看别人解题思路就算能看懂,自己写就呵呵了.一气之下不刷了,改而先去把二叉树的基础算法给搞搞懂,然 ...
随机推荐
- Robot Frame应用实例讲解
关键字与变量 内置库(build in)关键字 要使用的其它库关键字(学会看文档)
- ubuntu 设置字符集 locale(解决乱码问题)
1.locale 查看现在的locale配置环境 2.localepurge 配置需要的locale(如果没有这个命令,用apt-get install localepurge安装) 3.locale ...
- AspNet Zero Core
解决AspNet Zero Core 5.0.1无法运行的问题 最近在研究AspNet Zero Core 5.0.1时发现VS点击调试后就自动退出了,从ABP QQ群里得知作者加入了licens ...
- keil-rtx
OS:任务级设计,任务间耦合小:改变裸机前后台设计方案中后台任务轮训无优先级重要任务得不到确定性响应:伪并行,提高利用率. 在keilv4.74最后一个版本之后,KIELV5将KEIL-RTX该为CM ...
- scp 可以在 2个 linux 主机间复制文件
Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程.从远程复制到本地是两种使用方式.这里有具体举例: ================== Linu ...
- 七,JOBC数据库编程
七,JOBC数据库编程 七,JOBC数据库编程 一,java数据库编程步骤 1,将数据库驱动包考入lib目录: 2,加载驱动--整个操作数据库程序运行期间只需要加载一次 Class.forName(& ...
- .net程序员业余Android开发赚点外快(介绍一下自己的经验)
记得是11年10月份开始研究android的,当时还不会java,听说android比较火,自己也买了个垃圾android机,平时工作也不是特别忙,于是我就突发奇想,想试试做一下android应用可不 ...
- sql 容易被忽视的点
1 dual select查询语句只有select就可以,但为了规范,凑结构,可以加个dual 例:select now() from dual; 这个概念是Oracle中的.在mysql中可写可不写 ...
- gulp运行步骤
一.运行→输入cmd→跳出命令窗口二.cd D: 敲回车进入D盘,cd www 进入项目路径 cd mygulp三.执行 cnpm install gulp --save-dev 命令 (初始化安装g ...
- 'gets' undeclared here (not in a function)
原文:http://www.cnblogs.com/hjj801006/p/3988220.html 1.在命令行输入:find -name stdio.in.h.查到有两个文件中含有stdio.in ...