数据结构篇(1) ts实现栈的基本操作和解决相关问题
interface Stack {
_items: any
push(element: any): void
pop(): any
top(): any
size(): any
isEmpty(): any
clear(): any
}
//用Symbol添加私有属性
class Stack {
_items: any = Symbol()
constructor() {
this._items = []
}
push(element: any): void {
this._items.push(element);
}
pop(): any {
let r: any = this._items.pop();
return r;
}
size(): number {
return this._items.length;
}
top(): number {
return this._items[this.size() - 1];
}
isEmpty(): boolean {
if (this._items.length === 0) {
return true;
}
return false;
}
clear() {
this._items = [];
}
}
let newStack = new Stack();
//十进制转换二进制
function devideBy2(num: any): void {
while (num != 0) {
newStack.push(num % 2);
num = num / 2;
num = parseInt(num);
}
let num2 = 0;
while ((num2 = newStack.pop()) != null) {
console.log(num2)
}
}
//const opens = ``
//const closers = `)]}`
//平衡括号 正常方法
/**
function balancedSymbols(symbols:string) {
let index:number = 0;
let balanced:boolean = true;
let symbol:string = symbols[index];
while(index<symbols.length&&balanced) {
if(symbol === "[" || symbol === "("|| symbol === "{") {
newStack.push(symbol);
} else {
switch(symbol) {
case "]": {
if(newStack.pop() != '[') {
return false;
}
break;
}
case "}": {
if(newStack.pop() != '{') {
return false;
}
break;
}
case ")": {
if(newStack.pop() != '(') {
return false;
}
break;
}
}
}
symbol = symbols[++index];
}
return true;
}
*/
//递归实现
function balancedSymbols(symbols: string): any {
if(!symbols.length) {
return true;
}
let symbol: string = symbols.slice(0, 1);
symbols = symbols.slice(1);
switch (symbol) {
case '(': case '[': case '{': {
console.log(symbol)
newStack.push(symbol);
break;
}
case ')': {
if (newStack.pop() != '(') {
return false;
}
break;
}
case ']': {
if (newStack.pop() != '[') {
return false;
}
break;
} case '}': {
if (newStack.pop() != '{') {
return false;
}
break;
}
}
return balancedSymbols(symbols);
}
devideBy2(10);
console.log(balancedSymbols('([{])'))
数据结构篇(1) ts实现栈的基本操作和解决相关问题的更多相关文章
- 数据结构篇(2) ts实现单循环链表
JS的class可以通过extends关键字实现类似其他语言的继承效果,比起使用一个extends关键字,在es5中实现继承要复杂一些,可以通过修改原型链的方法实现继承,让一个原型对象等于另一个类型的 ...
- 数据结构篇(3)ts 实现双向链表
如今终于到了双向链表了,此前在Node结构中的prev指针终于派上了用场.由于双向链表多了一个前向指针,所以有些操作和单向链表比较起来反而更加的简单. class DbList extends Cir ...
- 数据结构篇(2) ts实现单链表
interface NodeItem { prev: NodeItem | null next: NodeItem | null data: any } class NodeItem { prev: ...
- C++ 栈的基本操作
// zhan.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namesp ...
- 顺序栈的基本操作(C语言)
由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址 但是这种用法好像C并不 ...
- 菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t
菜鸟nginx源代码剖析数据结构篇(九) 内存池ngx_pool_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...
- 菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t[转]
菜鸟nginx源码剖析数据结构篇(九) 内存池ngx_pool_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn. ...
- SDUT-3335_数据结构实验之栈与队列八:栈的基本操作
数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具 ...
- 菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t
菜鸟nginx源代码剖析数据结构篇(一)动态数组ngx_array_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csd ...
随机推荐
- var、let和const区别
var.let和const区别 变量提升问题 var声明的变量存在变量提升,而let与const声明的变量不存在变量提升,但存在暂时性死区 即在预编译阶段,js引擎扫描代码时,遇到变量声明,会把var ...
- 常用的jdbc的Druid连接池配置
spring: datasource: username: root password: 888888 url: jdbc:mysql://localhost:3306/mybatis driver- ...
- React优点?
声明式, 组件化, 一次学习, 随处编写. 灵活, 丰富, 轻巧, 高效
- spring-boot中的AOP
public class User { private Integer id; private String username; private String note; public User(In ...
- maven项目改造成springboot项目
springboot项目其实归根到底就是一个maven项目,通常我们创建springboot项目,只要使用idea中的spring Initializr就可以创建就可以了. 今天我们来讲下如何改造一个 ...
- Linux 搭建Apollo
简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...
- python udp socket通信
前段时间学习了一下c++的socket通信,但发现那玩意儿比较复杂还是转向python了,下面就是一个简单的udpsocket通信程序,欢迎大佬前来指正 udp聊天 import socket # 创 ...
- 一次关于关系抽取(RE)综述调研的交流心得
本文来自于一次交流的的记录,{}内的为个人体会. 基本概念 实事知识:实体-关系-实体的三元组.比如, 知识图谱:大量实时知识组织在一起,可以构建成知识图谱. 关系抽取:由于文本中蕴含大量事实知识,需 ...
- H5扇形
使用H5 canvas绘制的可交互扇形 requestAnimationFrame() 现有动画实现方式的不足 setTimeout和setInterval都不十分精确.为它们传入的第二个参数,实际上 ...
- js随手笔记-------理解JavaScript碰撞检测算法核心简单实现原理
碰撞检测在前端游戏,设计拖拽的实用业务等领域的应用场景非常广泛,今天我们就在这里对于前端JavaScript如何实现碰撞检测算法进行一个原理上的探讨,让大家能够明白如何实现碰撞以及碰撞的理念是什么:1 ...