Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Стек

390
24 октября 2005 года
lexus
143 / / 13.04.2004
Я создаю стек, но не пойму, как производить удаление.Подскажите, пожалуйста:
class CStack{
public:
CStack();
~CStack();
CStack* top;
CStack* push(double);
double d;
double pop();
};

/////
CStack::CStack(){}
CStack::~CStack(){
}
CStack* CStack::push(double a){
CStack* st=new CStack;
st->d=a;
st->top=this;
return st;
}

double CStack::pop(){
?????????????????????
}
4.8K
24 октября 2005 года
xm...
45 / / 20.11.2004
А у тебя не совсем стек. Очередности элементов-то нет. Должно быть такая последовательность элементов: top -> a -> b -> c -> ... -> NULL. А получается, что элементы не связаны друг с другом и имеют указатели только на заголовок top, и непонятно какой из них добавили последним.
1.9K
24 октября 2005 года
solovey
113 / / 25.07.2004
Цитата:
Originally posted by lexus
Я создаю стек, но не пойму, как производить удаление.Подскажите, пожалуйста:
class CStack{
public:
CStack();
~CStack();
CStack* top;
CStack* push(double);
double d;
double pop();
};

/////
CStack::CStack(){}
CStack::~CStack(){
}
CStack* CStack::push(double a){
CStack* st=new CStack;
st->d=a;
st->top=this;
return st;
}

double CStack::pop(){
?????????????????????
}



вообще-то твой код не реализует стек. Стек - это множество однотипных элементов, т.е. функция top() возвращает значение верхнего элемента, причем тип его не обязательно CStack*, а может быть и int, и std::string, и т.д.

Вот самый простой CStack

Код:
template< typename ElType >struct Link
{
        Link< ElType > * o_Next;
        ElType o_Val;

        Link(): o_Next(0),o_Val(EType()){};
        Link(Link< ElType >  * Next): o_Next(Next),o_Val(ElType()){};
        Link(Link< ElType >  * Next,ElType const& Val): o_Next(Next),o_Val(Val){};
        Link(Link< ElType > const& Orig): o_Next(Orig.o_Next),o_Val(Orig.o_Val){};
};

template< typename ElType >class CStack
{
        Link< ElType > * m_Top;
        size_t                         m_Size;
        public:
                CStack():m_Top(0),m_Size(0){};
                ~CStack();

                void push(ElType const& El);
                void pop();
                ElType& top();

                //true - если стек пуст
                bool empty()
                {return m_Size == 0;};
};

template< typename ElType >CStack< ElType >::~CStack()
{
        Link< ElType > * temp = m_Top;
        while(temp != 0)
        {
                m_Top = m_Top->o_Next;
                delete temp;
                temp = m_Top;
        }
}

template< typename ElType >void CStack< ElType >::push(ElType const& El)
{
        ++m_Size;
        Link< ElType > * temp = new Link< ElType >(m_Top,El);
        m_Top = temp;
}

template< typename ElType >void CStack< ElType >::pop()
{
        --m_Size;
        Link< ElType > * temp = m_Top->o_Next;
        delete m_Top;
        m_Top = temp;
}

template< typename ElType>ElType& CStack< ElType >::top()
{
        return m_Top->o_Val;
}
390
24 октября 2005 года
lexus
143 / / 13.04.2004
Спасибо, сейчас буду разбираться
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог