Форум программистов, компьютерный форум CyberForum.ru

Создание стека структур - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
22.04.2013, 22:45     Создание стека структур #1
Как мне объявить стек структур с помощью <stack> ? Я создал структуру и хотел сделать стек таких структур, но почему-то у меня не получается =( Взгляните сами:
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
#include <iostream>
#include <stack>
 
using namespace std;
 
const int N=100;
 
struct Football
 {
     char fio[10];
     int vozrast;
     int kol_gollov=0;
     double vremya=0;
     char legioner[3];
     double plata=0;
 };
stack <Football> football;
 
int main()
{
    cout<<"Vvedite familiu imya otchestvo"<<endl;
    cin>>Football.fio;
    cout<<"Vozrast"<<endl;
    cin>>football.vozrast;
    cout<<"Kollichestvo golov"<<endl;
    cin>>football.kol_gollov;
    cout<<"Vremya"<<endl;
    cin>>football.vremya;
    cout<<"Yavlyaentsya legionerom? (yes/no)"<<endl;
    cin>>football.legioner;
    cout<<"Zar_plata"<<endl;
    cin>>football.plata;
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
22.04.2013, 22:54     Создание стека структур #2
ququ_smile, нужно создавать объекты типа Football, инициализировать их (лучше создать функцию для ввода информации и вывода), и потом уже класть в стек.
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
22.04.2013, 23:01  [ТС]     Создание стека структур #3
Цитата Сообщение от yoghurt92 Посмотреть сообщение
ququ_smile, нужно создавать объекты типа Football, инициализировать их (лучше создать функцию для ввода информации и вывода), и потом уже класть в стек.
Я так пытался делать, но у меня почему-то не получалось =( можете показать пример?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
22.04.2013, 23:08     Создание стека структур #4
ququ_smile, смотрите, создаете внутри структуры 2 функции, для ввода и вывода, потом в менйе как-то так

C++
1
2
3
4
5
for(int i = 0; i < 5; ++i)
       Football op;
       op.Input();                       //это функция ввода
       football.push(op);
}
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
22.04.2013, 23:36  [ТС]     Создание стека структур #5
Цитата Сообщение от yoghurt92 Посмотреть сообщение
ququ_smile, смотрите, создаете внутри структуры 2 функции, для ввода и вывода, потом в менйе как-то так

C++
1
2
3
4
5
for(int i = 0; i < 5; ++i)
       Football op;
       op.Input();                       //это функция ввода
       football.push(op);
}
эм... что-то мозг не варит )) можно это изобразить без функции ввода? Т.е. голый ввод одного поля струкруты
З.Ы. а 5 - это значит что мы введем 5 полей структуры или 5 структур, состоящих из одного поля?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 15:36     Создание стека структур #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ququ_smile,

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <string>
#include <queue>
using namespace std;
 
#define size 2
 
struct Football{
    string fio,
           legioner;
 
    int vozrast,
        kol_gollov;
 
    double vremya,
           plata;
 
    //а вот те функции о которых я говорил
    void input(){
        cout << "Vvedite familiu imya otchestvo: ";
            cin >> fio;
        cout << "Vozrast: ";
            cin >> vozrast;
        cout << "Kollichestvo golov: ";
            cin >> kol_gollov;
        cout << "Vremya: ";
            cin >> vremya;
        cout << "Yavlyaentsya legionerom? (yes/no): ";
            cin >> legioner;
        cout << "Zar_plata: ";
            cin >> plata;
        cout << endl;
    }
 
    //и эта тоже
    void output(){
        cout << "\nVvedite familiu imya otchestvo" << fio;
        cout << "\nVozrast" << vozrast;
        cout << "\nKollichestvo golov" << kol_gollov;
        cout << "\nVremya" << vremya;
        cout << "\nYavlyaentsya legionerom? (yes/no)" << legioner;
        cout << "\nZar_plata" << plata << '\n';
    }
};
 
int main()
{
    queue<Football> coll;
 
    //вот ввод данных
    for(int i = 0; i < size; ++i){
        Football op;                //создаем объек структуры
        op.input();                 //вводим данные 
        coll.push(op);              //кладем в стек
    }
 
    //вот вывод данных
    for(int i = 0; i < size; ++i){
        coll.front().output();          //выводим верхний
        coll.push(coll.front());        //добавляем верхний d rjytw
        coll.pop();                     //удаляем верхний
    }
 
    cout << "\n\n";
    return 0;
}
если честно, то твой выбор контейнера не удачный, т.к. ты не сможешь просмотреть что в нем храниться, стек реализует политику LIFO, поэтому просмотреть его не удалив все содержимое при этом не получится. Я взял очередь, т.к. она реализует политику FIFO, с ней конечно тоже проблемы, но по крайней мере можно удалять первый и добавлять его в конец, в итоге таких манипуляций ты просмотришь очередь и сохранишь все на месте. А лучше взять вектор, для твоей задачи он подходит лучше всего.
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
23.04.2013, 17:26  [ТС]     Создание стека структур #7
Цитата Сообщение от yoghurt92 Посмотреть сообщение
если честно, то твой выбор контейнера не удачный, т.к. ты не сможешь просмотреть что в нем храниться, стек реализует политику LIFO, поэтому просмотреть его не удалив все содержимое при этом не получится. Я взял очередь, т.к. она реализует политику FIFO, с ней конечно тоже проблемы, но по крайней мере можно удалять первый и добавлять его в конец, в итоге таких манипуляций ты просмотришь очередь и сохранишь все на месте. А лучше взять вектор, для твоей задачи он подходит лучше всего.
я сам этому не рад, но в курсаче мне сказали сделать таблицу из структур в форме стека =( До конца сам не понимаю как мне всё это реализовать, но пока-что я просто не могу разобраться со стеком =( Ты показал как работать с очередью, но не мог бы ты показать тот же пример, но со стеком?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 17:28     Создание стека структур #8
ququ_smile, могу, но тогда если нужно вывести стек придется удалять его содержимое, иначе никак...
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 17:30     Создание стека структур #9
ququ_smile,
C++
1
 queue<Football> coll;
исправьте на
C++
1
stack<Football> coll;
C++
1
coll.front().output();
на
C++
1
 coll.top().output();
Остальное, вроде, не поменяется.

Добавлено через 1 минуту
yoghurt92, а вы и так в очереди поудаляли. Кстати, вы не правы, если идти по итераторам можно без удаления вывести в 1 проход.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 17:50     Создание стека структур #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ternsip, буду рад если вы покажите, потому что я новичок в STL, но про begin и end у stack не знаю...

Добавлено через 4 минуты
Ternsip, нет, не получиться вашим способом, мы же добавляем верхушку и удаляем, только так

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <string>
#include <stack>
#include <algorithm>
using namespace std;
 
#define size 2
 
struct Football{
    string fio,
           legioner;
 
    int vozrast,
        kol_gollov;
 
    double vremya,
           plata;
 
    //а вот те функции о которых я говорил
    void input(){
        cout << "Vvedite familiu imya otchestvo: ";
            cin >> fio;
        cout << "Vozrast: ";
            cin >> vozrast;
        cout << "Kollichestvo golov: ";
            cin >> kol_gollov;
        cout << "Vremya: ";
            cin >> vremya;
        cout << "Yavlyaentsya legionerom? (yes/no): ";
            cin >> legioner;
        cout << "Zar_plata: ";
            cin >> plata;
        cout << endl;
    }
 
    //и эта тоже
    void output(){
        cout << "\nVvedite familiu imya otchestvo" << fio;
        cout << "\nVozrast" << vozrast;
        cout << "\nKollichestvo golov" << kol_gollov;
        cout << "\nVremya" << vremya;
        cout << "\nYavlyaentsya legionerom? (yes/no)" << legioner;
        cout << "\nZar_plata" << plata << '\n';
    }
};
 
int main()
{
    stack<Football> coll;
 
    //вот ввод данных
    for(int i = 0; i < size; ++i){
        Football op;                //создаем объек структуры
        op.input();                 //вводим данные 
        coll.push(op);              //кладем в стек
    }
 
    //вот вывод данных
    for(int i = 0; i < size; ++i){
        coll.top().output();           //выводим верхний
        coll.pop();                     //удаляем верхний
    }
 
    cout << "\n\n";
    return 0;
}
это мой вариант, если Ternsip покажет лучше, буду рад посмотреть, самому интересно

Добавлено через 10 минут
ququ_smile, я тут подумал, а что если воспользоваться не STL а самому написать стек, и потом уже реализовать для него функцию вывода без удаления?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 18:20     Создание стека структур #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
yoghurt92, можно можно вот :
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
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <queue>
#include <stdio.h>
#include <string>
 
using namespace std;
 
template <typename E>
class Tstack{
public:
    struct stack{
        E inf;
        stack *next;
    };
    stack *head;
    Tstack(){
        head =  NULL;
    }
    void push(E x){
        stack *st = new stack;
        st->inf = x;
        st->next = head;
        head = st;
    }
    bool empty(){
        return !head;
    }
    E pop(){
        if (empty()) 
            return 0;
        stack *nhead = head;
        int c = head->inf;
        head = nhead->next;
        delete nhead;
        return c;
    }
    void show(){
        stack *st = head;
        while (st) {
            cout << st->inf << " ";
            st = st->next;
        }
    }
}; 
 
 
int main(){            
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    Tstack <int> omfg;
    omfg.push(777);
    omfg.push(666);
    omfg.push(333);
    omfg.push(131313);
    omfg.push(4242);
    omfg.show();
    return 0;
}
По средствам STL, может, тоже возможно такое сделать.
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
23.04.2013, 18:22  [ТС]     Создание стека структур #12
Цитата Сообщение от yoghurt92 Посмотреть сообщение
я тут подумал, а что если воспользоваться не STL а самому написать стек, и потом уже реализовать для него функцию вывода без удаления?
Т.е. создать массив структур и обращаться с ним как со стеком, но со своими функциями?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 18:27     Создание стека структур #13
ququ_smile, вовсе нет! для того чтобы пользоваться стеком структур вам нужно у стека указать тип вот так :
C++
1
stack < название вашей структуры > имя переменной
теперь вы можете обратиться к вашему элементу, например, вот так
C++
1
имя переменной . top(). метод вашей структуры
Но этот элемент будет лежать на верхушке стека.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 18:28     Создание стека структур #14
ququ_smile, нет, как Ternsip показал, средствами STL без удаления я не знаю способа. Да скорее всего его и нет)


Ternsip, да, так можно, а STL-ая реализация не позволяет выводить без удаления.
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
23.04.2013, 18:29  [ТС]     Создание стека структур #15
Ternsip

В нашей методичке по стекам (правда это методичка к лабе) библиотеки <stack> и в помине нет)) все функции написаны вручную, но мне это как-то не нравится...
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 18:32     Создание стека структур #16
ququ_smile, ну почему не нравится, есть возможность заточить стек под себя, а не уповать на STL реализацию)
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
23.04.2013, 18:35     Создание стека структур #17
ququ_smile, посмотрите мой пост чуть-чуть повыше, я там описал класс стек и его достаточно, чтобы осуществить то, что я уже говорил.

