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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
#1

Класс стека - C++

14.09.2012, 21:49. Просмотров 2394. Ответов 21
Метки нет (Все метки)

Здравствуйте!помогите создать класс стека, чтобы входные данные были из списка....как я понимаю, это должно быть в конструкторе или нет? и правильно ли я пытаюсь реализовать?
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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
 
const int maxlen =100;
 
class stack
{
    int s[maxlen];
    int top;
    void pop(int top, int x);
    void push(int top);
    bool empty(int top);
    stack();
    stack(int top);
}
stack::stack()
{
    top=0;
}
stack::stack(int top)
 
 void stack::pop(int top,int x){
     if (top=maxlen) cout<<"Cтек полон"<<endl;
     s[top]=x;
    top++;
 }
 void stack::push(int top)
 { if (top==0) cout<<"Стек пуст"<<endl;
   top--;
 }
 bool stack::empty (int top)
 {
     if (top==0) return 1;
     else return 0;
 }
 
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2012, 21:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс стека (C++):

Класс стека - C++
нужна помаш в написание одной программы(задачи) вот сама задача: Задание: Реализовать и протестировать контейнерный класс...

Класс итератор для стека - C++
Доброго времени суток! Обращаюсь к вам за помощью. Хоть сама в тему эту не совсем влилась, прошу гляньте код. Ругается, но я...

Основы ООП. Создание стека через класс - C++
Приветствую всех пользователей форума. Относительно недавно начал осваивать ООП. Было необходимо выполнить следующее задание : нужно...

Создать класс для работы со стеком. Элемент стека – действительное число - C++
Создать класс для работы со стеком. Элемент стека – действительное число. Применить класс для вывода возрастающих серий последовательности...

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...) - C++
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Удалить элемент из стека по условию и добавить элемент в начало стека - C++
Здравствуйте, помогите пожалуйста исправить(дописать) программы. 1). Нужно удалить элемент, находящийся в середине стека , если число...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.09.2012, 00:53 #16
Замени 'not' на '!'. В остальном там все понятно, и уже описано в моем предыдущем сообщении.
1
yuliyayuliya28
4 / 4 / 0
Регистрация: 06.03.2011
Сообщений: 319
15.09.2012, 01:02  [ТС] #17
Цитата Сообщение от Герц Посмотреть сообщение
Замени 'not' на '!'. В остальном там все понятно, и уже описано в моем предыдущем сообщении.
Вы волшебник заработала...а в к этой строке создётся объект stack stck( elementList ); так?только к нему пуш и поп не заработают ведь..
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.09.2012, 01:12 #18
Создается объект stack под именем stck, конструктору в качестве параметра передается список элементов в стеке, эти элементы автоматом загоняются в стек.
Почему не заработают?
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.09.2012, 01:50 #19
как-то странно выглядит такой код:
C++
1
2
3
4
5
6
7
8
9
    std::list< int > elementList;
 
    while ( not file.eof() ) {
        int tmp;
        file >> tmp;
        elementList.push_back( tmp );
    }
 
    stack stck( elementList );
зачем тут посредник в виде std::list?

C++
1
2
3
4
5
6
    stack stck; //  тут у стека должен быть дефолтный конструктор, что вполне естественно для стека
    while ( not file.eof() ) {
        int tmp = 0;
        file >> tmp;
        stck.push( tmp );
    }
И если уж делать конструктор со списком, то лучше использовать готовые функции в самом же стеке, а то ведь переданный список может оказаться больше максимального размера стека. т.е.:

C++
1
2
3
4
5
6
7
stack( const std::list< int >& elst )
: top( 0 )
{
    for ( std::list< int >::const_iterator it = elst.begin(); it != elst.end(); ++it ) {
        push(*it); // используем имеющуюся функцию.
    }
}
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.09.2012, 02:04 #20
Задача была сформулирована как "загрузить стек из списка", а это её точное решение.
И если уж делать конструктор со списком, то лучше использовать готовые функции в самом же стеке, а то ведь переданный список может оказаться больше максимального размера стека. т.е.:
Как-то не очень круто вызывать push в конструкторе, а если push будет виртуальной?
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
15.09.2012, 02:29 #21
этот класс не спроектирован так, чтобы быть базой для чего-то еще. по крайней мере стандартные контейнеры такие и этот скорее всего такой-же. допустим что все-таки такое возможно. тогда почему вы считаете, что
C++
1
2
3
for ( std::list< int >::const_iterator it = elst.begin(); it != elst.end(); ++it ) {
        s[ top++ ] = *it;
    }
- это корректное заполнение? Если в производном классе будет какой-то особый пуш, то базовый класс никак не сможет корректно заполнить стек, ведь он не знает ничего о наследниках.


Вообще для построения стека я бы посоветовал почитать Саттера:
http://www.rsdn.ru/res/book/cpp/Satter.xml
начало 2 главы как раз посвящено как правильно написать кошерный класс для стека. все разжевано до мелочей. если кому-то все же лень - то где-то там присутствует весь код в сборе.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.09.2012, 13:09 #22
Если в производном классе будет какой-то особый пуш, то базовый класс никак не сможет корректно заполнить стек, ведь он не знает ничего о наследниках.
Конструктор в принципе ничего не знает о наследниках.

Добавлено через 9 часов 59 минут
Впрочем, Вы правы, не стоит повторять себя.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2012, 13:09
Привет! Вот еще темы с ответами:

Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести эталонный символ. - C++
Создать стек для символов. Максимальный размер стека вводится с экрана. Создать функции для ввода и вывода элементов стека. Ввести...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами - C++
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Отдельно класс данных, класс формул и главный класс - C++
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.09.2012, 13:09
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru