Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 26.11.2020
Сообщений: 6

Определить класс стек на массиве

27.10.2021, 09:52. Показов 946. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определить класс Стек - Stack. Элементы стека хранятся в массиве. Если массив имеет фиксированную размерность,
то предусмотреть контроль выхода за пределы массива. Если память выделяется динамически и ее не хватает, то
увеличить размер выделенной памяти. Включение элементов в стек и их извлечение реализовать как в виде методов,
так и с помощью перегруженных операций. создать массив объектов класса Stack. Передавать объекты в функцию,
которая удаляет из стека первый (сверху), третий, пятый, и т.д. элементы.

вот код, но он не компилируется.

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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
// стек структура данных 
#define MaxVal 32767    //определяем MaxVal
#define Factor 41723
#include <iostream>
#include <ctime>
#include <cmath>
using namespace std;
 
 
class Stack {
    int size;
    int *array;
public:
 
    Stack();//конструктор по умолчанию
    Stack(const Stack&);//конструктор копирования, принимает постоянную ссылку на объект этого класса
    void show();//метод, вывод значений на экран
    void show(int);//для красивого вывода почищенного стека
    void del();
 
 
 
 
 
    Stack& operator = (const Stack obj) {//перегрузка операции присваивания
        if (&obj == this) return *this;//проверяем одинаковые ли обекты(this указатель на объект, в котором нахожусь)
                                       //ОП-ОП, ПРОВЕРОЧКА
        if (array) delete[]array;//если в объекте, который рассматривается, уже есть массив, то он удаляется
        size = obj.size;//size присваиваем size второго объекта
        array = new int[obj.size + 1];//присваиваем пустому array новый массив
                                      //ОП-ОП, КОНЧИЛАСЬ ПРОВЕРОЧКА
        for (int i = 0; i <= obj.size; i++)//заполняем массив эллементами второго объекта
            array[i] = obj.array[i];
        return *this;
    }//&-ссылка на объект
 
 
 
