Стек- это одна из самых простых и распространённых структур данных, которая представляет из себя упорядоченный набор элементов, в котором размещение элементов и их удаление осуществляется только с одного конца.
Основные операции со стеком:
Удобнее всего создать класс для работы со стеком, описание которого будет выглядеть примерно так:
Code
struct ELEMENT//элемент стека
{
int Content;
ELEMENT* Next;
};
typedef ELEMENT *LPELEMENT;//указатель на элемент стека
class STACK
{
public:
STACK();//конструктор
~STACK();//деструктор
bool Push(int Content);//добавление элемента
bool Pop(int &Content);//изъятие элемента
void Clear();//очистка стека
int Length();//определение количества элементов в стеке
void OutPut();//Вывод стека
private:
LPELEMENT Start;//Начало стека
};
Основные процедуры- добавление элемента:
Code
bool STACK::Push(int Content)//Добавляет в начало стека элемент со значением Content,
{ //в случае успешного добавления элемента вернёт true, иначе- false
LPELEMENT NE=new ELEMENT;
if(!NE)
return false;
NE->Content=Content;
NE->Next=Start;
Start=NE;
return true;
}
Извлечение элемента:
Code
bool STACK::Pop(int &Content)//Извлекает из стека элемент в переменную Content
{ //в случае успешного извлечения элемента вернёт true, иначе- false
if(!Start)
return false;
Content=Start->Content;
LPELEMENT Temp=Start;
Start=Start->Next;
delete Temp;
return true;
}
Очистка стека:
Code
void STACK::Clear()//очищает стек
{
LPELEMENT Temp;
while(Start)
{
Temp=Start;
Start=Start->Next;
delete Temp;
}
return;
}
Подсчёт количества элементов в стеке:
Code
int STACK::Length()//Возвращает число элементов в стеке
{
LPELEMENT Temp;
unsigned int i=0;
while(Start)
{
Temp=Start;
Start=Start->Next;
i++;
}
return i;
}
Вывод на экран всех элементов:
Code
void STACK::OutPut()//выводит в консоль все элементы стека
{
if(!Start)
{
printf("стек пуст\n");
return;
}
LPELEMENT Temp=Start;
while(Temp)
{
printf("%i\n",Temp->Content);
Temp=Temp->Next;
}
}
Полный исходник демонстрационной программы прикрепляю к сообщению.