Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 5
1

Как создать стек объектов произвольного типа?

03.03.2017, 22:07. Показов 5054. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Предметная область: «Стек объектов произвольного типа».
Данные класса: динамический список элементов стека.
Функции класса: считывание без извлечения элемента стека, считывание с извлечением элемента стека, запись элемента в стек.

Это я так понял надо с template работать. А вот как реализовать стек объектов...я хрен знает. Кто подскажет хоть что то полезное?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2017, 22:07
Ответы с готовыми решениями:

Стек объектов произвольного типа (ООП)
Здравствуйте, у меня есть задание - реализовать стек объектов произвольного типа. В указаниях...

Стек объектов произвольного типа (ООП)
Здравствуйте, мне дали задание реализовать стек объектов произвольного типа с помощью ООП, и к тому...

Реализовать класс GenericLIFO для произвольного типа данных (стек LIFO)
Реализовать класс GenericLIFO представляющий коллекцию переменного размера для произвольного типа...

Стек и очередь для хранения объектов типа Coord
Ниже представлен пример класса Coord. Напишите программу для хранения объектов типа Coord, ...

3
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
04.03.2017, 03:22 2
Создать шаблонный класс Stack который внутри себя ( в private или protected ) имеет динамический массив ( хотя можно и статический ) и который в public имеет методы работы с данным массивом которые выполняют функции стека. Что такое шаблонный класс как и что такое стек можно погуглить.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
04.03.2017, 09:34 3
Много разных способов.
1. Например, создать стек указателей void *. Так поступали в С.
2. Создать класс-шаблон стека. Так сейчас поступают в С++.
Тогда можно будет объявлять стеки с разными типами объектов.
3. Создать базовый класс Object. Реализовать класс стека с элементами типа Object.
В такой стек можно букет положить объект любого наследника от класса Object.
Так делали в С++ до шаблонов.
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
04.03.2017, 09:57 4
ruskryzhanovski, неужели нельзя в гугле набрать "реализация стека на c++"? Или это так трудно? Я вот набрал, я сразу выдало, то что нужно тебе, даже писать самому не пришлось:
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
#ifndef STACK_H
#define STACK_H
 
#include <cassert> // для assert
#include <iostream>
 
#include <iomanip> // для setw
 
template <typename T>
class Stack
{
private:
    T *stackPtr;                      // указатель на стек
    const int size;                   // максимальное количество элементов в стеке
    int top;                          // номер текущего элемента стека
public:
    Stack(int = 10);                  // по умолчанию размер стека равен 10 элементам
    Stack(const Stack<T> &);          // конструктор копирования
    ~Stack();                         // деструктор
 
    inline void push(const T & );     // поместить элемент в вершину стека
    inline T pop();                   // удалить элемент из вершины стека и вернуть его
    inline void printStack();         // вывод стека на экран
    inline const T &Peek(int ) const; // n-й элемент от вершины стека
    inline int getStackSize() const;  // получить размер стека
    inline T *getPtr() const;         // получить указатель на стек
    inline int getTop() const;        // получить номер текущего элемента в стеке
};
 
// реализация методов шаблона класса STack
 
// конструктор Стека
template <typename T>
Stack<T>::Stack(int maxSize) :
    size(maxSize) // инициализация константы
{
    stackPtr = new T[size]; // выделить память под стек
    top = 0; // инициализируем текущий элемент нулем;
}
 
// конструктор копирования
template <typename T>
Stack<T>::Stack(const Stack<T> & otherStack) :
    size(otherStack.getStackSize()) // инициализация константы
{
    stackPtr = new T[size]; // выделить память под новый стек
    top = otherStack.getTop();
 
    for(int ix = 0; ix < top; ix++)
        stackPtr[ix] = otherStack.getPtr()[ix];
}
 
// функция деструктора Стека
template <typename T>
Stack<T>::~Stack()
{
    delete [] stackPtr; // удаляем стек
}
 
// функция добавления элемента в стек
template <typename T>
inline void Stack<T>::push(const T &value)
{
    // проверяем размер стека
    assert(top < size); // номер текущего элемента должен быть меньше размера стека
 
    stackPtr[top++] = value; // помещаем элемент в стек
}
 
// функция удаления элемента из стека
template <typename T>
inline T Stack<T>::pop()
{
    // проверяем размер стека
    assert(top > 0); // номер текущего элемента должен быть больше 0
 
    stackPtr[--top]; // удаляем элемент из стека
}
 
// функция возвращает n-й элемент от вершины стека
template <class T>
inline const T &Stack<T>::Peek(int nom) const
{
  //
  assert(nom <= top);
 
  return stackPtr[top - nom]; // вернуть n-й элемент стека
}
 
// вывод стека на экран
template <typename T>
inline void Stack<T>::printStack()
{
    for (int ix = top - 1; ix >= 0; ix--)
        cout << "|" << setw(4) << stackPtr[ix] << endl;
}
 
// вернуть размер стека
template <typename T>
inline int Stack<T>::getStackSize() const
{
    return size;
}
 
// вернуть указатель на стек (для конструктора копирования)
template <typename T>
inline T *Stack<T>::getPtr() const
{
    return stackPtr;
}
 
// вернуть размер стека
template <typename T>
inline int Stack<T>::getTop() const
{
    return top;
}
 
#endif // STACK_H
0
04.03.2017, 09:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2017, 09:57
Помогаю со студенческими работами здесь

Как создать массив объектов собственного типа
Как создать массив, в котором в одном элементу arr будут хранится данные собственного типа ...

Как создать массивы объектов типа void
Знаю, что такой массив возможно создать, но не могу понять как. Не подскажите? Добавлено через 9...

Обобщенный класс, реализующий "стек с приоритетом", хранящий значения произвольного типа
Помогите, пожалуйста, решить задачу на языке C#: Необходимо написать обобщённый класс Priority...

Создать стек из произвольного числа строк и удалить из него все слова, содержащии абревиатуру BY
Создать стек из произвольного числа строк и удалить из него все слова, содержащии абревиатуру BY.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru