定义栈
Stack.ts
interface IStack<T> {
push(element: T): void;
pop(): T | undefined;
peek(): T | undefined;
isEmpty(): boolean;
size(): number;
}
class ArrayStack<T = any> implements IStack<T> {
private stack: T[];
constructor() {
this.stack = [];
}
push(element: T): void {
this.stack.push(element);
}
pop(): T | undefined {
return this.stack.pop();
}
peek(): T | undefined {
return this.stack[this.stack.length - 1];
}
isEmpty(): boolean {
return this.stack.length === 0;
}
size(): number {
return this.stack.length;
}
}
export { ArrayStack };
应用
十进制转二进制
DecimalToBinary.ts
import { ArrayStack } from "./Stack";
function DecimalToBinary(decimal: number): string {
const stack = new ArrayStack<number>();
while (decimal > 0) {
let result = decimal % 2;
stack.push(result);
decimal = Math.floor(decimal / 2);
}
let binary = "";
while (!stack.isEmpty()) {
binary += stack.pop();
}
return binary;
}
console.log(DecimalToBinary(15))
有效的括号
IsValid.ts
import { ArrayStack } from "./Stack";
function isValid(str: string): boolean {
let stack = new ArrayStack<string>();
for (let i = 0; i < str.length; i++) {
let c = str[i];
switch (c) (c) {
case "(":
stack.push(")");
break;
case "{":
stack.push("}");
break;
case "[":
stack.push("]");
break;
default:
if (c != stack.pop()) return false;
break;
}
}
if (!stack.isEmpty()) {
return false;
}
return true;
}
console.log(isValid("()(){}[]"));