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でプログラムの終了が行えます。
まぁ、詳しくは解析して下さい(ぉ
Decomo | 02:27