2005年06月06日
Pascalによるキューの実装
まぁ、タイトルは大層な名前が付いてますが、大した事はありません。Pascalで書いたヘタレキュープログラムです。
program Queue; const NUMBER_OF_CHAR = 200; type CharArray = array[1..NUMBER_OF_CHAR] of char; { ************************************ Proce. queue_init : キューの初期化 ************************************ } procedure queue_init( var last : integer ); begin last := 0; end; { queue_init } { ********************************** Proce. put : キューに1文字入れる ********************************** } procedure put( var data : CharArray; var last : integer; ch : char ); begin last := last + 1; if ( last > NUMBER_OF_CHAR) then begin last := last - 1; writeln(' -> Queue overflow.'); end else begin data[last] := ch; writeln(' -> OK:Put "', data[last] ,'" into queue.'); end; end; { put } { ************************************** Proce. get : キューから1文字取り出す ************************************** } procedure get( var data : CharArray; var last : integer; var ch : char ); var i : integer; begin ch := data[1]; { キューを詰める } for i:=2 to last do begin data[i-1] := data[i]; end; last := last -1; end; { get } { ************************************* Func. test_empty : キューが空か否か ************************************* } function test_empty( last : integer ) : boolean; begin test_empty := ( last = 0 ); end; { test_empty } { ****** Main ***** } begin var queue_data : CharArray; var ch : char; var last : integer; queue_init(last); writeln('Input small alphabets'); readln(ch); while ( ch <> 'z' ) do begin if ( ch < 'h' ) then begin put( queue_data, last, ch ); end else begin if (not test_empty(last)) then begin get( queue_data, last, ch ); writeln(' -> OK:Get "', ch ,'" from queue.'); end else begin writeln(' -> No data in queue.'); end; end; readln(ch); end; end.
※初掲載時のプログラムは大嘘だったので、修正版に差し替えました。
簡単に解説すると、アルファベットのa?gを入力すると、該当アルファベットのキューへの貯め込み、同様にh?yでキューの表示、zでプログラムの終了が行えます。
まぁ、詳しくは解析して下さい(ぉ
