JavaScriptでStackを実装してみよう

プログラミング言語について理解するにあたっては、既存のよく知られたライブラリやデータ構造の実装をしてみると良いものです。JavaScriptでStackを実装してみましょう。

ライブラリは次のようになります。配列オブジェクトのメソッドをそのまま利用しているので簡単に実装できることがわかります。stack.jsという名前で保存しておきます。

(function(undefined) {
  "use strict";
  var global = Function('return this')();
  function Stack() {
    this.stack = [];
  }
  Stack.prototype.empty = function() {
    return this.stack.length === 0;
  }
  Stack.prototype.size = function() {
    return this.stack.length;
  }
  Stack.prototype.push = function(value) {
    this.stack.push(value);
  }
  Stack.prototype.pop = function() {
    if (this.empty()) {
      return undefined;
    } else {
      return this.stack.pop();
    }
  }
  Stack.prototype.peek = function() {
    if (this.empty()) {
      return undefined;
    } else {
      var v = this.stack.pop();
      this.push(v);
      return v;
    }
  }
  global.Stack = Stack;
}());

Stackを使うには次のようにします。JavaScript, Java, Ruby という文字列をpushした後に、空になるまでpopすると逆順に値が出力されることがわかります。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Stack</title>
  <script src="stack.js"></script>
</head>
<body>
  <div id="logtext" style="position:absolute;"></div><br />
<script>
function log(element) {
  var html = document.getElementById('logtext').innerHTML;
  document.getElementById('logtext').innerHTML = html + '<br>' + element;
}

var stack = new Stack();
stack.push("JavaScript");
stack.push("Java");
stack.push("Ruby");

while (stack.peek()) {
  log(stack.pop())
}
</script>
</body>
</html>

JavaScriptについては、下記の書籍の参考になるでしょう。

プログラミング言語一般については、下記が参考になるでしょう。

同じタグの記事: JavaScript
同じタグの記事: program
同じカテゴリの記事: Program
関連書籍: JavaScript
関連書籍: program