这里写自定义目录标题
前言
栈和队列的定义和作用我就不多说了,网上有很多博客说,我这里附上两个链接吧。
各种数据结构的时间复杂度分析
数据结构大梳理
Typescript中的栈和队列
不多说,直接上代码
队列
/**
* 队列的实现
* 先进先出
*/
export class Queue<T>
{
private elements:Array<T>;
private _size:number| undefined;
public constructor(capacity?:number)
{
this.elements=new Array<T>();
this._size=capacity;
}
/**
* 添加元素到数组的开始位置
* @param o 要添加的元素
*/
public push(o:T)
{
if(o==null) return false;
if(this._size!=undefined && !isNaN(this._size))
{
if(this.elements.length==this._size)
this.pop();
}
this.elements.unshift(o);
return true;
}
/**
* 获取数组最先进入的元素
*/
public pop(): T
{
return this.elements.pop();
}
public size():number
{
return this.elements.length;
}
public empty():boolean
{
return this.size()==0;
}
public clear()
{
delete this.elements;
this.elements=new Array<T>();
}
}
栈
/**
* 栈的实现
* 后进先出
*/
export class Stack<T>
{
private elements:Array<T>;
private _size:number;
public constructor(capacity:number=10)
{
this.elements=new Array<T>(capacity);
this._size=0;
}
/**
* 入栈
* @param o 要添加的元素
*/
public push(o:T)
{
let len=this.elements.length;
if(this._size>=len)
{
let temp=new Array<T>(len);
this.elements=this.elements.concat(temp);
}
this.elements[this._size++]=o;
}
/**
* 出栈并删除
*/
public pop():T
{
return this.elements[--this._size];
}
/**
* 获得最后一个元素,并不删除
*/
public peek():T
{
return this.elements[this._size-1];
}
/**
* 栈元素数量
*/
public size():number
{
return this._size;
}
/**
* 栈是否为空
*/
public empty():boolean
{
return this._size===0;
}
/**
* 清除栈
* @param capacity 容量
*/
public clear(capacity:number=10)
{
delete this.elements;
this.elements=new Array(capacity);
this._size=0;
}
}