Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/55: Рейтинг темы: голосов - 55, средняя оценка - 4.62
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
1

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

22.04.2013, 22:45. Показов 10111. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как мне объявить стек структур с помощью <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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2013, 22:45
Ответы с готовыми решениями:

Обработка структур с использованием стека
Выбрать предметную область для «базы данных» в соответствии с номером в групповом журнале и...

Создание стека
Никак не могу справится с одним заданием, начала писать код, а дальше никак толкового ничего не...

Создание стека
Создать стек,чтобы он вмещал 10 чисел. Подскажите как это сделать.

Создание стека
Дано число N ( &gt;0 ) и набор N из чисел. Создать стек, содержащий исходные числа (последнее число...

37
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 19:08 21
Author24 — интернет-сервис помощи студентам
ququ_smile, ну структуры вы знаете? можно переделать, оставить структуру и необходимые функции для работы.
0
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
23.04.2013, 22:04  [ТС] 22
Цитата Сообщение от yoghurt92 Посмотреть сообщение
ququ_smile, ну структуры вы знаете? можно переделать, оставить структуру и необходимые функции для работы.
Как я понял, всё что нужно - это создать массив заполнять с 1-го элемента, а считать с последнего? И в нулевой элемент ничего не записать, ибо голова при этом будет -1 ?
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 22:06 23
ququ_smile, так у вас же стек а не массив, что именно вас не устраивает?
0
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
23.04.2013, 22:09  [ТС] 24
Цитата Сообщение от yoghurt92 Посмотреть сообщение
ququ_smile, так у вас же стек а не массив, что именно вас не устраивает?
Ну я же вроде писал(или не писал... влом смотреть) что не буду тут, использовать <stack>, а буду всё делать вручную. Но по сути стек - это тоже массив, но обращение к элементам которого мне как раз и не нравится
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 22:13 25
ququ_smile, ну если у вас написано надо использовать стек, не думаю что у вас примут работу с массивом, поэтому надо разбираться, давайте вы скажите что не понятно, я попытаюсь объяснить по-человечески)
0
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
23.04.2013, 22:15  [ТС] 26
Цитата Сообщение от yoghurt92 Посмотреть сообщение
ququ_smile, ну если у вас написано надо использовать стек, не думаю что у вас примут работу с массивом, поэтому надо разбираться, давайте вы скажите что не понятно, я попытаюсь объяснить по-человечески)
Просто у меня был код на 250+ строк, сделаный под динамический массив и я его пытался передалать под стек(что очень геморойно, с моими то знаниями), поэтому, если не возражаете, давайте отложим консультацию на завтра
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
23.04.2013, 22:38 27
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Обсуждение начиналось нормально, но потом ушло куда-то в дебри. Дайте чуваку чё он просит, пусть он сам потом разбирается, стек ему надо или очередь, оформлять заполнение элементов стека в виде функции или нет

Итак, следую своему правилу: минимум изменений, вот таким должен быть твой код:


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>
#include <stack>
 
using namespace std;
 
const int N=100;
 
struct Football
 {
     char fio[10];
     int vozrast;
     int kol_gollov;
     double vremya;
     char legioner[3];
     double plata;
 
     //Во-первых запомни, поля структур инициализируются в конструкторе
     //НО если эти значения непременно водятся с консоли, то, возможно, оно и лишнее
     Football () {kol_gollov= 0; vremya= 0; plata= 0;}
 
 
 };
stack <Football> football;
 
int main()
{
    
    //Тут всё просто:
    
    //Объявляешь переменную типа Football
    Football Football_;
    
    //И заполняешь её
    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;
 
      
    //Ну и кладём всё это дело в стек  
    football.push (Football_);  
 
    return 0;
}

Вопрос решён. Всё остальное это ДРУГИЕ вопросы. В сети есть охренительная книга по stl
Л.Аммерааль - STL для программистов на C++.djvu

Если надо я скину
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 22:43 28
kravam, за книгу спасибо, да все понятно, но у меня вопрос, как вы собираетесь вывести содержимое стека, например, я хочу вывести все записи на экран?)
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
23.04.2013, 22:56 29
Я ничё не собираюсь выводить. Но если бы приспичило, то так:
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
67
68
69
#include <iostream>
#include <stack>
#include <stdio.h>
 
using namespace std;
 
const int N=3;
 
struct Football
 {
     char fio[10];
     int vozrast;
     int kol_gollov;
     double vremya;
     char legioner[3];
     double plata;
 
     //Во-первых запомни, поля структур инициализируются в конструкторе
     //НО если эти значения непременно водятся с консоли, то, возможно, оно и лишнее
     Football () {kol_gollov= 0; vremya= 0; plata= 0;}
 
 
 };
stack <Football> football;
 
int main()
{
    
    //Тут всё просто:
    
    //Объявляешь переменную типа Football
    Football Football_;
    
    for (int i= 0; i< N; i++) {
        //И заполняешь её
        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;
     
          
        //Ну и кладём всё это дело в стек  
        football.push (Football_);  
    } 
     
    
    //ВЫвод:
    while (!football.empty())  {
     cout <<  football.top().fio<< endl;
     cout <<  football.top().vozrast<< endl;
     cout <<  football.top().kol_gollov<< endl;
     cout <<  football.top().vremya<< endl;
     cout <<  football.top().legioner<< endl;
     cout <<  football.top().plata<< endl;
     football.pop();
    }
    
    
    
    return 0;
}
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 22:58 30
kravam, поправьте если ошибаюсь, но после вашего вывода стек будет пуст?
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
23.04.2013, 22:59 31
Естессно
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
23.04.2013, 23:04 32
kravam, ну вот мы вернулись к тому же самому а если содержимое опять понадобиться? поэтому я предлагал написать вручную и описать функцию вывода без удаления
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
23.04.2013, 23:07 33
Вот когда понадобится тогда и будет разговор.
0
1 / 1 / 3
Регистрация: 28.01.2013
Сообщений: 169
24.04.2013, 02:32  [ТС] 34
Цитата Сообщение от kravam Посмотреть сообщение
Я ничё не собираюсь выводить. Но если бы приспичило, то так:
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
67
68
69
#include <iostream>
#include <stack>
#include <stdio.h>
 
