数据结构重学之栈

104 阅读2分钟

前言

不间断更新数据结构学习内容,在这边作为笔记阅览学习。

一. 线性数据结构

线性数据结构包括

  1. 数组(Array):由相同类型的元素按照顺序存储在一段连续的内存空间中。
  2. 链表(Linked List):由节点组成,每个节点包含数据和指向下一个节点的指针。
  3. 栈(Stack):具有后进先出(LIFO)的特性,只能在栈顶进行插入和删除操作。
  4. 队列(Queue):具有先进先出(FIFO)的特性,只能在队尾插入元素,在队头删除元素。
  5. 双端队列(Deque):是一种具有队列和栈特性的数据结构,可以在两端进行插入和删除操作。
  6. 哈希表(Hash Table):根据键(Key)和值(Value)的映射关系进行高效的数据访问。
  7. 向量(Vector):类似于动态数组,可以在末尾插入和删除元素,支持随机访问。
  8. 字符串(String):由字符组成的线性序列,常用于表示文本。

数组是可以在任意位置插入的线性结构,队列是比较常见受限的数据结构,先学习简单的数据结构。

二. 栈

image.png

image.png 答案:C

三. 栈的实现

  1. Push(入栈):将元素插入到栈顶。
  • 参数:待插入的元素。
  • 功能:将元素添加到栈顶位置。
  1. Pop(出栈):从栈顶移除并返回元素。
  • 参数:无。
  • 功能:移除栈顶元素,并返回其值。
  1. Peek(查看栈顶元素):返回栈顶元素的值,但不对栈进行修改。
  • 参数:无。
  • 功能:返回栈顶元素的值,但不移除该元素。
  1. IsEmpty(判空):检查栈是否为空。
  • 参数:无。
  • 功能:如果栈为空,返回 true;否则返回 false。
  1. 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 "";
}

2.leetcode.cn/problems/va…