前言
不间断更新数据结构学习内容,在这边作为笔记阅览学习。
一. 线性数据结构
线性数据结构包括:
- 数组(Array):由相同类型的元素按照顺序存储在一段连续的内存空间中。
- 链表(Linked List):由节点组成,每个节点包含数据和指向下一个节点的指针。
- 栈(Stack):具有后进先出(LIFO)的特性,只能在栈顶进行插入和删除操作。
- 队列(Queue):具有先进先出(FIFO)的特性,只能在队尾插入元素,在队头删除元素。
- 双端队列(Deque):是一种具有队列和栈特性的数据结构,可以在两端进行插入和删除操作。
- 哈希表(Hash Table):根据键(Key)和值(Value)的映射关系进行高效的数据访问。
- 向量(Vector):类似于动态数组,可以在末尾插入和删除元素,支持随机访问。
- 字符串(String):由字符组成的线性序列,常用于表示文本。
数组是可以在任意位置插入的线性结构,栈和队列是比较常见受限的数据结构,先学习简单的栈数据结构。
二. 栈
答案:C
三. 栈的实现
- Push(入栈):将元素插入到栈顶。
- 参数:待插入的元素。
- 功能:将元素添加到栈顶位置。
- Pop(出栈):从栈顶移除并返回元素。
- 参数:无。
- 功能:移除栈顶元素,并返回其值。
- Peek(查看栈顶元素):返回栈顶元素的值,但不对栈进行修改。
- 参数:无。
- 功能:返回栈顶元素的值,但不移除该元素。
- IsEmpty(判空):检查栈是否为空。
- 参数:无。
- 功能:如果栈为空,返回 true;否则返回 false。
- Size(获取栈的大小):返回栈中元素的数量。
- 参数:无。
- 功能:返回栈中元素的数量。
3.1 数组实现
class Stack<T> {
//定义一个数组/列表,存储元素
private data: T[] = [];
//实现栈中相关的操作方法
push(el: T): void {
this.data.push(el);
}
pop(): T|undefined {
return this.data.pop();
}
peek(): T|undefined {
return this.data[this.data.length - 1];
}
size():number {
return this.data.length;
}
isEmpty(): boolean {
return this.data.length === 0;
}
}
//创建实例
const stack1 = new Stack();
四.面试题目
1.10进制转2进制
function toBinary(decimal: number): string {
const stack = new ArrayStack<number>();
while (decimal > 0) {
const result = decimal % 2;
stack.push(result);
decimal = Math.floor(decimal / 2);
}
//所有的余数依次取出
while (!stack.isEmpty()) {
console.log(stack.pop);
}
return "";
}