Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
1

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

09.04.2012, 14:35. Показов 1300. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В разделе про работу функции сказано, что для этого применяется стек. И всё это описано.
Есть такая фраза, цитирую:
При помещении элемента в стек он размещается на полке, расположенной над вершиной стека, после чего указатель вершины изменяется таким образом, чтобы указывать на новое значение.
Или я не пойму чего-то, или у автора опечатка. Он сам дальше пишет, что указатель указывает на вершину стека, все ячейки ниже это есть элементы в стеке, а все ячейки выше - это вне стека. Значит при записи новый элемент должен помещаться в ячейку, на которую сейчас указывает указатель, то есть в вершину стека, а потом указатель должен подниматься на 1 позицию вверх. А почему он пишет над вершиной? Автор же сам себе противоречит. Не понимаю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2012, 14:35
Ответы с готовыми решениями:

Найти в стеке самый максимальный элемент и удалить его
Доброго времени суток. У меня, к примеру, есть стек. В нем введено несколько элементов, допустим 4....

Как в стеке найти масимальный и минимальный элемент и удалить между ними цифры
В функции void sort_p #include "stdafx.h" #include <stack> #include <iostream> #include...

Создать стек из вещественных чисел; найти максимальный элемент в стеке; организовать просмотр данных стека
Создать стек из вещественных чисел. Определить максимальный элемент в стеке. Организовать просмотр...

Удалить десятый элемент в стеке
Создать стек из 15 целых чисел. Вывести его на экран. Удалить 10-тий элемент в стеке. Вывести на...

12
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.04.2012, 14:39 2
Alex Z, Ну при добавлении элемента элемент сначала размещается над вершиной стека, затем он становится вершиной. Что не ясно?
0
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 14:40  [ТС] 3
Цитата Сообщение от ForEveR Посмотреть сообщение
Alex Z, Ну при добавлении элемента элемент сначала размещается над вершиной стека, затем он становится вершиной. Что не ясно?
А сюда нельзя рисунок прикрепить? Словами не объяснить.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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 - вершина стека.
0
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. Мне показалось так.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.04.2012, 14:54 6
Alex Z, Нет. Указатель на вершину стека - указывает на элемент находящийся на вершине.
Т.е. Стек : a b c d. Вершина - указатель на элемент d.
0
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 14:56  [ТС] 7
Цитата Сообщение от ForEveR Посмотреть сообщение
Alex Z, Нет. Указатель на вершину стека - указывает на элемент находящийся на вершине.
Т.е. Стек : a b c d. Вершина - указатель на элемент d.
А в книге он указывает выше последнего элемента. Значит ошибка в рисунке, а не в тексте.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.04.2012, 14:57 8
Вы про ассемблер что ли?
Если да, то там элементы заполняются сверху вниз, допустим esp(вершина стека) указывает на участок памяти 0x12345, мы делаем push(добавляем в стек переменную, допустим, 4 байта), адрес становится равным 0x12341.
1
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 14:58  [ТС] 9
Цитата Сообщение от diagon Посмотреть сообщение
Вы про ассемблер что ли?
Если да, то там элементы заполняются сверху вниз, допустим esp(вершина стека) указывает на участок памяти 0x12345, мы делаем push(добавляем в стек переменную, допустим, 4 байта), адрес становится равным 0x12341.
Про С++
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.04.2012, 14:59 10
Alex Z, Вообще по сути call-stack реализован либо на С, либо на асме. А вы судя по всему спрашиваете именно про call-stack.
0
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.04.2012, 15:01  [ТС] 11
Цитата Сообщение от ForEveR Посмотреть сообщение
Alex Z, Вообще по сути call-stack реализован либо на С, либо на асме. А вы судя по всему спрашиваете именно про call-stack.
Я не знаю. Просто стек. Так написано в книге "Либерти - С++ за 21 день". Стр. 130.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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/... e526103d42
1
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.04.2012, 15:20 13
Все там правильно написано.
Допустим, есть стек(заполняется снизу вверх):
a <- вершина стека
b
c
Ложим туда элемент d, получается
d
a <- вершина стека
b
c
Затем изменяем указатель вершины стека, получается
d <- вершина стека
a
b
c
Т.е. вы слишком буквально воспринимаете фразу "вершина стека", в данном случае она обозначает указатель, а вовсе не самый верхний элемент.
1
09.04.2012, 15:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2012, 15:20
Помогаю со студенческими работами здесь

Найти элемент с заданным ключом в стеке
Найти элемент с заданным ключом в стеке .Язык Си. Я задаю стек : #include typedef struct st ...

В стеке найти элемент по заданному ключу
есть стек с занесённой в него информацией с помошью функции vvod(struct el_st *) нужно в этом...

Написать алгоритм сортировка вставками: очередной элемент помещается по месту своего расположения в выходную
Написать алгоритм сортировка вставками: очередной элемент помещается по месту своего расположения...

Если создать указатель на переменную, созданную в стеке, переменная перемещается в кучу? Или остается в стеке?
Подскажите, если не трудно, я создаю переменную любого стандартного типа и она хранится в стеке, а...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru