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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строка getline() C++ http://www.cyberforum.ru/cpp-beginners/thread221155.html
Ув. программисты! Подскажите пожалуйста новичку в чём проблема этой проги. Программа запрашивает строчку, выводит на экран эту строчкук и её размер. Потом запрашивает 2-ю строчку и тоже выводит...
C++ Строки Отредактировать данное предложение, удаляя из него те слова, которые встречаются в предложении заданное число раз, с учётом симметричных слов данному. http://www.cyberforum.ru/cpp-beginners/thread221154.html
Поиск по файлам и директориям C++
Здравствуйте! Как бы сделать программку на C++ производящую поиск по файлам и директориям? точнее, просто выдающая список файлов для заданной директории, включающей и поддиректории. Нужно...
C++ не могу написать функцию вычисляющую Y=x^1/3
написать и протестировать функцию, вычисляющую y=x^1/3, используя итерационную формулу y2=y1+(y1-(y1*y1*y1*y1)/x)/3. начальное приближение y2=x. итерации прекратить при условии |y2-y1|<0.000001 ...
C++ Структуры. http://www.cyberforum.ru/cpp-beginners/thread221122.html
В файле F записаны числа A, B являющиеся сторонами прямоугольников. Переписать в файл G те прямоугольники, которые целиком можно уместить в заданном прямоугольнике со сторонами C, D. Реализовать в...
C++ Программа крестики и нолики #include<conio.h> #include<stdio.h> #include<time.h> #include<stdlib.h> #include<dos.h> #include<math.h> int main(void) { clrscr(); //clear screen подробнее

Показать сообщение отдельно
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
27.12.2010, 12:59
В википедии стек с картиночкой.
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
Ввод из файла не стал делать, если сдали остальные лабы, сами справитесь.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru