在上一篇文章中我们用ts实现了一个双向链表的功能
在这篇文章中,我们使用ts来实现一个栈结构和队列结构
栈结构
- 特点 :一种后进先出的操作受限的线性表。只允许在一端(栈顶)进行插入(入栈/Push)和删除(出栈/Pop)操作。
- 场景:函数调用栈、表达式求值、括号匹配、浏览器前进/后退功能。
对于栈结构里面的元素储存,我们可以使用一个数组来表示
ts
class Stack<T> {
private items: T[];
constructor() {
this.items = [];
}
}
接下来设计栈结构的方法
push(item: T)
- 将元素添加到栈顶pop(): T | undefined
- 移除并返回栈顶元素peek(): T | undefined
- 查看栈顶元素而不移除它isEmpty(): boolean
- 检查栈是否为空size(): number
- 获取栈中元素数量clear(): void
- 清空栈toString(): string
- 将栈内容转换为字符串
栈结构代码实现
添加元素
ts
/**
* 将元素压入栈顶
* @param item 要添加的元素
*/
push(item: T): void {
this.items.push(item);
}
获取栈顶元素
ts
/**
* 弹出栈顶元素
* @returns 栈顶元素或undefined(如果栈为空)
*/
pop(): T | undefined {
return this.items.pop();
}
查看栈顶元素
ts
/**
* 查看栈顶元素而不移除它
* @returns 栈顶元素或undefined(如果栈为空)
*/
peek(): T | undefined {
return this.items[this.items.length - 1];
}
其他功能函数
ts
/**
* 检查栈是否为空
* @returns 如果栈为空返回true,否则返回false
*/
isEmpty(): boolean {
return this.items.length === 0;
}
/**
* 返回栈的大小
* @returns 栈中元素的数量
*/
size(): number {
return this.items.length;
}
/**
* 清空栈
*/
clear(): void {
this.items = [];
}
/**
* 将栈转换为字符串
* @returns 栈的字符串表示
*/
toString(): string {
return this.items.toString();
}
队列结构
-
特点 :一种先进先出的操作受限的线性表。只允许在一端(队尾)进行插入(入队/Enqueue),在另一端(队头)进行删除(出队/Dequeue)。
-
常见变种:
- 双端队列:两端都允许进行插入和删除操作。
- 优先队列 :出队顺序由元素的"优先级"决定,通常用堆来实现。
-
场景:任务调度、消息队列、广度优先搜索(BFS)。
和栈结构类似,对于队列结构里面的元素储存,我们也是使用一个数组来表示
ts
class Queue<T> {
private items: T[];
constructor() {
this.items = [];
}
}
队列内部所包含的方法如下
enqueue(item: T)
- 将元素添加到队列末尾dequeue(): T | undefined
- 移除并返回队列的第一个元素peek(): T | undefined
- 查看队列的第一个元素而不移除它isEmpty(): boolean
- 检查队列是否为空size(): number
- 获取队列中元素数量clear(): void
- 清空队列toString(): string
- 将队列内容转换为字符串
队列结构代码实现
添加元素
ts
/**
* 将元素添加到队列末尾
* @param item 要添加的元素
*/
enqueue(item: T): void {
this.items.push(item);
}
获取元素
ts
/**
* 移除并返回队列的第一个元素
* @returns 队列的第一个元素或undefined(如果队列为空)
*/
dequeue(): T | undefined {
return this.items.shift();
}
查看首个元素
ts
/**
* 查看队列的第一个元素而不移除它
* @returns 队列的第一个元素或undefined(如果队列为空)
*/
peek(): T | undefined {
return this.items[0];
}
其他功能函数
ts
/**
* 检查队列是否为空
* @returns 如果队列为空返回true,否则返回false
*/
isEmpty(): boolean {
return this.items.length === 0;
}
/**
* 返回队列的大小
* @returns 队列中元素的数量
*/
size(): number {
return this.items.length;
}
/**
* 清空队列
*/
clear(): void {
this.items = [];
}
/**
* 将队列转换为字符串
* @returns 队列的字符串表示
*/
toString(): string {
return this.items.toString();
}