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

Работа со стеком - C++

Восстановить пароль Регистрация
 
Voka
 Аватар для Voka
201 / 193 / 59
Регистрация: 27.12.2010
Сообщений: 815
Записей в блоге: 1
27.12.2010, 12:00     Работа со стеком #1
Задача:
Написать программу которая создает стек целых чисел считываемых из файла и удаляет из него повторяющиеся числа. Вывести элементы полученного стека на экран.

Все прошлые лабы сдал на ура, а с этой загвоздка. Не могу понять как работает стек...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2010, 12:00     Работа со стеком
Посмотрите здесь:

C++ Работа со стеком
C++ Работа со СТЕКОМ!!!!!!:)
Работа со стеком! C++
C++ Работа со стеком.
C++ Работа со стеком
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
27.12.2010, 12:59     Работа со стеком #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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#ifndef _CTUTOR_STACK_TEMPLATE_H_
#define _CTUTOR_STACK_TEMPLATE_H_
 
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cassert>
#include <ctime>
 
/*
  FIFO = PushBack / PopTopOrDie
  LIFO = PushTop  / PopTopOrDie
*/
template <class Type>
class StackContainer {
 public:
  Type data_;
  StackContainer* next_;
  explicit StackContainer(const Type& data) : data_(data), next_(NULL) {}
  explicit StackContainer(const Type& data, StackContainer<Type>* next)
    : data_(data), next_(next) {}
};
 
template <class Type>
class Stack {
 public:
  typedef Type  ValueType;
  typedef Type* ValuePointer;
  Stack() : size_(0), first_(NULL), last_(NULL) {}
  ~Stack() {
    Clear();
  }
  size_t size() const { return size_; }
  void PushTop(const ValueType& data) {
    if (first_ == NULL) {
      last_ = first_ = new StackContainer<ValueType>(data);
    } else {
      StackContainer<ValueType> *stack_container =
            new StackContainer<ValueType>(data, first_);
      first_ = stack_container;
    }
    ++size_;
  }
  void PushBack(const ValueType& data) {
    if (first_ == NULL) {
      last_ = first_ = new StackContainer<ValueType>(data);
    } else {
      StackContainer<ValueType> *stack_container =
            new StackContainer<ValueType>(data);
      last_->next_ = stack_container;
      last_ = stack_container;
    }
    ++size_;
  }
  ValueType PopTopOrDie() {
    assert(first_ != NULL);
    ValueType result = first_->data_;
    StackContainer<ValueType> *stack_container = first_->next_;
    delete first_;
    first_ = stack_container;
    --size_;
    return result;
  }
  void Clear() {
    StackContainer<ValueType> *stack_container;
    while (first_ != NULL) {
      stack_container = first_->next_;
      delete first_;
      first_ = stack_container;
    }
    last_ = NULL;
    size_ = 0;
  }
  ValueType &Top() const {
    return first_->data_;
  }
  ValueType &Back() const {
    return last_->data_;
  }
  void ForEach(void (*function)(ValueType *data)) {
    StackContainer<ValueType> *stack_container = first_;
    while (stack_container != NULL) {
      function(&(stack_container->data_));
      stack_container = stack_container->next_;
    }
  }
  int PositionInStack(const ValueType &value) {
    StackContainer<ValueType> *stack_container = first_;
    int counter = 0;
    while (stack_container != NULL) {
      if (stack_container->data_ == value)
        return counter;
      ++counter;
      stack_container  = stack_container->next_;
    }
    return -1;
  }
  bool PushTopIfUnique(const ValueType &value) {
    if (PositionInStack(value) == -1) {
      PushTop(value);
      return true;
    }
    return false;
  }
 private:
  size_t size_;
  StackContainer<ValueType> *first_, *last_;
};
#endif
 
#ifndef _MAIN_CC_
#define _MAIN_CC_
int main(int argc, char* argv[]) {
  srand(time(0));
  Stack<int> a_stack;
  for (int i = 0; i < 100; ++i)
    a_stack.PushTopIfUnique(rand()%30);
 
  printf("Size of stack: %d.\n", a_stack.size());
  while (a_stack.size() > 0)
    printf("%d ", a_stack.PopTopOrDie());
  printf("\n");
 
  int key;
  scanf("%d", &key);
  return 0;
}
#endif
Ввод из файла не стал делать, если сдали остальные лабы, сами справитесь.
Voka
 Аватар для Voka
201 / 193 / 59
Регистрация: 27.12.2010
Сообщений: 815
Записей в блоге: 1
27.12.2010, 13:41  [ТС]     Работа со стеком #3
Большое спасибо
Как я понял в скобках сами числа стека?
C++
1
a_stack.PushTopIfUnique(rand()%30);
Если да,то туда осталось запихнуть массив извлеченный из файла и дело в шляпе
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
27.12.2010, 14:58     Работа со стеком #4
В общем-то да.
Yandex
Объявления
27.12.2010, 14:58     Работа со стеком
Ответ Создать тему
Опции темы

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