Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2011, 22:13   #1
Наталья(Яшка)
Новичок
Джуниор
 
Регистрация: 23.01.2011
Сообщений: 1
По умолчанию задач на С++(очень долого мучаюсь, не получается)

Описать класс стек целых чисел, создать экземпляр данного класса,заполнить его, извлечь из него элементы, выводя на экран только четные.

прошу помогите пожалуйста, скоро голова лопнет, ничего не получается!

вот что напробовала..

#include<iostream.h>
#include<conio.h>
class Stack
{
private:
struct SpL
{
int element;
SpL *next;
};
SpL *first;
SpL *last;
public:
Stack()
{
first = NULL;
last = first;
}
void add(int v)
{
if (first == NULL)
{
first = new SpL;
first->element = v;
first->next = first;
last=first;
}
else
{
SpL* temp = new SpL;
temp->element = v;
temp->next = first;
last->next = temp;
last = temp;
}
}
bool Pusto()
{
if(first == NULL)
return true;
else
return false;
}
~Stack()
{
while (Pusto()!=true)
{
SpL *t=first;
SpL *t2=t->next;
while(t2!=NULL)
{delete t;
t=t2;
t2=t->next;
}
}
}
int find()
{
SpL *t;
t=first;
while (t->next!=first)
{
if(t->element%2==0)
{cout<<t->element;}
t=t->next;
}

}
};
void main()
{
Stack q; int c;
cout << "Vvedite element ocheredi (0 - dlya zaversheniya):";
do
{
cin >> c;
if (c == 0)
{
break;
}
q.add(c);
}
while(true);
cout <<"Chetn: ";
q.find();
getch();
}

Последний раз редактировалось Наталья(Яшка); 23.01.2011 в 22:20.
Наталья(Яшка) вне форума Ответить с цитированием
Старый 24.01.2011, 09:18   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Для стека не нужно двух указателей first, last.
Достаточно одного на вершину стека, т.е. на последний элемент, помещенный в стек. А указатель next самого первого элемента приравниваешь NULL. По NULL ты и определишь, что стек исчерпан.

А ты похоже реализуешь не стек, а очередь.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 24.01.2011, 09:39   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Что-то типа стека. Вывод на экран только четных элементов сделаешь сама

Код:
#include <iostream>

using namespace std;

class Stack
{
    private:
        int stack[100];
        int i;
    public:
        Stack()
        {
            i = 0;
        }

        int pop()
        {
            if(i > 0)
                return stack[--i];

            return 0;
        }

        void push(int n)
        {
            stack[i++] = n;
        }
};

int main()
{
    Stack stack;

    stack.push(1);
    stack.push(2);
    stack.push(3);
    stack.push(4);

    cout << stack.pop() << endl;
    cout << stack.pop() << endl;
    cout << stack.pop() << endl;
    cout << stack.pop() << endl;

    return 0;
}

Последний раз редактировалось profi; 24.01.2011 в 09:47.
profi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[LAZARUS] Не получается убрать приложение с панели задач. Alex Cones Lazarus, Free Pascal, CodeTyphon 9 24.08.2010 22:05
Требуюсь в помощи с решением задач, очень срочно Star Fish Помощь студентам 2 06.08.2010 09:37
не получается отключение CTRL+alt+del? Alt+TAb, часов с панели задач и Крестик окна Reds Общие вопросы Delphi 1 30.09.2008 10:37
Помогите пожалуйста решить задачу!Очень нужно у самой не получается! Lilu Monechi Помощь студентам 2 19.05.2008 19:38