Форум программистов, компьютерный форум CyberForum.ru

Зачем нужны стеки (STACK) ? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
GIGAbyte.
 Аватар для GIGAbyte.
30 / 30 / 6
Регистрация: 27.08.2011
Сообщений: 148
08.01.2012, 16:42     Зачем нужны стеки (STACK) ? #1
Добрый день, я уже 1,5 года учусь программировать на разных языках, в основном таких как
pascal, c++, php, и хочу в каждом научиться работать указателями, ссылками; При изучении я встретился с словом "STECK", я прочетал пару статей в интернете и представил что такое стек,
например тут:


Итак, что же такое структура данных Stack (Читается как Стэк) ? Чтобы было проще понять, представьте стопку книг. Если вы хотите положить книгу в стопку, то вы кладете ее наверх. А если хотите взять книгу, то сначала берете верхнюю. Вот стек делает то же самое.


Но не понял сам смысл стека, зачем нежен стек? что дает? это как некая память? Кто что знает? помогите хочу понять смысл и научиться работать с ними.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CJS
49 / 49 / 4
Регистрация: 17.07.2011
Сообщений: 379
08.01.2012, 16:51     Зачем нужны стеки (STACK) ? #2
Цитата Сообщение от GIGAbyte. Посмотреть сообщение
Добрый день, я уже 1,5 года учусь программировать на разных языках, в основном таких как
pascal, c++, php, и хочу в каждом научиться работать указателями, ссылками; При изучении я встретился с словом "STECK", я прочетал пару статей в интернете и представил что такое стек,
например тут:


Итак, что же такое структура данных Stack (Читается как Стэк) ? Чтобы было проще понять, представьте стопку книг. Если вы хотите положить книгу в стопку, то вы кладете ее наверх. А если хотите взять книгу, то сначала берете верхнюю. Вот стек делает то же самое.


Но не понял сам смысл стека, зачем нежен стек? что дает? это как некая память? Кто что знает? помогите хочу понять смысл и научиться работать с ними.
Смысл стека в том, чтобы сохранить некоторые вещи - контекст программы. Например при входе в какую-то функцию, некоторые переменные могут измениться. Для того чтобы гарантированно не потерять их значения, мы перед входом в функцию помещаем эти значения в стек, после выполнения функции из стека возвращаем их на круги своя.

Вобще это очень понятно когда на ассемблере программируют: у нас в регистрах лежат значения и мы входим в процедуру которая выполняет некоторые операторы ассемблера(мы так написали процедуру что там несколько операторов и сейчас ее вызвали). Эти операторы могут использовать те области памяти, в которых у нас лежат нужные значения и мы не хотим потерять те значения(а это даже не видно - они так работают что определенная команда по умолчанию пользуется той-то и той-то областью памяти). Для этого мы помещаем их в стек, а после выхода из процедуры возвращаем их оттуда. В ассемблере стек - это специальная область памяти для всего вышенаписанного. Вобщем там это очень удобно.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
08.01.2012, 17:05     Зачем нужны стеки (STACK) ? #3
Стек— структура данных, в которой доступ к элементам организован по принципу LIFO (last in — first out, «последним пришёл — первым вышел»). Что получить доступ к предпоследнему элементу, необходимо сначала взять последний. Добавление элементов осуществляется в вершину стека.
Это если вкратце.
Jupiter
08.01.2012, 17:09
  #4

Не по теме:

Цитата Сообщение от GIGAbyte. Посмотреть сообщение
Читается как Стэк
Цитата Сообщение от GIGAbyte. Посмотреть сообщение
"STECK"
пишется точно - стек - stack

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.01.2012, 17:24     Зачем нужны стеки (STACK) ? #5
GIGAbyte., что такое массив, Вы себе представляете? Некоторый набор однотипных (не обязательно в php, всегда в С/С++) данных, к которым можно обращаться от перврго к последнему, от последнего к первому, или в произвольном порядке. Основная проблема, связанная с массивами - заранее определённый размер. Класс vector из STL на самом деле только создаёт видимость динамического мпссива, просто резервируется некоторое количество памяти, если её не хватает - выделяется больше и тоже с запасом. В случае, если произвольный доступ не нужен, но количество данных заранее не известно, вместо массива можно использовать список. Ну к примеру нужно получить некоторое количество данных и, не теряя их, найти наибольшее и наименьшее значения. Для этого достаточно весь список просмотреть один раз от первого до последнего значения. Дальше больше - очередь. Некоторая последовательность данных, которую нужно обработать в том же порядке, в котором они поступали, при чём после обработки данные уже не нужны. Очередь можно организовать как на основе массива (не лучшее на мой взгляд решение), так и на основе списка. Главное, что данные из неё будут обрабатываться по принципу "первым вошёл - первым вышел". Ну и собственно стек - обратный случай очереди. Данные обрабатываются в порядке, обратном поступлению ("последним вошёл - первым вышел"). Стек так же можно организовать как на основе массива, так и на основе списка. Но в отличии от очереди, стек, основанный на массиве - вполне разумное решение в том случае, если размер стека (максимальное количество данных, которые в нём могут разместиться) строго задан и наполнение, извлечение данных происходит достаточно часто, чтобы динамическое выделение памяти под них стало неэффективным. Области применения в пользовательских приложениях - собственно везде, где нужна обработка данных в порядке, обратном их поступлению...
Yandex
Объявления
08.01.2012, 17:24     Зачем нужны стеки (STACK) ?
Ответ Создать тему
Опции темы

Текущее время: 23:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru