| |||||||||||||||||||||||||||||||||||||||||
サイト内検索
カスタム検索
|
JavaScript による一番簡単なスタックとキューの実装方法JavaScript の Array オブジェクトには配列の先頭要素の取り出し (shift)、最後尾要素への追加 (push)、 最後尾要素の取り出し (pop) 等の操作が実装されています。 Array の持つメソッドだけを使って、スタック及びキューを実装してみましょう。 スタックの実装スタックは LIFO (Last In First Out) のデータ構造です。つまり、1,2,3 の順番で、 スタックにデータをプッシュすると、取り出すデータは3,2,1 の順番で出てきます。 慣例的に、スタックにデータを入れる操作を push, データを取り出す操作を pop といいます。 JavaScript の Array オブジェクトには既に push, pop が実装されていますから、それをそのまま使いましょう。 クラスの定義方法に不慣れな人は、当サイトの JavaScript によるオブジェクト指向プログラミング を見てください。
//
// Stack (LIFO)
//
function Stack() {
this.__a = new Array();
}
Stack.prototype.push = function(o) {
this.__a.push(o);
}
Stack.prototype.pop = function() {
if( this.__a.length > 0 ) {
return this.__a.pop();
}
return null;
}
Stack.prototype.size = function() {
return this.__a.length;
}
Stack.prototype.toString = function() {
return '[' + this.__a.join(',') + ']';
}
定義は以上です。内部変数として Array オブジェクトを持ちます。 push, pop メソッドはデータの出し入れ、size メソッドは現在のデータ数、 そして toString メソッドはデータ構造中のデータを JSON 形式でダンプします。 テストコードは次のようになります。
//
// Stack の動作確認
//
var i;
var s = new Stack();
s.push(1);
s.push(2);
s.push(3);
alert( s.toString() );
while( i = s.pop() ) {
alert( i );
}
キューの実装キューは FIFO のデータ構造です。ところてん方式に、先に入れたのが取り出せます。 1,2,3 の順番でデータを格納すれば、取り出すのも1,2,3 の順番です。 慣例的にキューにデータを入れる操作を、push とか enqueue、データを取り出す操作を get とか dequeue といいます。Array オブジェクトのメソッドで言えば、前者は push、 後者は shift メソッドに対応します。
//
// Queue (FIFO)
//
function Queue() {
this.__a = new Array();
}
Queue.prototype.enqueue = function(o) {
this.__a.push(o);
}
Queue.prototype.dequeue = function() {
if( this.__a.length > 0 ) {
return this.__a.shift();
}
return null;
}
Queue.prototype.size = function() {
return this.__a.length;
}
Queue.prototype.toString = function() {
return '[' + this.__a.join(',') + ']';
}
以上が定義です。テストコードは以下の通りです。
//
// Queue の動作確認
//
var i;
var q = new Queue();
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
alert( q.toString() );
while( i = q.dequeue() ) {
alert( i );
}
|
||||||||||||||||||||||||||||||||||||||||
|
© 2008-2010 小山圭介 All Rights Reserved.
|
|||||||||||||||||||||||||||||||||||||||||