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

Куда помещается элемент в стеке? - C++

Восстановить пароль Регистрация
 
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 14:35     Куда помещается элемент в стеке? #1
В разделе про работу функции сказано, что для этого применяется стек. И всё это описано.
Есть такая фраза, цитирую:
При помещении элемента в стек он размещается на полке, расположенной над вершиной стека, после чего указатель вершины изменяется таким образом, чтобы указывать на новое значение.
Или я не пойму чего-то, или у автора опечатка. Он сам дальше пишет, что указатель указывает на вершину стека, все ячейки ниже это есть элементы в стеке, а все ячейки выше - это вне стека. Значит при записи новый элемент должен помещаться в ячейку, на которую сейчас указывает указатель, то есть в вершину стека, а потом указатель должен подниматься на 1 позицию вверх. А почему он пишет над вершиной? Автор же сам себе противоречит. Не понимаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 14:35     Куда помещается элемент в стеке?
Посмотрите здесь:

C++ Вопрос о стеке
C++ не помещается в консоль
C++ Структура в стеке
C++ Выделение памяти на стеке
C++ Перетасовать элементы в стеке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.04.2012, 14:39     Куда помещается элемент в стеке? #2
Alex Z, Ну при добавлении элемента элемент сначала размещается над вершиной стека, затем он становится вершиной. Что не ясно?
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 14:40  [ТС]     Куда помещается элемент в стеке? #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Alex Z, Ну при добавлении элемента элемент сначала размещается над вершиной стека, затем он становится вершиной. Что не ясно?
А сюда нельзя рисунок прикрепить? Словами не объяснить.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.04.2012, 14:44     Куда помещается элемент в стеке? #4
Alex Z, Хм. Вкратце.

Стек : a b c d.
элемент со значение d - вершина стека.
Мы хотим положить в стек элемент со значением e.
Создали узел. Стек : a b c d. Узел : e.
Добавили наш узел в стек. Стек : a b c d e.
элемент со значением e - вершина стека.
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 14:52  [ТС]     Куда помещается элемент в стеке? #5
Цитата Сообщение от ForEveR Посмотреть сообщение
Alex Z, Хм. Вкратце.

Стек : a b c d.
элемент со значение d - вершина стека.
Мы хотим положить в стек элемент со значением e.
Создали узел. Стек : a b c d. Узел : e.
Добавили наш узел в стек. Стек : a b c d e.
элемент со значением e - вершина стека.
Как-то не так. Если у нас стек из 4-х элементов: a, b, c, d. То пусть они занимают ячейки в памяти с номерами: 1, 2, 3, 4. Тогда указатель на вершину стека будет смотреть на ячейку 5, но там нет элемента. А если я пихаю туда элемент c, то он по-идее должен попасть именно в вершину стека (то есть в ячейку 5). А потом указатель на вершину смещается и показывает на ячейку 6. Мне показалось так.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.04.2012, 14:54     Куда помещается элемент в стеке? #6
Alex Z, Нет. Указатель на вершину стека - указывает на элемент находящийся на вершине.
Т.е. Стек : a b c d. Вершина - указатель на элемент d.
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 14:56  [ТС]     Куда помещается элемент в стеке? #7
Цитата Сообщение от ForEveR Посмотреть сообщение
Alex Z, Нет. Указатель на вершину стека - указывает на элемент находящийся на вершине.
Т.е. Стек : a b c d. Вершина - указатель на элемент d.
А в книге он указывает выше последнего элемента. Значит ошибка в рисунке, а не в тексте.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.04.2012, 14:57     Куда помещается элемент в стеке? #8
Вы про ассемблер что ли?
Если да, то там элементы заполняются сверху вниз, допустим esp(вершина стека) указывает на участок памяти 0x12345, мы делаем push(добавляем в стек переменную, допустим, 4 байта), адрес становится равным 0x12341.
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 14:58  [ТС]     Куда помещается элемент в стеке? #9
Цитата Сообщение от diagon Посмотреть сообщение
Вы про ассемблер что ли?
Если да, то там элементы заполняются сверху вниз, допустим esp(вершина стека) указывает на участок памяти 0x12345, мы делаем push(добавляем в стек переменную, допустим, 4 байта), адрес становится равным 0x12341.
Про С++
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.04.2012, 14:59     Куда помещается элемент в стеке? #10
Alex Z, Вообще по сути call-stack реализован либо на С, либо на асме. А вы судя по всему спрашиваете именно про call-stack.
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 15:01  [ТС]     Куда помещается элемент в стеке? #11
Цитата Сообщение от ForEveR Посмотреть сообщение
Alex Z, Вообще по сути call-stack реализован либо на С, либо на асме. А вы судя по всему спрашиваете именно про call-stack.
Я не знаю. Просто стек. Так написано в книге "Либерти - С++ за 21 день". Стр. 130.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.04.2012, 15:17     Куда помещается элемент в стеке? #12
Пример.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
 
class Stack
{
public:
   struct Node
   {
      explicit Node(int val = 0, Node* n = 0):
      next(n), value(val)
      {
      }
      typedef int type;
      Node* next;
      type value;
      void trace()
      {
         std::cout << "Current: " << (void*)this
            << " Next: " << (void*)next << std::endl;
      }
   };
public:
   Stack():top(0)
   {
   }
   ~Stack() { clear(); }
   size_t size() const { return sz; }
   void push(const Node::type& value)
   {
      Node* tmp = new Node(value, top);
      tmp->trace();
      top = tmp;
      ++sz;
      top->trace();
   }
   void pop()
   {
      if (top)
      {
         top->trace();
         Node* t = top->next;
         delete top;
         top = t;
         top->trace();
         --sz;
      }
   }
   const Node::type get() const { return top ? top->value : Node::type(); }
   bool empty() const { return sz == 0; }
private:
   Stack(const Stack&);
   Stack& operator =(const Stack&);
   void clear()
   {
      while (!empty())
      {
         pop();
      }
   }
   Node* top;
   size_t sz;
};
 
int main()
{
   Stack st;
   st.push(1);
   st.push(5);
   st.push(3);
   while (!st.empty())
   {
      std::cout << st.get() << std::endl;
      st.pop();
   }
}
http://liveworkspace.org/code/cc7c03...a697e526103d42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2012, 15:20     Куда помещается элемент в стеке?
Еще ссылки по теме:

C++ Помещается ли один прямоугольник в другом?
C++ Размещаются ли члены в стеке?
Найти в стеке самый максимальный элемент и удалить его C++

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.04.2012, 15:20     Куда помещается элемент в стеке? #13
Все там правильно написано.
Допустим, есть стек(заполняется снизу вверх):
a <- вершина стека
b
c
Ложим туда элемент d, получается
d
a <- вершина стека
b
c
Затем изменяем указатель вершины стека, получается
d <- вершина стека
a
b
c
Т.е. вы слишком буквально воспринимаете фразу "вершина стека", в данном случае она обозначает указатель, а вовсе не самый верхний элемент.
Yandex
Объявления
09.04.2012, 15:20     Куда помещается элемент в стеке?
Ответ Создать тему
Опции темы

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