Что такое структура данных "стек" (англ. - stack) на языке C++.
Давайте представим, что перед вами стоит цилиндр, в котором верхняя часть срезана, тем самым образуя цилиндрическую коробку. На дне этой коробки расположена пружина, а диаметр этого цилиндра равен диаметру обычных тарелок.
Кладем в нашу коробку тарелки, допустим 5 штук. И теперь вопрос: как достать 4-ю тарелку?
Правильный ответ - это вытащить три предыдущие и затем уже четвертую. Именно так работает структура данных "стек" - "первым пришел, последним ушел" или FILO (First In Last Out) . Только теперь представьте, что тарелки- это информационная, а цилиндр- это структурная части. Теперь перейдем к разновидностям стеков.
Стеки бывают двух типов:
- Статические
- Динамические
В чём их отличие?
Статический стек в отличие от динамического имеет ограниченное кол-во тарелок(информации). В этом и есть их главное различие.
Вот пример объявления статического стека:
struct Stack_1 { int info_1; int count_1; }; //объявляем статический стек. Stack p_1;
Вот пример объявления динамического стека:
struct Stack_2 { int info_2; Stack *next_2; } ; //объявляем динамический стек Stack *begin_1,*t_1;
где *begin - вершина стека (первая тарелка, которую нужно вытащить) и *t - текущий указатель.
Для стеков существуют три главные операции это:
- Добавление
- Удаление
- Чтение
Давайте рассмотрим каждую из функций по отдельности. Начнем с чтения динамического стека:
void View_1 (Stack_1 *p_1) { Stack_1 *t_1 = p_1; if ( p_1 == 0 ) { //проверка, есть ли элементы в стеке. cout << “ Стек пуст! ” << endl; return; } while( t != 0) { //выполнять цикл, пока не наткнемся на последний элемент. cout << t_1->info_1 << endl; t_1 = t_1 -> next_1; //переходим к следующему элементу. } }
Данной функцией, вы сможете прочитать весь ваш стек от А до Я.
Для удаления стека, вы можете воспользоваться данной функцией:
void Del ( Stack **p_1 ) { Stack *t_1; while ( *p_1 != 0) { t_1 = *p_1; *p_1 = (*p_1) -> next_1; delete t_1; } }
И для добавления элементов в стек можно использовать данную функцию:
Stack_1* InStack_1 (Stack_1 *p+1, int in_1) { Stack_1 *t_1 = new Stack_1; t_1 -> info_1 = in_1; //формируем информационную часть. t_1 -> next_1 = p_1; //формируем адресную часть. return t_1; }
Код был написан на Visual studio 2015. Надеемся, что теперь вы полностью разобрались со структурой данных stack.