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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
#1

Помогите со стеком.. - C++

06.11.2011, 21:00. Просмотров 627. Ответов 4
Метки нет (Все метки)

Смоделировать стек на базе статического массива по заданию. Написать основные операции для работы со стеком (push, pop, top, empty, full) . Для этого (если в задании не указан иной способ) в программе на входе задать последовательность из К (К> 10) целых чисел (числа вводить с клавиатуры). Все положительные числа последовательно заносить в стек, а каждое отрицательное число должно изымать из стека один элемент. Отобразить динамику содержания стека при обработке заданной последовательности. Входную последовательность чисел задать такой, чтобы она демонстрировала работу основных операций и генерировала возникновения ситуаций "потери значимости стека" (stack underflow) и "переполнение стека" (stack overflow).
Примечание: после реализации стека работать с ним как с абстрактным типом данных, а не как с массивом.

Реализовать стек, в котором указатель вершины стека указывает на последний элемент стека, а не на первый свободный элемент массива. На входе задается последовательность целых чисел. Если число четное, то оно добавляется в стек, если нечетное, то из стека извлекается один элемент. После обработки всей заданной входной последовательности определить, в стеке хотя бы одно число больше 10.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2011, 21:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите со стеком.. (C++):

Помогите со Стеком - C++
Проблема в том что я уже нашел прилично решений но они все через чур запутанные и разные. Хотелось бы максимально понятное и однородное...

Помогите со стеком - C++
Разработать процедуру, которая формирует стек Stack, включив в него по одному разу элементы, которые входят в стек Stack1, но не входят в...

Работа со стеком - C++
Создать программу, реализовав работу со структурой данных - стеком. В программе реализовать добавление и удаление элементов.

Работа со стеком. - C++
Интересует вопрос: для использовония функций pop() и push() нужно ли подключать заголовочный файл из стандартной библиотеки?

Знакомство со стеком - C++
Начал изучать принципы работы стека вроде все понятно но не пойму как реализовать такое действие. Задача: Есть динамический класс User...

задание со стеком! - C++
из введенных целых чисел сформировать два списка типа стек с одинаковым количеством элементов. Разработать функцию, какая соединает два...

4
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
07.11.2011, 02:20 #2
Без ввода. Значения задаются псевдо-случайно.
Ну и указатель на вершину указывает не на последний элемент, а на элемент, идущий за последним.
Так, видимо, и подразумевалось, иначе не определена ситуация в начале работы со списком, когда указатель на вершину равен указателю на начало стека...
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
#include <iostream>
#include <stdexcept>
#include <iterator>
#include <cstdlib>
#include <ctime>
 
template <class ValueType, size_t Size = 25>
class Stack {
 public:
  Stack() : begin_(NULL), end_(NULL), top_(NULL) {
    top_ = begin_ = new ValueType[Size];
    end_ = begin_ + Size;
  }
  ~Stack() {
    delete begin_;
  }
  void clear() {
    top_ = begin_;
  }
  size_t size() const { return top_ - begin_; }
  void push(const ValueType &value) {
    if (top_ >= end_) throw std::runtime_error("Stack overflow.");
    *top_++ = value;
  }
  ValueType pop() {
    if (top_ <= begin_) throw  std::runtime_error("Stack underflow.");
    return *(--top_);
  }
  ValueType head() {
    return *(top_ - 1);
  }
  ValueType tail() {
    return *begin_;
  }
  size_t capacity() const {
    return Size;
  }
  ValueType *begin() {
    return begin_;
  }
  ValueType *end() {
    return top_;
  }
 private:
  ValueType *begin_, *end_, *top_;
};
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  Stack<int, 5> stack;
  
  std::cout << "Stack capacity is " << stack.capacity() << std::endl;
  try {
    while (true) {
      int value = rand() % 11 - 5;
      if (value > 0) {
        std::cout << "Value is " << value << " Pushing." << std::endl;
        stack.push(value);
      } else if (value < 0) {
        std::cout << "Value is " << value << " Poping: ";
        std::cout << stack.pop() << std::endl;
      }
      std::cout << "Stack content: ";
      std::copy(stack.begin(), stack.end(), std::ostream_iterator<int>(
        std::cout, " "));
      std::cout << std::endl;
    }
  } catch (const std::exception &e) {
    std::cout << e.what() << std::endl;
  }
 
  return 0;
}
1
V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
07.11.2011, 11:15  [ТС] #3
lemegeton, спасибо большое, выручил
0
LosAngeles
Заблокирован
07.11.2011, 11:27 #4
C++
1
2
3
4
5
6
7
  Stack() : begin_(NULL), end_(NULL), top_(NULL) {
    top_ = begin_ = new ValueType[Size];
    end_ = begin_ + Size;
  }
  ~Stack() {
    delete begin_;
  }
непонятно как ты так память ловко освободил
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
07.11.2011, 18:59 #5
Хм. Действительно. Получилось UB. Хоть все современные компиляторы "сообразят", должно все-таки быть
C++
1
delete [] begin_;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2011, 18:59
Привет! Вот еще темы с ответами:

Со стеком запутался - C++
Как сделать чтоб это заработало Компилирую на CodeBlocks (если есть лучше предлагайте) #include &lt;iostream&gt; #include &lt;string.h&gt; ...

Работа со стеком - C++
Помогите исправить ошибки! Пусть символ # определен в текстовом редакторе как стирающий символ Backspace, т.е. строка abc#d##c в...

Программа с стеком - C++
скиньте плиз любую прогу со стеками.

Работа со стеком! - C++
Необходимо записать заполнение стека с клавиатуры. Добавлено через 44 секунды #include &lt;iostream&gt; #include &lt;stack&gt; int main...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
07.11.2011, 18:59
Ответ Создать тему
Опции темы

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