数据结构篇(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 ...
随机推荐
- 从字符串某位置开始的递增串(dfs)注意for循环中下标的错误
#include <iostream> #include <string> using namespace std; char res[50];int tag=1; void ...
- java == 和 equals
- super.getClass()方法调用?
下面程序的输出结果是多少? import java.util.Date; public class Test extends Date{ public static void main(String[ ...
- 如何进行Hibernate的性能优化?
大体上,对于HIBERNATE性能调优的主要考虑点如下: l 数据库设计调整 l HQL优化 l API的正确使用(如根据不同的业务类型选用不同的集合及查询API) l 主配置参数(日志,查询缓存,f ...
- mysql的cpu飙升原因及处理
Mysql 批量杀死进程 正常情况下kill id,即可,但是有时候某一异常连接特别多的时候如此操作会让人抓狂,下面记录下小方法: use information_schema; select co ...
- GC和GC Tuning
GC和GC Tuning GC的基础知识 什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上简单 ...
- _CrtCheckMemory
参考: _CrtCheckMemory MSDN 堆异常检查-MS vs stdio 编写程序经常会涉及到堆的申请,但是如果你向所申请堆里写数据,超过了你最开始申请的空间是,运行中就会发生中断. _C ...
- 探索前端黑科技——通过 png 图的 rgba 值缓存数据
本文系原创,欢迎转载,转载请注明作者信息项目地址:SphinxJS在线体验地址:https://jrainlau.github.io/sp... 说起前端缓存,大部分人想到的无非是几个常规的方案,比如 ...
- video元素和audio元素相关事件
前言 在利用video元素或audio元素读取或播放媒体数据时,会触发一系列事件,如果用js脚本来捕抓这些事件,就可以对着这些事件进行处理了. 捕抓的方式有两种: 第一种是监听的方式.使用vedio或 ...
- 世界各国 MCC 和 MNC 列表
http://www.cnblogs.com/inteliot/archive/2012/08/22/2651666.html常见MCC:代码(MCC) ISO 3166-1 国家202 ...