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;
}
Стек
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 -> a -> b -> c -> ... -> NULL. А получается, что элементы не связаны друг с другом и имеют указатели только на заголовок top, и непонятно какой из них добавили последним.
Цитата:
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(){
?????????????????????
}
Я создаю стек, но не пойму, как производить удаление.Подскажите, пожалуйста:
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
Код:
Спасибо, сейчас буду разбираться