using namespace std;
 
const int N=3;
 
struct Football
 {
     char fio[10];
     int vozrast;
     int kol_gollov;
     double vremya;
     char legioner[3];
     double plata;
 
     //Во-первых запомни, поля структур инициализируются в конструкторе
     //НО если эти значения непременно водятся с консоли, то, возможно, оно и лишнее
     Football () {kol_gollov= 0; vremya= 0; plata= 0;}
 
 
 };
stack <Football> football;
 
int main()
{
    
    //Тут всё просто:
    
    //Объявляешь переменную типа Football
    Football Football_;
    
    for (int i= 0; i< N; i++) {
        //И заполняешь её
        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;
     
          
        //Ну и кладём всё это дело в стек  
        football.push (Football_);  
    } 
     
    
    //ВЫвод:
    while (!football.empty())  {
     cout <<  football.top().fio<< endl;
     cout <<  football.top().vozrast<< endl;
     cout <<  football.top().kol_gollov<< endl;
     cout <<  football.top().vremya<< endl;
     cout <<  football.top().legioner<< endl;
     cout <<  football.top().plata<< endl;
     football.pop();
    }
    
    
    
    return 0;
}
for (int i= 0; i< N; i++) этот цикл нужен для того, чтобы в стек засунуть нужное нам кол-во переменных Football_ ?
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
24.04.2013, 08:47 35
Естессно
0
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
24.04.2013, 10:13 36
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Уговорили.
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <set>
#include <vector>
#include <limits>
#include <queue>
#include <stdio.h>
#include <string>
 
using namespace std;
 
struct Football{
    char fio[10];
    int vozrast;
    int kol_gollov;
    double vremya;
    char legioner[3];
    double plata;
    Football () {
        kol_gollov = 0;
        vremya = 0;
        plata = 0;
    }
    void in(){
        cout<<"Vvedite familiu imya otchestvo"<<endl;
        cin>>fio;
        cout<<"Vozrast"<<endl;
        cin>>vozrast;
        cout<<"Kollichestvo golov"<<endl;
        cin>>kol_gollov;
        cout<<"Vremya"<<endl;
        cin>>vremya;
        cout<<"Yavlyaentsya legionerom? (yes/no)"<<endl;
        cin>>legioner;
        cout<<"Zar_plata"<<endl;
        cin>>plata;
    }
    void out(){
        cout <<  this->fio << " ";
        cout <<  this->vozrast << " ";
        cout <<  this->kol_gollov << " ";
        cout <<  this->vremya << " ";
        cout <<  this->legioner << " ";
        cout <<  this->plata << endl;
    }            
};
 
class Tstack{
public:
    struct stack{
        Football inf;
        stack *next;
    };
    stack *head;
    Tstack(){
        head =  NULL;
    }
    void push(Football x){
        stack *st = new stack;
        st->inf = x;
        st->next = head;
        head = st;
    }
    bool empty(){
        return !head;
    }
    Football pop(){
        stack *nhead = head;
        Football c = head->inf;
        head = nhead->next;
        delete nhead;
        return c;
    }
    void show(){
        stack *st = head;
        while (st) {
            st -> inf.out();
            st = st->next;
        } 
    }
}; 
 
 
 
 
int main(){            
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    Tstack nazvaniesteka;
    for (int i= 0; i < 3; i++) {
        Football temp;
        temp.in();
        //Ну и кладём всё это дело в стек  
        nazvaniesteka.push(temp);  
    } 
    nazvaniesteka.show();
    return 0;
}
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
24.04.2013, 10:27 37
yoghurt92, а вы и так в очереди поудаляли. Кстати, вы не правы, если идти по итераторам можно без удаления вывести в 1 проход.
Какие же итераторы у стека и очереди?
0
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
24.04.2013, 10:39 38
Герц, я уже написал
бегунок по ->next
В STL нет стандартной реализации итераторов в stack, либо я о ней не знаю, зато я привёл структуру стека в которой можно спокойно итерировать по указателям

Добавлено через 1 минуту
Герц,
C++
1
2
3
4
5
6
7
void show(){
        stack *st = head;
        while (st) {
            st -> inf.out();
            st = st->next;
        } 
    }
итерируем по всему стеку и не удаляем элементы
0
24.04.2013, 10:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2013, 10:39
Помогаю со студенческими работами здесь

создание стека
Люди помогите не могу создать стек проблема в том что нельзя использовать классы и сижу как дурак...

Создание универсального стека
Прошу помощи в создании универсального стека. Вообще в реализации стека хранящего определенный тип...

Задача на создание стека
Задача состоит в том, чтобы создать стек через массив.

Создание стека и проверка на палиндром
Вроде как правильные функции создание и извлечение из стека, но дальше путаюсь с указателями....


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru