C++言語のキューの問題のことです

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
へむへむ

C++言語のキューの問題のことです

#1

投稿記事 by へむへむ » 7年前

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
と入力して、
1 2 3 4 5 6 7 8 9 10 111 12 13 14 15 16 17 18 19 20
と出力したいのですが、
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
となってしまいます。
どこをどうすればいいでしょうか

コード:

#include <iostream>

using namespace std;

int idx;
int buf[20];


void empty()
{
idx=0;
}


void push(int v)
{
buf[idx++]=v;
}

int pop()
{
return buf[--idx];
}


int main()
{
empty();
int v;

for (int i=0;i < 20 ;i++){
cin >> v; push(v);
}

for(int i=0;i<20;i++){
cout << pop() << " ";
}

for (int i=0;i<20;i++){
cin >> v; push(v);
}

for(int i=0;i<20;i++){
cout << pop() << " ";
}

cout << endl;
	return 0;
}

box
記事: 2002
登録日時: 13年前

Re: C++言語のキューの問題のことです

#2

投稿記事 by box » 7年前

コードをザッと見たところ、データ構造がキューではなくてスタックになっているようです。
関数名もpush()とかpop()とか、いかにもスタックを扱うかのような名前が付いてますね。
だからどうすれば?というのは、キューとか待ち行列とかでまずはググってみてはどうでしょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

へむへむ

Re: C++言語のキューの問題のことです

#3

投稿記事 by へむへむ » 7年前

これを型としてやらないといけないので...

コード:

#include <iostream>
 
using namespace std;
 
int idx;
int buf[10];
 
 
void empty()
{
 
}
 
 
void push(int v)
{
 
}
 
int pop()
{
 
}
 
 
int main()
{
empty();
int v;
 
for (int i=0;i < 20 ;i++){
cin >> v; push(v);
}
 
for(int i=0;i<20;i++){
cout << pop() << " ";
}
 
for (int i=0;i<20;i++){
cin >> v; push(v);
}
 
for(int i=0;i<20;i++){
cout << pop() << " ";
}
 
cout << endl;
    return 0;
}

かずま

Re: C++言語のキューの問題のことです

#4

投稿記事 by かずま » 7年前

へむへむ さんが書きました:これを型としてやらないといけないので...
どういうことでしょうか?
int idx; と int buf[10]: しか使ってはいけないということでしょうか?
それでは、main で 20個のデータを push できませんよ。

非常に効率の悪い方法ですが、とりあえずキューとして動くものを書いてみました。

コード:

#include <iostream>

using namespace std;

const int SIZE = 20;

int idx;
int buf[SIZE];

void empty() { idx = 0; }

void push(int v)
{
    if (idx == SIZE)
        cerr << "queue full\n";
    else
        buf[idx++] = v;
}

int pop()
{
    int v = 0;
    if (idx == 0)
        cerr << "queue empty\n";
    else {
        v = buf[0];
        idx--;
        for (int i = 0; i < idx; i++)
            buf[i] = buf[i+1];
    }
    return v;
}

int main()
{
    empty();
    int v;
     
    for (int i = 0; i < 20; i++) {
        cin >> v; push(v);
    }
    for (int i = 0; i < 20; i++)
        cout << pop() << " ";
     
    for (int i = 0; i < 20; i++) {
        cin >> v; push(v);
    }
    for (int i = 0; i < 20; i++)
        cout << pop() << " ";

    cout << endl;
}

返信

“C言語何でも質問掲示板” へ戻る