- ベストアンサー
スタックとキューについて
書籍やサイトに書かれている内容は分かる(見た目)のですが、 だから何なのでしょうか? どういったことに応用が効きますか? 難しい事はわからないので具体例を示していただけると助かります。 宜しくお願いします。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
> スタックを使う、とありますが、これは概念なのでしょうか? そのとおりです。なので、実装の仕方は必要に応じて変わります。 > 言葉より絵(コード)で。 そうですね。ではリクエストにお答えします。以下、SH2マイコンのシリアル通信に関するソースコードの一部です。SH2がシリアル通信(UART)でデータを受信する際に呼び出される受信割り込みハンドラと、受信割り込みハンドラがため込んだ受信データを読み出すための関数です。 /** * SCI1受信割り込みハンドラ */ #pragma interrupt( SCI1_rxi_int_handler ) void SCI1_rxi_int_handler(void) { char data; data = SCI1.SCRDR; // 受信データを取り出す SCI1.SCSSR.BIT.RDRF = 0; // 次の受信に備える FIFO_put( (rxBuffer + 1) , data); // 受信バッファに貯め込む } /** * SCI から受信データを読み込む。 */ int SCI_read(char ch, char *buf, int len) { (中略) for(i=0; i<len; i++){ ret = FIFO_get( (rxBuffer + ch), &c ); // 受信バッファから1つずつ取りだす if( FIFO_OK == ret ){ *buf = c; buf++; } else if( FIFO_ERROR_EMPTY == ret ) // これ以上読み込むデータがない break; else{ i = SCI_ERROR_FATAL; // FIFOの初期化ができていない場合など break; } } set_imask( mask ); // 割り込みマスクを戻す return i; // 読み込んだデータ数を返す。 } ついでにFIFOはこのような構造を使いました。 /// データ構造の定義 typedef struct{ int rp; // 書き込み位置 int wp; // 読み出し位置 char *buffer; // データ保存領域へのポインタ short bufferSize; // データ保存領域の大きさ }FIFO;
その他の回答 (11)
- Situgyosya
- ベストアンサー率41% (21/51)
高度に抽象的なコードや、ハードウエアの 近隣のコード、構文解析以外ではほとんど使いません。 >どういったことに応用が効きますか? スタックはUndoやブラウザの履歴(戻るボタン処理) 等に応用可能ですが、別にスタックでなくては ならないというほどのことではありません。 キューは、単一の出力に対して複数の アクセスが想定できる場合などに使いますが、 プロでないかぎり必要となる機会は、まずないでしょう。
- 1
- 2
補足
よく図入りの説明を見ると、なるほどとは思うのですが、 実際のプログラムは特殊なのでしょうか? 書籍見ても本見てもスタックやキューのプログラムを見ないので どういったものが、スタックやキューを用いているプログラムなのか わかりません。初級者でもわかるようなプログラムで教えてください。