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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Произвести хэширование по словам http://www.cyberforum.ru/cpp-beginners/thread856435.html
Помогите, пожалуйста, разобраться, что должна делать хэш-функция. Мне нужно произвести хэширование по словам, т.е. я должен каждому слову каким-то образом присвоить какое-либо число? Если да, то как это можно сделать?
C++ Массив указателей на методы класса Подскажите плз в чём ошибка: class Entrant{ int ID; int mark; int school; int addpt; int totall; string sname; http://www.cyberforum.ru/cpp-beginners/thread856423.html
Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния C++
Помогите пожалуйста, нужно написать код на с++ Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния. Определить конструктор без параметров, конструктор с параметром, конструктор с двумя параметрами. Конструктор без параметров выделяет место для одного элемента и инициализирует его в ноль. Конструктор с одним параметром, - размер...
C++ Ввод строки с пробелами произвольной длины
Помогите, пожалуйста. Нужно ввести строку произвольной длины с пробелами и различными символами. Мой код: char *s; s=new char; cout<<"vvedite stroku: "; cin>>s; cout<<s<<endl;
C++ Дано действительное число а, не пользуясь ни какими другими арифметическими операциями, кроме умножения получить а^5 и а^13 за 5 операция http://www.cyberforum.ru/cpp-beginners/thread856362.html
1 )Дано действительное число а, не пользуясь ни какими другими арифметическими операциями, кроме умножения получить а^5 и а^13 за 5 операция
C++ Исключение для шаблона Здравствуйте ! У меня следующий вопрос : Есть база данных, написан шаблон ввода для нее template <typename T> friend std::ostream& operator<<( std::ostream& os, Array<T>& cont){// for(int i=0;i<cont.len();i++){ os<<cont.get(i)<<"\t"; os<<'\n'; } return os; }; подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
05.05.2013, 17:15     Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего
Вполне себе учебная бессмысленная и беспощадная задача на пляски со стеками. Рекурсия нам поможет.
Качественней с доп. стеком, но рекурсией веселее же.
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;
}
 
Текущее время: 07:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru