Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
gorus95
6 / 6 / 1
Регистрация: 22.12.2012
Сообщений: 169
Завершенные тесты: 1
1

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

05.05.2013, 15:08. Просмотров 650. Ответов 11
Метки нет (Все метки)

Есть некоторый стек, в каждом элементе которого записаны по два целых числа. Нужно сделать программу которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего.
Например в нашем стеке хранится
[2,4]>[3,6]>[5,8]>[9,10], если мы добавляем например 1 и 4, то результат должен быть
[3,8]>[2,4]>[3,6]>[5,8], то есть меняется лишь первый элемент стека, а остальные просто переписываются.
пробовал сделать сам, но проблема в том что для каждого элемента нужна новая переменная чтоб сохранить его начальное значение, т.к. в стеке нам доступен лишь один элемент...
подскажите пожалуйста

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2013, 15:08
Ответы с готовыми решениями:

Используя массив присвоить каждому следующему элементу сумму текущего и предыдущего элементов
Необходимо написать программу, которая используя массив присваивает каждому...

Побитовые операции (программа, которая интерпретирует старшие 3 бита как некоторое число n...)
Уважаемые форумчане, нужна ваша помощь. Нужно составить программу, которая...

Работа со стеком (как достать элемент из стека?)
#include <iostream> #include <stack> int main() { std::stack<int>...

Создать класс для работы со стеком. Элемент стека – действительное число
Создать класс для работы со стеком. Элемент стека – действительное число....

создать стек в памяти из этих чисел таким образом, чтобы на вершине стека было самое большое число. Удалить из стека все отрицательные элементы.
Помогите решить. В файл записывается последовательность целых чисел. Прочитать...

11
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.05.2013, 15:21 2
Цитата Сообщение от gorus95 Посмотреть сообщение
но проблема в том что для каждого элемента нужна новая переменная
ну так объясни это тому кто дал тебе задание.
если структура данных неудовлетворяет требованиям алгоритма, так нахрена её использовать?
0
gorus95
6 / 6 / 1
Регистрация: 22.12.2012
Сообщений: 169
Завершенные тесты: 1
05.05.2013, 15:23  [ТС] 3
Jupiter, никак нельзя сделать такое?
0
Jupiter
05.05.2013, 15:29
  #4

Не по теме:

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

2
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7089 / 3392 / 460
Регистрация: 04.12.2011
Сообщений: 9,438
Записей в блоге: 5
05.05.2013, 16:44 5
Если стек для описанных пар, написан правильно, то доступ есть только к вершине. Поэтому можно извлечь пару из вершины и сохранить, - одна пара переменных. Затем сложить с новым значением и тут можно использовать пару входящих если они больше не нужны. Потом положить обратно старую и новую пары. Остальное извлекать и переписывать не нужно.
0
lemegeton
2935 / 1364 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
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;
}
0
gorus95
6 / 6 / 1
Регистрация: 22.12.2012
Сообщений: 169
Завершенные тесты: 1
05.05.2013, 17:34  [ТС] 7
lemegeton, спасибо) но с вашим кодом мне немного трудно разобраться т.к. мы еще не дошли до template, class'ов и т.д.

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

Цитата Сообщение от gorus95 Посмотреть сообщение
но с вашим кодом мне немного трудно разобраться т.к. мы еще не дошли до template, class'ов
А как же вы тогда пары чисел делаете и со стеком работаете?
Возьмите тогда из моего кода только смысл -- рекурсивное удаление последнего элемента. (Можете еще сделать стеком, а не рекурсией).
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7089 / 3392 / 460
Регистрация: 04.12.2011
Сообщений: 9,438
Записей в блоге: 5
05.05.2013, 18:59 9
gorus95, если это задание:
Цитата Сообщение от gorus95 Посмотреть сообщение
Есть некоторый стек, в каждом элементе которого записаны по два целых числа. Нужно сделать программу которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего.
то остальное - Ваша интерпретация. Можно создать стек из объектов разных типов. Главное, чтобы каждый раз из одного какого-то. Если говорить о глупости, то в "идеале" можно извлечь все элементы, сделать с ними что-то и затолкать обратно. У Вас пары и требование, чтобы некая функция добавляла элемент по указанному правилу. Не путайте с самим методом push для Вашего стека. Напишите сначала функцию которая извлекает элемент и возвращает его обратно и всё поймёте. Или не поймёте. Или я ничего не понял. Вариантов море, одним словом.
0
gorus95
6 / 6 / 1
Регистрация: 22.12.2012
Сообщений: 169
Завершенные тесты: 1
05.05.2013, 23:28  [ТС] 10
IGPIGP, я создал стек в котором структура из двух элементов int. Проблема в том чтобы "передвинуть" остальные элементы, при том что из стека нам доступен лишь верхний...
Так понял ничего не выйдет из этого, разве что через двусвязные списки..
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7089 / 3392 / 460
Регистрация: 04.12.2011
Сообщений: 9,438
Записей в блоге: 5
05.05.2013, 23:33 11
Цитата Сообщение от gorus95 Посмотреть сообщение
Проблема в том чтобы "передвинуть" остальные элементы
Нет, проблема в том, что так как задача поставлена в начале темы, она не требует ничего "передвигать". Стек - массив фиксированной длины и в нём всё остаётся на месте, а перемещается указатель на вершину.
Похоже Вы хотите сделать не то, о чём пишете, но не говорите, что именно.
0
lemegeton
2935 / 1364 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
06.05.2013, 00:06 12
Мои сообщения нечитаемы?

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

Цитата Сообщение от gorus95 Посмотреть сообщение
Так понял ничего не выйдет из этого, разве что через двусвязные списки..
Удалить последний элемент стека можно рекурсивной функцией, как показано в моем коде, или используя дополнительный стек, как не показано в моем коде. Добавление элемента вообще не представляет проблем.
0
06.05.2013, 00:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2013, 00:06

Создать процедуру, которая добавляет элемент в стек или вычитает его из стека
Подскажите пожалуйста, как написать вот такую программу: На базе односвязного...

К каждому элементу массива прибавить некоторое число Х
Сформировать одномерный массив из n положительных чисел, вводимых с клавиатуры....

Программа реализующая действия со стеком. Формирование и вывод содержимого стека на экран дисплея
Помогите пожалуйста с программой, или приведите пример пример программы...


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

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

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