質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.39%

  • C++

    2408questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

C++ キュー(幅優先)で質問があります。

受付中

回答 1

投稿 2017/12/04 17:28

  • 評価
  • クリップ 0
  • VIEW 49

b-boy_apple

score 0

キュー、幅優先をプログラムで書いているのですが、左右に子ノードがあった場合の処理がわかりません。
//■■■■■■■■キューに子ノードがあれば入れる処理を追加する
の部分です。

if(q1.front()->l_child!=NULL)
q1.push_back(&Node[0]);
if(q1.front()data->r_child!=NULL)
q1.push_back(&Node[0]);

と追加してみたのですが、
queue.cpp:66:2: error: use of undeclared identifier
'q1'
q1.push_back(&Node[0]);
^
queue.cpp:69:9: error: use of undeclared identifier
'q1'
while(!q1.empty())      //キューが空ではない
^
queue.cpp:72:9: error: use of undeclared identifier
'q1'
pnode=q1.front();
^
queue.cpp:74:3: error: use of undeclared identifier
'q1'
q1.pop.front();
^
queue.cpp:76:6: error: use of undeclared identifier
'q1'
if(q1.front()->l_child!=NULL)
^
queue.cpp:77:4: error: use of undeclared identifier
'q1'
q1.push_back(&Node[0]);
^
queue.cpp:78:6: error: use of undeclared identifier
'q1'
if(q1.front()data->r_child!=NULL)
^
queue.cpp:79:4: error: use of undeclared identifier
'q1'
q1.push_back(&Node[0]);
^

とエラーが出てしまいます(MacBook Pro,ターミナルで実行)。
左子ノード、右子ノードがそれぞれある場合をif文で考えるものだと思ったのですが、これではいけないのでしょうか?

/*プログラム*/

include<iostream>

include<deque>

include<cstring>

using namespace std;

struct node{    //ノードを表す構造体
struct node *l_child;    //左子ノード
struct node *r_child;    //右子ノード
char data;    //文字
};

struct queue{
struct queue *next;
struct node *n;
};

int main()
{
struct node Node[11];

//木の初期設定
Node[0].l_child=&Node[1];
Node[0].r_child=&Node[5];
Node[0].data='P';

Node[1].l_child=&Node[2];
Node[1].r_child=NULL;
Node[1].data='M';

Node[2].l_child=&Node[3];
Node[2].r_child=&Node[4];
Node[2].data='S';

Node[3].l_child=NULL;
Node[3].r_child=NULL;
Node[3].data='A';

Node[4].l_child=NULL;
Node[4].r_child=NULL;
Node[4].data='A';

Node[5].l_child=NULL;
Node[5].r_child=&Node[6];
Node[5].data='L';

Node[6].l_child=NULL;
Node[6].r_child=&Node[7];
Node[6].data='E';

Node[7].l_child=&Node[8];
Node[7].r_child=&Node[9];
Node[7].data='R';

Node[8].l_child=NULL;
Node[8].r_child=NULL;
Node[8].data='T';

Node[9].l_child=&Node[10];
Node[9].r_child=NULL;
Node[9].data='E';

Node[10].l_child=NULL;
Node[10].r_child=NULL;
Node[10].data='E';

q1.push_back(&Node[0]);

//木の幅優先探索(キューを利用)
while(!q1.empty())    //キューが空ではない
{
struct node *pnode;
pnode=q1.front();
cout << pnode->data << "\n";
q1.pop.front();
//■■■■■■■■キューに子ノードがあれば入れる処理を追加する
}

return 0;
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • PineMatsu

    2017/12/04 17:38

    プログラムコードは```~```で囲ってください。https://teratail.com/help#about-markdown

    キャンセル

回答 1

+1

q1の宣言が無いのが原因です。
エラーメッセージをよく見ましょう。

queue.cpp:66:2: error: use of undeclared identifier 'q1'

「宣言されていない'q1'が使われている」

と書いてあるじゃないですか。

投稿 2017/12/04 17:41

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.39%

関連した質問

  • 解決済

    単方向連結リストを双方向連結リストに変更

    こちらのソースコードは単方向連結リストです。このソースコードを双方向連結リストに拡張してノードを末尾に挿入する方法が分かりません。どなたか説明込みで教えていただけませんか。 /*

  • 解決済

    c++ ファクトリでオブジェクトを作成後、そのオブジェクトをポインタで指すには

    このプログラムは値を格納する際にキューかスタック化を選択することができます。 ファクトリを作ることは例を見てできたのですが、値の取り出し方が分かりません。 このプログラムをコンパ

  • 解決済

    数式文字列を計算したい Stackの中身の型は決まっていない?

    数式文字列を計算したいです。 ネットで調べると逆ポーランド記法になおしてから計算するのが簡単なのかなと思い、それをやってみようと思いました。 StackとQueueを使うそうなの

  • 解決済

    【C言語】スタックをリストで実現するプログラム

    毎度お世話になっております。 高橋麻奈さんの「やさしいC アルゴリズム」をみて勉強しているのですが、リストを使ったスタックのコードで、がコンパイルエラーになってしまいました。 コ

  • 解決済

    スタックの応用

    スタックを利用して入力された文字列の回文を作るプログラムを作成したら、出力されません。 例えば、「abcd」と入力したら、「abcddcba」と主著力される。 発生して

  • 解決済

    C言語 キューの問題の解答が分かりません。

    C言語の勉強をやり始めて二か月の者です。 今、キューの問題を解いているのですが、解答が分かりません。この問題の解説はあるのですが、読んでも理解するのが難しくコードが書けません。

  • 受付中

    計算機の機能追加に関する質問

    javaで計算機のプログラムを作成しました。 単項マイナス演算(例、-10+5)を行う処理を追加したいのですが 修正方法がわかりません。 どのように修正したらよいでしょうか?

  • 解決済

    C++ キューの取り出し方について

    お世話になります。 プログラミング初心者です。 C++でのキューの扱いについて 現在下記のようなソースを書きました。 この生成したキューを取り出すためにはどのような記述をし

同じタグがついた質問を見る

  • C++

    2408questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。