• ベストアンサー

キューとスタックについて

キューとスタックについて質問です。 abcと言う文字列があった場合、キューとスタックで何通りの取り出し方が出来るかと言う問題があります。 スタックについては5通りで納得しているのですが、キューは私は1通りだと思うのですが、 友達は3通りだと言います。 1通りと3通りのどちらが正解なのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tann3
  • ベストアンサー率51% (708/1381)
回答No.1

 「キュー」が文字通り「先入れ、先出し」で、「abc」という文字列がその順序で「a→b→c」と入力されるのであれば、出力は「abc」という「1通り」しかありえないので、「1通り」が正解だと思います。  それ以外に何か条件があるのでしょうか。  ご友人が「3通り」という理由を聞いてみてはいかがでしょうか。

関連するQ&A

  • キューとスタックの問題です、宜しくお願いします

     (多分基本情報処理に関する問題だと思うのですが)データ構造に関する問題です、いくら考えても分かりません、宜しくお願いします。 【問】空の状態のキューとスタックの二つのデータ構造がある。 次の手続きを順に実行した場合、変数xに代入されるデータはどれか。 ここで、 ・データyをスタックに挿入することをpush(y) ・スタックからデータを取り出すことをpop( ) ・データyをキューに挿入することをenq(y) ・キューからデータを取り出すことをdeq( ) と表す。 (1)push(a) (2)push (b) (3)enq(pop( )) (4)enq(c) (5)push(d) (6)push(dep( )) (7)pop( ) → x 以上の答えとして(6)にはbがスタックにpushされるので、後入れ先出し を考えると当然「xにはb」が入るはずなのですが、どうも答えは「d」となっています。 「d」は「b」より前にスタックされてますので、最新で取出される情報は「b」しかないと思うのですが、誰か誤りを指摘してください、宜しくお願いします。

  • c言語 リストデータ構造 キュー スタック がわかりません

    ポインタを用いた線形リストデータ構造を利用して,キーボードから順に入力した複数の整数値(int型)を空の「スタック」および「キュー」にそれぞれ保存し,取り出した時,出力される整数値を順に表示するプログラム. 動作確認のために入力する整数値は,年号と月の数字の部分とせよ(2008年5月なら,「2→0→0→8→0→5」の順).また,スタックとキューに保存されているデータがどのような順で出力されるかをそれぞれ表示するようにせよ.(スタックの場合は「5→0→8→0→0→2」の順で出力され,キューの場合は「2→0→0→8→0→5」の順で出力されることを表示させ確認せよ) こうのようなプログラムを作らなくてはいけないのですが、まったくわかりません。参考にでもソースを教えていただけないでしょうか? また、詳しく解説されている(初級と中級レベルそれぞれについて)サイトや書籍がありましたらそちらもお願いいたします。

  • スタックとキューの違いを示すプログラム。

    学校でスタックとキューの違いを示せという課題が出たのですが、どうしてもわからなかったので、苦し紛れに質問させていただきました…。 いろいろ情報を集めて分からないながらにも以下のプログラムを書いてみたのですがスタックはできてもキューが実現できません。 あまり内部の処理を書き変えずに以下のスタックのプログラムをキューに書き換えたいのですがどうしたらいいでしょうか? ポインタを利用した連結リスト構造です。 #include <stdio.h> #include <stdlib.h> struct Cell//構造体Cellの定義 { int element; Cell* p_prev; Cell* p_next; }; void Cell_Initialize(Cell* p)//要素を初期化用 { p->element = -1; p->p_next = NULL; p->p_prev = NULL; } void Push(Cell* p, int val) { Cell* p_temp = p; while(1) { if(p != NULL) { if(p_temp->p_next == NULL) { p_temp->p_next = (Cell*)malloc(sizeof(Cell));//新しいセルを作成するときのメモリの確保 Cell_Initialize(p_temp->p_next);//初期化 p_temp->p_next->element = val; p_temp->p_next->p_prev = p_temp; break; } else { p_temp = p_temp->p_next; } } } } int Pop(Cell* p) { Cell* p_temp = p; int temp; while(1) { if(p != NULL) { if(p_temp->p_next == NULL) { break; } else { p_temp = p_temp->p_next; } } } if(p_temp->p_prev != NULL) { temp = p_temp->element; p_temp->p_prev->p_next = NULL; free(p_temp); p_temp = NULL; return temp; } else if(p_temp->element != -1) { temp = p_temp->element; Cell_Initialize(p_temp); return temp; } return -1; } void main() { Cell* p_list = NULL; p_list = (Cell*)malloc(sizeof(Cell)); Cell_Initialize(p_list); for(int i = 1; i < 7; i++) { int temp; printf("%d文字目入力してください:",i); scanf("%d",&temp); Push(p_list, temp); } while(1) { int temp = Pop(p_list); if(temp != -1) { printf("[%d]\n\n",temp); } else { break; } } } 長文になってしまいすみません。 どなたかよろしくお願いします。

  • スタックを用いたプログラム

    http://okwave.jp/qa4433705.html 先日教えて戴いた事でスタックがどういったものなのかは わかりましたが、実際にプログラムを作ってみると、 なかなかうまくいけません。再びアドバイスを戴ければと思ってます。 <プログラムの仕様> 入力数値をスタックに格納し'a'が入力されたら、 スタックに格納されている数値を全て取り出し、 平均値を出力するプログラム ・スタックは、push()関数およびpop()関数を実装する ・スタックへの要素の追加はpush()関数で行う ・スタックからの要素の取出はpop()関数で行う ・スタックのサイズは任意とする int push(int push_data);  引数: スタックに追加するデータ  戻り値: 成功の場合1、失敗の場合0を返す int pop(int *pop_data);  引数: スタックから取り出した値を格納するポインタ  戻り値: 成功の場合1、失敗の場合0を返す いざ、自分で作ってみると、 仕様通りには全く作れず、結局main関数ですべてを作って しまうことになってしまいます・・

  • スタックメモリについて

    プログラムの起動時に、スタックメモリは初期化(NULLに設定)されるのでしょうか。 PUSH・POPで使用したらデータは残りますが、未使用の場合、初期化されているかの質問です。 グローバル変数の領域はクリアされると思われますが、スタックは不明です。 クリアされないときは、ほかのプログラムで使用されたゴミデータが 残っているのでしょうか 目的は、スタック領域でメモリ障害の場合動作が変わってしまうのか、確認したいためです。 すいませんが、よろしくお願いします。

  • スタックオーバーフローについて

    Windows98を使用していますが、最近起動した時に、次のような文章がでるようになりました。「スタックオーバーフローのため、スレッドを停止します。最近インストールされたVxDがスタックを消費しすぎている可能性があります。system.ini.の’Min SPs’設定を増やすか、最近インストールされたVXdを削除して下さい。現在5SPがアロケートされています。」 1.スタックオーバーフローとは何か。 2.スレッドとは何か。 3・VxDとは何か。 4.アロケートとは何か。 5.このまま無視して使用し続けると問題が発生するでしょうか? 素人質問ですみません。 検索でVxDファイルを検索してみると沢山のファイルが 出てきましたが、どれがその問題のファイルか わかりません。 どのように質問をしたらよいのかわからないので 長々と質問を書いてしまいました。 どなたかアドバイスいただけたら幸いです。

  • スタックについて

    A、B、C、Dの順に到着するデータに対して、一つのスタックだけを用いて出力可能なデータ列はどれか。  ア A、D、B、C  イ B、D、A、C  ウ C、B、D、A  エ D、C、A、B 解答は C B D A  (pop) C B → B → → D → → A A A A A   となり、ウとなります。 しかし、A、B、C、Dの順に到着するデータということから D C B A とデータが積み上げられることになると思われます。 そうなると、解答もDCBAとなると思われます。 スタックはデータを2つしか積み上げられない ものと考えるのなら問題はないのですが、 疑問が残ります。 長文となりましたが、宜しくお願いいたします。

  • c++のキュー

    スレッド間のデータの受け渡しとしてキューを利用したいです。 queueというクラスがありますが、データの取得メソッドが好みのものではないです。 他にキューの実装があれば教えてください。★ 仮に、キューからのデータ取得メソッドを「shutoku()」としたときに、 キューにエントリがある場合は取得、 キューにエントリが無い場合は待ち状態に入り(「shutoku()」で実行が一時停止)、キューに追加が入った場合に「直ちに」復帰するメソッドを使いたいです。 そんなクラス・メソッドはSTLかBOOSTに無いでしょうか?★ 無ければ作ろうと思いますがなるべく問題の元は作りたくないです。

  • スタックオーバーフロー

    Windows98起動後、ネットワークに接続するためユーザー名 とパスワードを入力したところ、以下のようなメッセージ が表示されました。 「スタックオーバーフローのため、スレッドを停止しています。 最近インストールされたVxDがスタックを消費しすぎている可能性があります。 SYSTEM.INIの“MinSPs”設定を増やすか、最近インストールされたVxDを削除してください。 現在4SP がアロケートされています。どれかキーを押すと続行します。」 SYSTEM.INIの中を見ても"MinSPs"という文字列は見当たりません。 "現在4SPがアロケート"ということであればSYSTEM.INIの中で"MinSPs=4"とすればいいのかと推測してますが、どのセクションに記述すればいいのかわかりません。 そもそも"MinSPs"は何でしょう?? ご存知の方教えてください。

  • キューの問題

    分からない問題があります。 「キューを配列で実現する場合を考える。配列のサイズをnとすると、空のキューに対して、_________ の実行がなく、__________ を n+1回連続して実行すると問題が発生する。」空欄を埋め、発生する問題を説明しなさい。 どなたかお教え下さい。

専門家に質問してみよう