    friend ostream& operator << (ostream& mystream, Stack& obj);//дружественная функция(не является свойсттвом объекта).
    friend istream& operator >> (istream& mustream, Stack& obj);
};
 
 
 
 
void Stack::show() {//функция(метод), которая выводит массив
    for (int i = 0; i < size; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
}
 
 
 
Stack::Stack(const Stack &old) {//принимает существующий объект (конструктор, дублирующий перегрузку)
    size = old.size;
    this->array = new int[this->size];//-> указывает, что происходит действие над array этого объекта
    for (int i = 0; i < size; ++i) {//заполнение массива данными из другого объекта
        this->array[i] = old.array[i];
    }//по сути, не очень и нужно
}
 
 
Stack::Stack() {//метод класса(конструктор), :: расширение области видимости,
    size = rand() % 15 + 5;//записываем случайное число в size
    srand(size);//от числа size будут зависеть все сгенерируемые случайные числа
    array = new int[size];//создаем новый массив
    for (int i = 0; i < size; ++i) {//заполнение массива рандомными числами
        array[i] = rand() % 100;
    }
}
 
 
 
 
void Stack :: del()
{
 
    int * buffArr = new int[size];
    for (int i = 0; i < size; i++)
    {
        buffArr[i] = array[i];
 
    }
 
    delete[] array;
    int new_size = size / 2;
 
    cout << endl;
    size = new_size;
    array = new int[new_size];
    for (int i = 0, j = 1; i < new_size; i++)
    {
 
        array[i] = buffArr[j];
 
        j += 2;
    }
 
 
 
}
 
void Stack::show(int k) {
    for (int i = 0; i < size / 2 - size % 2; ++i) {
        cout << array[i] << " ";
    }
    cout << endl;
}
 
ostream& operator << (ostream& mystream, Stack& obj) {  //перегрузка операции вывода
    int tmp;
    for (int i = 0; i < obj.size; ++i) {//каждый элемент массива по очереди записываетрся в поток вывода
        tmp = obj.array[i];
        mystream << tmp << " ";
    }
    mystream << endl;
    return mystream;
}
 
istream& operator >> (istream& mystream, Stack& obj) {//перегруз потока ввода
    cout << "Размер: ";
    if (obj.size) obj.size = 0;//если размер уже существует, удаляеам
    mystream >> obj.size;//вводим размер
    if (obj.array) delete[]obj.array;
    obj.array = new int[obj.size];
    cout << obj.size << " элементов: ";
    for (int i = 0; i < obj.size; ++i) {
        mystream >> obj.array[i];
    }
    return mystream;
}
 
 
    void main() {
        srand(time(NULL));//количество прошедших секунд с 01.01.1970 00.00.00
        setlocale(LC_ALL, "Russian");
        int number = 5;// размер массива объектов, генерируется рандомно, fabs-модуль
        Stack *elem = new Stack[number];//выделяем память под массив объекта, после этого запускается конструктор по умолчанию
        for (int i = 0; i < number; ++i) {//пробегваю по массиву объектов и вывожу каждый из них
            elem[i].show();
        }
        cout << endl;
        cout << "pew pew pew pew pew pew pew pew pew pew pew pew pew pew" << endl;
        cout << endl;
        //Удаление 1, 3, 5 ... n-ого элемента стека.
 
        for (int i = 0; i < number; i++)
        {
            elem[i].del();
 
        }
 
 
        for (int i = 0; i < number; i++)
            elem[i].show();
 
 
        //for (int i = 0; /*i < number/2 + number%2;*/ i < number; ++i) {//выводим массив, получившийся после удаления нужных элементов
        //  elem[i].show(42);
        //}
        cout << endl;
        cout << " lox " << endl;
        cout << "pew pew pew pew pew pew pew pew pew pew pew pew pew pew" << endl;
        cout << endl;
        //Заполение перегрузками операторов.
        cout << "please,input the amount of the stacks you want to use"; int number2; cin >> number2;
        Stack *elem_ovrld = new Stack[number2];//создаем массив, размерности введеной с клавиатуры
        for (int i = 0; i < number2; ++i) {//заполнение каждого объекта с помощью перегруженного оператора
            cin >> elem_ovrld[i];
        }
         for (int i=0;i<number2;i++)
          {
       elem_ovrld[i].del();
         }
        cout << endl;
        for (int i = 0; i < number2; ++i) {//вывод каждого объекта с помощью блабла
            cout << elem_ovrld[i];
        }
        system("pause");
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2021, 09:52
Ответы с готовыми решениями:

Определить класс стек
Определить класс стек. В класс включить два конструктора для определе-ния стека по его размеру и путем копирования другого стека. ...

Определить класс стек
Определить класс стек. В класс включить два конструктора для определения стека по его размеру и путем копирования другого стека....

Описать и реализовать класс Стек, моделирующий массивом стек, для хранения любых объектов
ПОЖАЛУЙСТА ПОМОГИТЕ РАЗОБРАТЬСЯ С ЗАДАЧЕЙ НА JAVA!!! только начинаю изучать этот язык. буду очень признательна за пояснение каждой...

2
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,557
27.10.2021, 10:29
Зачем столько стеков создавать?
C++
1
Stack *elem = new Stack[number];
C++
1
Stack *elem_ovrld = new Stack[number2];
0
0 / 0 / 0
Регистрация: 26.11.2020
Сообщений: 6
04.11.2021, 22:50  [ТС]
John Prick, а как?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2021, 22:50
Помогаю со студенческими работами здесь

Создать класс «стек чисел». Перегрузить операции: += (поместить в стек), префиксный -- (извлечь из стека), <<
Создать класс «стек чисел». Перегрузить операции: += (поместить в стек), префиксный -- (извлечь из стека), &lt;&lt; (печать содержимого...

Создать класс Стек вещественных. Определить индексатор, методы проверки стека, добавления и удаления элементов
Создать класс Стек вещественных. Определить индексатор, методы проверки стека, добавления и удаления элементов. Создать массив...

Определить и реализовать класс "Стек"
Определить и реализовать класс. Определить и реализовать операции над данными этого класса. Написать и выполнить программу полного...

Создать класс СПИСОК целых чисел. Разработать класс СТЕК
&quot;Создать класс СПИСОК целых чисел. Разработать класс СТЕК, который вмещает объект класса СПИСОК. Определить необходимые конструкторы,...

Описать класс, реализующий стек. Написать программу, использующую этот класс для отыскания прохода по лабиринту
Вот такое задание . Не понимаю принцип стека и как его реализовать. Хотелось бы увидеть код попроще Описать класс, реализующий стек....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru