今天谈谈栈和队列的区别?

发布时间:2023年12月18日

栈和队列是两种常见的数据结构,它们在元素的插入和删除方式上有所区别。

栈:

  • 栈是一种后进先出(Last-In-First-Out,LIFO)的数据结构。
  • 在栈中,元素只能从栈顶添加或删除。
  • 添加元素称为压栈(push),删除元素称为弹栈(pop)。
  • 最后被压入栈的元素将会第一个被弹出。

举个例子,你可以把栈想象成一叠盘子,最后放上去的盘子会最先被取走。

栈的实现(代码):

class Stack {
  constructor() {
    this.items = []; // 栈内元素存储数组
  }

  push(element) { // 入栈
    this.items.push(element);
  }

  pop() { // 出栈
    if (this.isEmpty()) return null;
    return this.items.pop();
  }

  peek() { // 获取栈顶元素
    if (this.isEmpty()) return null;
    return this.items[this.items.length - 1];
  }

  isEmpty() { // 判断栈是否为空
    return this.items.length === 0;
  }

  size() { // 获取栈内元素个数
    return this.items.length;
  }

  clear() { // 清空栈
    this.items = [];
  }
}

如何使用:??

let stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.pop()); // 3
console.log(stack.peek()); // 2
console.log(stack.isEmpty()); // false
console.log(stack.size()); // 2
stack.clear();
console.log(stack.isEmpty()); // true

?

队列:

  • 队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。
  • 在队列中,元素只能从队尾添加,从队首删除。
  • 添加元素称为入队(enqueue),删除元素称为出队(dequeue)。
  • 最先入队的元素将会最先出队。

以排队买票为例,队列就像是人们排队等候的队伍,第一个来的人会第一个买到票。

队列的实现

class Queue {
  constructor() {
    this.items = []; // 队列内元素存储数组
  }

  enqueue(element) { // 入队
    this.items.push(element);
  }

  dequeue() { // 出队
    if (this.isEmpty()) return null;
    return this.items.shift();
  }

  front() { // 获取队首元素
    if (this.isEmpty()) return null;
    return this.items[0];
  }

  isEmpty() { // 判断队列是否为空
    return this.items.length === 0;
  }

  size() { // 获取队列内元素个数
    return this.items.length;
  }

  clear() { // 清空队列
    this.items = [];
  }
}

使用示例:

let queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue()); // 1
console.log(queue.front()); // 2
console.log(queue.isEmpty()); // false
console.log(queue.size()); // 2
queue.clear();
console.log(queue.isEmpty()); // true

????????总结: 栈和队列都是常用的数据结构,但它们在操作顺序和特性上有所不同。栈适用于需要后进先出操作的场景,而队列适用于需要先进先出操作的场景。具体使用哪种数据结构取决于具体的问题和需求。

文章来源:https://blog.csdn.net/m0_74359467/article/details/135057883
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。