|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.11.2011, 21:58 | #1 |
Регистрация: 30.08.2011
Сообщений: 7
|
Реализация стека
Здравствуйте, знаю, что есть много литературы и примеров кода по этому вопросу, но мне непонятно все же. Дали "шаблон задания", выглядит так
Код:
Код:
Помогите, пожалуйста, разобраться. |
17.11.2011, 22:42 | #2 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Это - достаточно нетипичный шаблон для стека, обычно учат хранить связный список внутри объекта. Тут тебе придется извращаться как-то так, например:
Код:
|
17.11.2011, 23:51 | #3 |
Регистрация: 30.08.2011
Сообщений: 7
|
Спасибо большое! Я правильно понимаю, что
Код:
Код:
И ещё вопрос как можно вывести все элементы, содержащиеся у меня в стеке? Через next[i].value? Или это совсем бред? |
17.11.2011, 23:59 | #4 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Мы создаем новый элемент; записываем в него то, что было раньше записано в вершине стека; вместо этого в вершину записываем новое значение; а потом полю next новосозданного элемента присваиваем то, что было в поле next вершины. Проще говоря - вставляем новый элемент в цепочку между вершиной и следующим за ней элементом, если он был. Если его не было - в его поле next просто запишется 0 и ничего страшного не случится
А перебирать элементы проще всего через несколько последовательных вызовов pop (только ее сначала придется написать, да). А через next[i] обращаться нельзя, это ж единственный указатель ) |
18.11.2011, 19:59 | #5 |
Регистрация: 30.08.2011
Сообщений: 7
|
..., я прошу прощение за свою тупость, но можете ещё объяснить, как вообще происходит запись в стек? Никак я не понимаю, куда вообще записывается что, и как к этой записи обращаться.
Вот у меня изначально создается объект - Stack s(10), значение 10 записывается в value, затем, по методу s.push(7) создается новый элемент и записывается значение 7, опять же в value, но уже нового элемента? Т.е. выделяется ещё одна ячейка памяти под этот элемент? Если да, то как к ней обратиться? И еще вопрос, вот у меня записано в стеке 10,7,8. Если я пишу Stack::value, он у меня выводит соответственно, последнее записанное значение - 8. В методе pop() получается я должна вывести, находящееся значение в стеке и удалить это значение, вот это самое 8, и при повторном вызове pop() у меня уже в стеке будет храниться уже предыдущее значение -7. Так? |
18.11.2011, 20:19 | #6 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
То есть операция просмотра стека связана с операцией последовательного удаления из стека элементов. В этом и состоит суть стека. Но у вас в дизайне вашего стека есть проблема. Когда у вас в стеке один элемент, то не понятно, как его удалить и какое при этом будет состояние стека.
Со мной можно встретиться на www.clipper.borda.ru
|
|
18.11.2011, 21:04 | #7 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Все правильно, да. Только тебе все же придется чуть переделать этот "шаблон" - внести связный список внутрь объекта полностью. Иначе функции push и pop получатся чересчур эзотеричными )
В общем, добавься ко мне в аську, если еще будут вопросы, там удобнее разбираться. |
21.11.2011, 22:53 | #8 |
Регистрация: 30.08.2011
Сообщений: 7
|
Спасибо, вроде разобралась =), вот, что у меня вышло
Код:
Пробовала писать Head -> value = _value в конструкторе, выводит ошибку Необработанное исключение в "0x013814fc" в "stack22.exe": 0xC0000005: Нарушение прав доступа при записи "0xccccccd0". |
21.11.2011, 23:21 | #9 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Осталось добавить в конструктор строчку
Код:
|
22.11.2011, 00:00 | #10 |
Регистрация: 30.08.2011
Сообщений: 7
|
Спасибо огромное!!! =)
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Реализация стека | basilius90 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 03.06.2010 17:01 |
C++, реализация стека | OffyGhost | Помощь студентам | 2 | 28.03.2010 07:02 |
Реализация стека на С | Angriff | Помощь студентам | 14 | 01.03.2010 10:51 |
Реализация Стека | MjRed | Общие вопросы C/C++ | 3 | 13.05.2009 12:18 |