Добавлено через 1 минуту
возможно ещё понадобится метод top()
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
23.04.2013, 18:41  [ТС]     Создание стека структур #18
Цитата Сообщение от yoghurt92 Посмотреть сообщение
ну почему не нравится, есть возможность заточить стек под себя, а не уповать на STL реализацию)
Я вообще сначала сделал под динамический массив, где всё просто, а потом узнал что мне нужен стек =( Теперь почти все методы есть, а вот под стек как-то геморойно переделывать=(
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 18:45     Создание стека структур #19
ququ_smile, ну лучше вариант это вручную написать, да и опыт работы с указателями будет, так что Ternsip показал вам правильный путь, держитесь этого курса)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 19:06     Создание стека структур
Еще ссылки по теме:

C++ Создание стека и проверка на палиндром
создание стека и действия с ним C++
Создание стека с односвязным LinkedList C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ququ_smile
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 153
23.04.2013, 19:06  [ТС]     Создание стека структур #20
Цитата Сообщение от yoghurt92 Посмотреть сообщение
ququ_smile, ну лучше вариант это вручную написать, да и опыт работы с указателями будет, так что Ternsip показал вам правильный путь, держитесь этого курса)
Я, чесно говоря, не всё понимаю, что написал Ternsip =( да и с классами я особо еще не знакомился...
Yandex
Объявления
23.04.2013, 19:06     Создание стека структур
Ответ Создать тему
Опции темы

Текущее время: 11:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru