Вторник, 2024-12-03
math.ucoz.com
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Стек
MathДата: Пятница, 2009-05-22, 6:14 PM | Сообщение # 1
Рядовой
Группа: Администраторы
Сообщений: 19
Репутация: 0
Статус: Offline
Стек- это одна из самых простых и распространённых структур данных, которая представляет из себя упорядоченный набор элементов, в котором размещение элементов и их удаление осуществляется только с одного конца.
Основные операции со стеком:
Удобнее всего создать класс для работы со стеком, описание которого будет выглядеть примерно так:
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;
    }
}

Полный исходник демонстрационной программы прикрепляю к сообщению.
Прикрепления: stack.cpp (2.4 Kb)
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright math.ucoz.com © 2024
Хостинг от uCoz