待ち行列への挿入、取りだしを行なうプログラムを実現せよ。 待ち行列とは先入れ、先だしの記憶形態で、切符販売等の窓口での待ち行列の様子を想像して貰えばよい。 この待ち行列への挿入(待ちへ並ぶ)、削除(待ち行列の先頭に対してサービスを行なう)を行なうプログラムを作る。コマンドとしては以下のものを考える。コマンドDとQの場合は単語の入力は不要であるが、入力命令の簡便のため何かを入力するものとする(入力はfscanf("%c %s", &c, &word)でよい。 待ち行列のための構造体は以下の様:
- I 単語:単語を待ち行列に挿入する
- D 単語:単語を待ち行列からとり出す
- P 単語:現在の待ち行列に並んでいる要素をプリントする
- Q 単語:終了
待ち行列の場合、挿入は後ろから、削除は先頭から行なうので、一方向リストを利用し、その先頭をさす変数(top)と、最後尾をさす変数(bottom)を用意するとよい。 ならんでいる人がいない場合は挿入しかできない事に注意すること。 プログラムの大枠は以下のようである。struct q { char *word; 単語を記憶する struct q *next; }以下の様な入力系列に対して実行結果を示せ。while(1) { fscanf(.....); switch(c) { case 'D': .... case 'Q': exit(1); default: printf(stderr,"コマンド入力エラー\n"); } }
- I jouhou
- I denki
- I shakai
- P dummy
- D dummy
- D dummy
- D dummy
- D dummy
- I jouhou
- P dummy
- Q dummy