合計 昨日 今日

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

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: へむへむ
[URL]
Date: 2017年4月19日(水) 18:49
No: 1
(OFFLINE)

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

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
となってしまいます。
どこをどうすればいいでしょうか


コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#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;
}

Name: box
[URL]
ハッカー(264,136 ポイント)
Date: 2017年4月19日(水) 19:10
No: 2
(OFFLINE)

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

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

Name: へむへむ
[URL]
Date: 2017年4月19日(水) 19:20
No: 3
(OFFLINE)

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

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

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#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;

Name: かずま
[URL]
Date: 2017年4月19日(水) 23:25
No: 4
(OFFLINE)

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

へむへむ さんが書きました:これを型としてやらないといけないので...

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

非常に効率の悪い方法ですが、とりあえずキューとして動くものを書いてみました。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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;
}


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[10人]