Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.03.2019
Сообщений: 16
1

На основе контейнера list построить благоустроенный стек

03.06.2019, 22:41. Показов 548. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На основе контейнера list построить благоустроенный стек. Выполнить операции занесения
элемента в стек, извлечение значения из вершины стека, вывод всех значений стека на экран.

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
#include <cassert> // для assert
#include <iostream>
#include <iomanip> // для setw
using namespace std;
template <typename T>
class Stack
{
private:
    T* stackPtr;                      // вказівник на стек
    const int size;                   // максимальна кількість елементів в стеку
    int top;                          // номер елемента стеку
public:
    Stack(int = 10);                  // за замовчуванням роозмір стеку
    Stack(const Stack<T>&);          // конструктор копіювання
    ~Stack();                         // деструктор
 
    inline void push(const T&);     // розміщення елемента у вершину стеку
    void pop();                   // видалення елемента стеку із вершини
    inline void printStack();         // вивід стеку
    inline const T& Peek(int) const;
    inline int getStackSize() const;  // отримання розміру стеку
    inline T* getPtr() const;         // отримання вказівника на стек
    inline int getTop() const;        // отримання номера елемента у стеку
};
// конструктор 
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>
void Stack<T>::pop()
{
    assert(top > 0);
    stackPtr[--top];
}
 
// повернення н-го елемента від вершини стеку
template <class T>
inline const T& Stack<T>::Peek(int nom) const
{
    assert(nom <= top);
    return stackPtr[top - nom];
}
 
// вивід стеку
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;
}
int main()
{
    setlocale(LC_ALL, "ukr");
    cout << "Заносимо елементи(числа) в стек:\n";   //заповнення стеку
    Stack<int> stackInteger(5);
    int ct1 = 0;
    int ch1;
    while (ct1++ < 5)
    {
        cin >> ch1;
        stackInteger.push(ch1); // розміщення елемента в стеку
    }
    cout << endl;
    stackInteger.printStack();
    cout << "\nВидаляємо елемент iз стеку:\n";
    stackInteger.pop();
    stackInteger.printStack();
    Stack<int> newStack1(stackInteger);
    cout << "Спрацював конструктор копiювання\n";
    newStack1.printStack();
 
    cout << "Заносимо елементи(слова) в стек:\n";   //заповнення стеку
    Stack<string> stackString(5);
    int ct2 = 0;
    string ch2;
    while (ct2++ < 5)
    {
        cin >> ch2;
        stackString.push(ch2);
    }
    cout << endl;
    stackString.printStack();
    cout << "\nВидаляємо елемент iз стеку:\n";
    stackString.pop();
    stackString.printStack();
    Stack<string> newStack2(stackString);
    cout << "Спрацював конструктор копiювання\n";
    newStack2.printStack();
 
    cout << "Заносимо елементи(символи) в стек:\n";   //заповнення стеку
    Stack<char> stackSymbol(5);
    int ct = 0;
    char ch;
    while (ct++ < 5)
    {
        cin >> ch;
        stackSymbol.push(ch);
    }
    cout << endl;
    stackSymbol.printStack();
    cout << "\nВидаляємо елемент iз стеку:\n";
    stackSymbol.pop();
    stackSymbol.printStack();
    Stack<char> newStack(stackSymbol);
    cout << "Спрацював конструктор копiювання\n";
    newStack.printStack();
 
    system("Pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2019, 22:41
Ответы с готовыми решениями:

На основе контейнера stack построить стек с информацией об успешности студентов
На основе контейнера stack построить стек с информацией об успешности студентов (фамилия,...

Создать стек на основе контейнера vector
На основе контейнера vector построить стек целых чисел. Выполнить операции занесения элемента в...

На основе контейнера vector построить двумерный динамический массив
Каким образом можно один двумерный массив скопировать в другой?С помощью copy() не получается На...

Сортировка контейнера list
Как отсортировать (с помощью sort()) и вывести в текстовый документ список l ? код программы:...

2
610 / 415 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
03.06.2019, 22:47 2
Цитата Сообщение от Halina28648 Посмотреть сообщение
благоустроенный стек
С этого места поподробнее, пожалуйста...
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
03.06.2019, 23:33 3
Благоустройство стеков - дело рук самих стеков.
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
#include <iostream>
#include <list>
using namespace std;
template<class T>
class Stack :private list<T>
{
public:
 
    Stack():list<T>(){}
    void push(const T& val){this->insert(this->end(), val);}
    void pop(){if(this->size())this->erase(--this->end());}
    T top(){return *this->rbegin();}
    friend
    ostream& operator<<(ostream &os, const Stack &obj)
    {
        for(const auto &a:obj)cout<<a<<' ';
      return os;
    }
    ~Stack(){this->~list<T>();}
};
 
void test(Stack<int> st)//намеренно по значению - посмотрим как копируется и удаляется деструктором
{
for(int i=0; i<5; ++i)
{
    st.push(i);
    cout<<st<<endl;
}
cout<<st.top()<<endl;
for(int i=0; i<5; ++i)
{
    st.pop();
    cout<<st<<endl;
}
cout<<st.top()<<endl;
}
 
int main()
{
Stack<int> st;
test(st);
 
cin.get();
return 0;
}
Halina28648, добавьте метод size () получить у списка его длину нетрудно, но список очень туп и будет бегать по себе. Вы можете написать счётчик который на каждой пуше ++ , а на каждой попе --.
Ну и от себя что-нить по желанию. Тут не всё идеально.
0
03.06.2019, 23:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2019, 23:33
Помогаю со студенческими работами здесь

Использование контейнера list
Не могу из методички с задачками по контейнерам решить пару из них. Есть список целых чисел...

Указатель на элемент контейнера list
Здравия желаю. Вопрос такой: будет/может ли меняться адрес элемента, стоящего за удаляемым. Если...

Узнать длину контейнера List
Гдето видел List.Length(), но в С# этого нету. как быть?

Объявление матрицы на основе контейнера vector
Здрасте. Не могли бы вы помочь расшифровать строку - vector&lt;vector&lt;int&gt; graf(num,...


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

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