本文的源码在这里,能够参考一下git
栈也是一种使用很是普遍的线性数据结构,它具备后进先出last in first out
的特色。通俗的例子就像咱们平时一本一本的往上放书,等到咱们又想用书时,咱们首先接触到的老是咱们最后一本放上去的书。
栈的添加和删除操做老是在栈的一端完成,这一端被称为栈顶
,对于栈的实现,我会采用上一篇中实现的数组做为底层的数据结构,全部栈的操做都会在这个底层的数组中完成。栈的主要操做有两个,一个是入栈,一个是出栈
首先咱们会定义一个TypeScript接口,这个接口会包含基础的栈类的实现github
interface Stack<E> { getSize(): number; // 获取栈中元素的个数 isEmpty(): boolean; // 判断栈是否为空 push(e: E): void; // 入栈一个元素 pop(): E; // 出栈一个元素 peek(): E; // 查看栈顶元素 }
再来看看咱们类的实例属性和构造函数,其中MyArray就是上一篇中实现的数组数组
class ArrayStack<E> implements Stack<E> { private array: MyArray<E>; constructor(capacity: number = 10) { this.array = new MyArray<E>(capacity); } }
在有以前数组的基础上,入栈也是一个很是简单的过程,时间复杂度是O(1)
数据结构
public push(e: E): void { this.array.addLast(e); }
出栈也是一个时间复杂度为O(1)
的操做函数
public pop(): E { return this.array.removeLast(); }
更多相关数据结构,能够前往个人github。持续更新中,喜欢的话给个star~this