Stackサンプルコード
リンクリストを利用したStackデータ構造操作のサンプルコード
stack.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Stack Sample</title> <script type="text/javascript" src="./Stack.js"></script> </head> <body> <button onclick="clickPush()">Push</button> <button onclick="clickPop()">Pop</button> <p id="canvas"> Stack Dump </p> </body> </html>
Stack.js
'use strict'; // Stack サンプルコード // 汎用的なコードなので、名前空間を考慮したほうが良いが // それは後の課題とする。 // ノードコンストラクタ function Node(value) { this.value = value; this.next = null; // ひとまずnullを設定しておく } var stack = new Node(0); // スタックを保持するダミーノード // 引数の値をpushする。 function push(value) { var node = new Node(value); // スタックに積む node.next = stack.next; stack.next = node; } // stackからpopした値を返す。 function pop(value) { var node = stack.next; var rtn; if (node) { // 先頭要素をスタックから切り離す。 stack.next = node.next; rtn = node.value; } else { // ノード無しのばあい、'no value'を返す。 rtn = 'no value!'; } return rtn; } // stackをdumpした文字列を返す function dump() { var rtn = ''; var node; for (node = stack.next; node; node = node.next) { rtn += node.value + '<br />'; } return rtn; } // Pushボタンクリック処理処理 // promptでユーザから文字列を受け取り、stackにプッシュ // canvasにスタック状態を更新表示 function clickPush() { var value = prompt('スタックにPushする文字列入力', ''); var canvas = document.getElementById('canvas'); if (value) { // 入力があった場合 push(value); canvas.innerHTML = dump(); } } // Popボタンクリック処理処理 // stackからpopした値をalert表示 // canvasにスタック状態を更新表示 function clickPop() { var value = pop(); var canvas = document.getElementById('canvas'); alert(value); canvas.innerHTML = dump(); }
ToDoList