数组实现栈
// 使用泛型
// 没有传类型,默认是string
class Stack<T = string> {
private data: T[] = []
push(element: T): void {
this.data.push(element)
}
// 这里是联合类型
pop(): T | undefined {
return this.data.pop()
}
peek(): T | undefined {
return this.data[this.data.length - 1]
}
isEmpty(): boolean {
return this.data.length === 0
}
size(): number {
return this.data.length
}
}
const stack1 = new Stack<string>()
stack1.push('aaa')
// stack1.push(2) 这时就会报错,因为不符合string类型
console.log(stack1)
console.log(stack1.isEmpty())
export default Stack;
链表实现栈
定义栈结构,ts文件
// 定义栈结构
interface IStack<T> {
push(element: T): void
pop(): T | undefined
peek(): T | undefined
isEmpty(): boolean
size(): number
}
export default IStack
使用链表实现
import IStack from "./IStack";
// IStack实现了IStack接口,接口里面定义的方法都要实现
// 可以点击“快速修复”来实现
class ArrayStack<T = string> implements IStack<T> {
private data: T[] = []
push(element: T): void {
this.data.push(element)
}
// 这里是联合类型
pop(): T | undefined {
return this.data.pop()
}
peek(): T | undefined {
return this.data[this.data.length - 1]
}
isEmpty(): boolean {
return this.data.length === 0
}
size(): number {
return this.data.length
}
}
const stack1 = new ArrayStack<string>()
stack1.push('aaa')
// stack1.push(2) 这时就会报错,因为不符合string类型
console.log(stack1)
console.log(stack1.isEmpty())
export { }
十进制转二进制
import ArrayStack from '数组实现栈'
function decimalToBinary(decimal: number): string {
// 创建一个栈,用于存放余数
const stack = new ArrayStack<number>()
// 使用循环。while:不确定次数,只知道循环结束跳转;for:知道循环的次数
while (decimal > 0) {
const res = decimal % 2
stack.push(res)
decimal = Math.floor(decimal / 2)
}
// 所有余数放在stack中,依次取出。
let binary = ""
while (!stack.isEmpty()) {
binary += stack.pop()
}
return binary
}
console.log(decimalToBinary(35)) // 100011
console.log(decimalToBinary(100)) // 1100100