From 23bf19b7fa8511abb37389c4727a2cf32bca40b7 Mon Sep 17 00:00:00 2001 From: S-N-O-R-L-A-X Date: Wed, 21 Dec 2022 16:22:58 +0800 Subject: [PATCH] feat: add linkedlist_stack in ts --- .../linkedlist_stack.ts | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 codes/typescript/chapter_stack_and_queue/linkedlist_stack.ts diff --git a/codes/typescript/chapter_stack_and_queue/linkedlist_stack.ts b/codes/typescript/chapter_stack_and_queue/linkedlist_stack.ts new file mode 100644 index 000000000..0e8b46bc9 --- /dev/null +++ b/codes/typescript/chapter_stack_and_queue/linkedlist_stack.ts @@ -0,0 +1,93 @@ +/** + * File: linkedlist_queue.ts + * Created Time: 2022-12-21 + * Author: S-N-O-R-L-A-X (snorlax.xu@outlook.com) + */ + +import ListNode from "../module/ListNode" + +/* 基于链表实现的栈 */ +class LinkedListStack { + private stackPeek: ListNode | null; // 将头结点作为栈顶 + private stkSize: number = 0; // 栈的长度 + + constructor() { + this.stackPeek = null; + } + + /* 获取栈的长度 */ + get size(): number { + return this.stkSize; + } + + /* 判断栈是否为空 */ + isEmpty(): boolean { + return this.size == 0; + } + + /* 入栈 */ + push(num: number): void { + const node = new ListNode(num); + node.next = this.stackPeek; + this.stackPeek = node; + this.stkSize++; + } + + /* 出栈 */ + pop(): number { + const num = this.peek(); + if (!this.stackPeek) { + throw new Error("栈为空!"); + } + this.stackPeek = this.stackPeek.next; + this.stkSize--; + return num; + } + + /* 访问栈顶元素 */ + peek(): number { + if (!this.stackPeek) { + throw new Error("栈为空!"); + } + return this.stackPeek.val; + } + + /* 将 List 转化为 Array 并返回 */ + toArray(): number[] { + let node = this.stackPeek; + const res = new Array(this.size); + for (let i = res.length - 1; i >= 0; i--) { + res[i] = node!.val; + node = node!.next; + } + return res; + } +} + + +/* 初始化栈 */ +const stack = new LinkedListStack(); + +/* 元素入栈 */ +stack.push(1); +stack.push(3); +stack.push(2); +stack.push(5); +stack.push(4); +console.log("栈 stack = " + stack.toArray()); + +/* 访问栈顶元素 */ +const peek = stack.peek(); +console.log("栈顶元素 peek = " + peek); + +/* 元素出栈 */ +const pop = stack.pop(); +console.log("出栈元素 pop = " + pop + ",出栈后 stack = " + stack.toArray()); + +/* 获取栈的长度 */ +const size = stack.size; +console.log("栈的长度 size = " + size); + +/* 判断是否为空 */ +const isEmpty = stack.isEmpty(); +console.log("栈是否为空 = " + isEmpty);