Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
GIGAbyte.
30 / 30 / 6
Регистрация: 27.08.2011
Сообщений: 148
#1

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

08.01.2012, 16:42. Просмотров 4038. Ответов 4
Метки нет (Все метки)

Добрый день, я уже 1,5 года учусь программировать на разных языках, в основном таких как
pascal, c++, php, и хочу в каждом научиться работать указателями, ссылками; При изучении я встретился с словом "STECK", я прочетал пару статей в интернете и представил что такое стек,
например тут:


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


Но не понял сам смысл стека, зачем нежен стек? что дает? это как некая память? Кто что знает? помогите хочу понять смысл и научиться работать с ними.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2012, 16:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зачем нужны стеки (STACK) ? (C++):

Зачем нужны контейнеры stack, queue, list, если это всё можно заменить вектором? - C++
В чём их преимущество? Оптимизация?

Задания на стеки/очереди (без шаблонных классов stack, queue) - C++
Помогите, пожалуйста. Нужно добавить в очередь нечетные целые числа от -3 до 3. Все числа из очереди извлекать по одному и отрицательные...

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? - C++
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Зачем нужны указатели - C++
Не могу понять синтаксис указателей. Понял, что это работа с адресами, что оператор & это адрес. А вот * как я понял, это объявление...

Зачем нужны итераторы? - C++
Практическое использование мне понятно - с их помощью обходят контейнеры и т.д и т.п.Но почему не реализовать нужные методы,перегрузить...

Зачем нужны исключения? - C++
Добрый вечер, прочитал статью об исключениях, не очень понимаю, почему бы не заменить их просто оператором if? Вот код с исключением: ...

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


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


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

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

Не по теме:

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

1
easybudda
Модератор
Эксперт CЭксперт С++
9693 / 5643 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
08.01.2012, 17:24 #5
GIGAbyte., что такое массив, Вы себе представляете? Некоторый набор однотипных (не обязательно в php, всегда в С/С++) данных, к которым можно обращаться от перврго к последнему, от последнего к первому, или в произвольном порядке. Основная проблема, связанная с массивами - заранее определённый размер. Класс vector из STL на самом деле только создаёт видимость динамического мпссива, просто резервируется некоторое количество памяти, если её не хватает - выделяется больше и тоже с запасом. В случае, если произвольный доступ не нужен, но количество данных заранее не известно, вместо массива можно использовать список. Ну к примеру нужно получить некоторое количество данных и, не теряя их, найти наибольшее и наименьшее значения. Для этого достаточно весь список просмотреть один раз от первого до последнего значения. Дальше больше - очередь. Некоторая последовательность данных, которую нужно обработать в том же порядке, в котором они поступали, при чём после обработки данные уже не нужны. Очередь можно организовать как на основе массива (не лучшее на мой взгляд решение), так и на основе списка. Главное, что данные из неё будут обрабатываться по принципу "первым вошёл - первым вышел". Ну и собственно стек - обратный случай очереди. Данные обрабатываются в порядке, обратном поступлению ("последним вошёл - первым вышел"). Стек так же можно организовать как на основе массива, так и на основе списка. Но в отличии от очереди, стек, основанный на массиве - вполне разумное решение в том случае, если размер стека (максимальное количество данных, которые в нём могут разместиться) строго задан и наполнение, извлечение данных происходит достаточно часто, чтобы динамическое выделение памяти под них стало неэффективным. Области применения в пользовательских приложениях - собственно везде, где нужна обработка данных в порядке, обратном их поступлению...
2
08.01.2012, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2012, 17:24
Привет! Вот еще темы с ответами:

Зачем нужны указатели? - C++
Интересует вопрос, зачем нужны указатели? Например почему лучше нужно объявлять переменные как указатели, почему как обычно нельзя? ...

Зачем нужны классы? - C++
Изучаю СИ++ после изучения СИ. Не пойму какой смысл в классах. То что они делают можно реализовать с помощью функций, структур и обычных...

Зачем нужны сортировки - C++
Скажите пожалуйста, зачем при подготовке к олимпиаде по программированию, нужно учить алгоритмы: Быстрая сортировка, сортировка пузырьком и...

Зачем нужны деревья? - C++
Изучил тему деревья (осуществлял втавки, удаление, обходы и т.д.). Теперь хочу разобраться, зачем они вообще нужны? В каких случаях надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru