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

Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего - C++

Восстановить пароль Регистрация
 
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
05.05.2013, 15:08     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #1
Есть некоторый стек, в каждом элементе которого записаны по два целых числа. Нужно сделать программу которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего.
Например в нашем стеке хранится
[2,4]>[3,6]>[5,8]>[9,10], если мы добавляем например 1 и 4, то результат должен быть
[3,8]>[2,4]>[3,6]>[5,8], то есть меняется лишь первый элемент стека, а остальные просто переписываются.
пробовал сделать сам, но проблема в том что для каждого элемента нужна новая переменная чтоб сохранить его начальное значение, т.к. в стеке нам доступен лишь один элемент...
подскажите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2013, 15:08     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего
Посмотрите здесь:

Написать инструкцию, которая присваивает целой переменной случайное число C++
C++ Побитовые операции (программа, которая интерпретирует старшие 3 бита как некоторое число n...)
C++ Работа со стеком (как достать элемент из стека?)
Массив: Изменить матрицу, прибавляя к каждому отрицательному элементу значение предыдущего элемента той же строки. C++
Создать класс для работы со стеком. Элемент стека – действительное число C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.05.2013, 15:21     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #2
Цитата Сообщение от gorus95 Посмотреть сообщение
но проблема в том что для каждого элемента нужна новая переменная
ну так объясни это тому кто дал тебе задание.
если структура данных неудовлетворяет требованиям алгоритма, так нахрена её использовать?
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
05.05.2013, 15:23  [ТС]     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #3
Jupiter, никак нельзя сделать такое?
Jupiter
05.05.2013, 15:29
  #4

Не по теме:

gorus95, если идти на поводу чьей то глупости то можно все

IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
05.05.2013, 16:44     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #5
Если стек для описанных пар, написан правильно, то доступ есть только к вершине. Поэтому можно извлечь пару из вершины и сохранить, - одна пара переменных. Затем сложить с новым значением и тут можно использовать пару входящих если они больше не нужны. Потом положить обратно старую и новую пары. Остальное извлекать и переписывать не нужно.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
05.05.2013, 17:15     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #6
Вполне себе учебная бессмысленная и беспощадная задача на пляски со стеками. Рекурсия нам поможет.
Качественней с доп. стеком, но рекурсией веселее же.
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
 
template <class FirstType, class SecondType>
struct Pair {
  typedef FirstType First;
  typedef SecondType Second;
  FirstType first;
  SecondType second;
  Pair() {}
  Pair(const FirstType &first, const SecondType &second) : first(first), second(second) {}
};
 
template <class T>
class Stack {
 public:
  Stack() : base(0), size(0) {}
  virtual ~Stack() {
    clear();
  }
  void pop() {
    Node *node = base;
    base = base->next;
    delete node;
    --size;
  }
  void push(const T &value) {
    base = new Node(base, value);
    ++size;
  }
  const T &getHead() const { return base->value; }
  void clear() {
    while (!isEmpty()) {
      pop();
    }
    size = 0;
  }  
  bool isEmpty() const { return base == 0; }
  size_t getSize() const { return size; }
 private:
  Stack(const Stack&);
  Stack &operator=(const Stack&);
  struct Node {
    Node *next;
    T value;
    Node(Node *next, const T &value) : next(next), value(value) {}
  };
  Node *base;
  size_t size;
};
 
template <class A, class B>
std::ostream &operator<<(std::ostream &stream, const Pair<A, B> pair) {
  return stream << "Pair{" <<
    "first=" << pair.first << "," <<
    "second=" << pair.second << "}";
}
 
template <class A, class B>
Pair<A, B> operator+(const Pair<A, B> &a, const Pair<A, B> &b) {
  return Pair<A, B>(a.first + b.first, a.second + b.second);
}
 
template <class T>
void removeLastItemFromStack(Stack<T> &s) {
  if (s.getSize() != 0) {
    T value = s.getHead();
    s.pop();
    if (s.getSize() != 0) {
      removeLastItemFromStack(s);
      s.push(value);
    }
  }
}
 
template <class T>
void strangePushIntoStack(Stack<T> &s, const T &value) {
  removeLastItemFromStack(s);
  s.push(s.getHead() + value);
}
 
int main(int argc, char *argv[]) {
  Stack<Pair<int, int> > s;
 
  s.push(Pair<int, int>(9, 10));
  s.push(Pair<int, int>(5, 8));
  s.push(Pair<int, int>(3, 6));
  s.push(Pair<int, int>(2, 4));
 
  strangePushIntoStack(s, Pair<int, int>(1, 4));
 
  while (!s.isEmpty()) {
    std::cout << s.getHead() << std::endl;
    s.pop();
  }
  
  return 0;
}
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
05.05.2013, 17:34  [ТС]     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #7
lemegeton, спасибо) но с вашим кодом мне немного трудно разобраться т.к. мы еще не дошли до template, class'ов и т.д.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Затем сложить с новым значением и тут можно использовать пару входящих если они больше не нужны.
Дело в том что добавляем мы только к первому элементу стека, а остальные просто присваиваем (переписываем из предыдущего). И поэтому они нужны, в том и проблема...
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
05.05.2013, 17:39     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #8
Цитата Сообщение от gorus95 Посмотреть сообщение
остальные просто присваиваем (переписываем из предыдущего).
По сути, переписывать ничего не надо. Это равносильно удалению последнего элемента.

Цитата Сообщение от gorus95 Посмотреть сообщение
но с вашим кодом мне немного трудно разобраться т.к. мы еще не дошли до template, class'ов
А как же вы тогда пары чисел делаете и со стеком работаете?
Возьмите тогда из моего кода только смысл -- рекурсивное удаление последнего элемента. (Можете еще сделать стеком, а не рекурсией).
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
05.05.2013, 18:59     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #9
gorus95, если это задание:
Цитата Сообщение от gorus95 Посмотреть сообщение
Есть некоторый стек, в каждом элементе которого записаны по два целых числа. Нужно сделать программу которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего.
то остальное - Ваша интерпретация. Можно создать стек из объектов разных типов. Главное, чтобы каждый раз из одного какого-то. Если говорить о глупости, то в "идеале" можно извлечь все элементы, сделать с ними что-то и затолкать обратно. У Вас пары и требование, чтобы некая функция добавляла элемент по указанному правилу. Не путайте с самим методом push для Вашего стека. Напишите сначала функцию которая извлекает элемент и возвращает его обратно и всё поймёте. Или не поймёте. Или я ничего не понял. Вариантов море, одним словом.
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
05.05.2013, 23:28  [ТС]     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #10
IGPIGP, я создал стек в котором структура из двух элементов int. Проблема в том чтобы "передвинуть" остальные элементы, при том что из стека нам доступен лишь верхний...
Так понял ничего не выйдет из этого, разве что через двусвязные списки..
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6166 / 2895 / 282
Регистрация: 04.12.2011
Сообщений: 7,695
Записей в блоге: 3
05.05.2013, 23:33     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #11
Цитата Сообщение от gorus95 Посмотреть сообщение
Проблема в том чтобы "передвинуть" остальные элементы
Нет, проблема в том, что так как задача поставлена в начале темы, она не требует ничего "передвигать". Стек - массив фиксированной длины и в нём всё остаётся на месте, а перемещается указатель на вершину.
Похоже Вы хотите сделать не то, о чём пишете, но не говорите, что именно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2013, 00:06     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего
Еще ссылки по теме:

Работа со стеком (вытащить значение и сохранить в переменную) C++
Запишите инструкцию, которая присваивает переменной х значение -1,5 C++
C++ Обращение к следующему элементу в for-each цикле

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
06.05.2013, 00:06     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего #12
Мои сообщения нечитаемы?

Повторюсь.
Цитата Сообщение от gorus95 Посмотреть сообщение
Проблема в том чтобы "передвинуть" остальные элементы, при том что из стека нам доступен лишь верхний...
Не надо ничего никуда "передвигать". Поставленная задача предполагает удаление последнего элемента стека и добавление первого по особому правилу. Всё. Больше ничего не надо. Копировать что-то куда-то -- не имеет никакого смысла. Так можно и целлюлозный комбинат построить только чтобы одну попу подтирать.

Цитата Сообщение от gorus95 Посмотреть сообщение
Так понял ничего не выйдет из этого, разве что через двусвязные списки..
Удалить последний элемент стека можно рекурсивной функцией, как показано в моем коде, или используя дополнительный стек, как не показано в моем коде. Добавление элемента вообще не представляет проблем.
Yandex
Объявления
06.05.2013, 00:06     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего
Ответ Создать тему
Опции темы

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