JavaScript数据结构-栈和队列|8月更文挑战

156 阅读2分钟

这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战

1. 栈简介

栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。 而且它是一种先进后出的存储方式,也就是说最后添加的项最先被移出;它是一种运算受限的线性表,只能在表头/栈顶进行插入和删除操作。

2. 栈的属性和方法

对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用 push() 方法,出栈使用 pop() 方法。 peek() 方法则只返回栈顶元素,而不删除它。clear() 方法清除栈内所有元素,length 属性记录栈内元素的个数。empty 属性,用以表示栈内是否含有元素,不过使用 length 属性也可以。变量 top 记录栈顶位置。

3. 栈的实现

  • 栈的构造
function Stack() { 
  this.data = [];
  this.top = 0; 
  this.push = push; 
  this.pop = pop; 
  this.peek = peek;
}
  • push()向栈中压入一个新元素,top增加1
function push(element) { 
  this.data[this.top++] = element; 
}
  • pop()返回栈顶元素,top减少1
function pop() { 
  return this.data[--this.top]; 
}
  • peek()返回栈顶
function peek() {
   return this.data[this.top-1];
}
  • length返回栈的元素个数
function length() { 
   return this.top; 
}
  • clear清空栈
function length() { 
   return this.top; 
}

4. 队列简介

队列是一种先进先出(First-In-First-Out,FIFO)的数据结构,只允许一端进行插入操作,另一端进行删除操作。队列被用在很多地方。比如提交操作系统执行的一系列进程、打印任务池等。

5. 队列的操作方法和属性

  • push() 方法可以在数组末尾加入元素
  • shift() 方法则可删除数组的第一个元素
  • enqueue() 方法向队尾添加一个元素
  this.enqueue = function enqueue(element) {
    this.data.push(element);
  } ;
  • dequeue() 方法删除队首的元素
  this.dequeue = function dequeue() {
    return this.data.shift();
  };
  • toString() 方法显示队列内的所有元素
  this.toString = function toString() {
    var retStr = ""; 
    for (var i = 0; i < this.data.length; ++i) {
      retStr += this.data[i] + "\n";
    } 
    return retStr;
  };
  • empty()方法判断队列是否为空
  this.empty = function empty() {
    if (this.data.length == 0) {
      return true;
    } else {
      return false;
    }
  };

6. 队列的实现

function Queue() {
  this.data = [];
  this.front = function front() {
    return this.data[0];
  };
  this.back = function back() {
    return this.data[this.data.length - 1];
  };
  // 还有以上方法
}

7. 最后继续学其他数据结构