使用TypeScript实现栈

152 阅读1分钟

数组实现栈

// 使用泛型

// 没有传类型,默认是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