
С++ Динамические структуры Создайте функции и программу-тест, реализующие основные операции для
стэка. Узлы стэка содержат целочисленные значения.

Ответы на вопрос

Ответ:
#include<iostream>
#include<list>
using namespace std;
class Stack
{
public:
void push(int value)
{
stack_lst.push_front(value);
}
int top()
{
int value=stack_lst.front();
stack_lst.pop_front();
return value;
}
bool empty()
{
return stack_lst.empty();
}
private:
list<int> stack_lst;
};
int main()
{
Stack a;
for(int i=0;i<10;i++)
{
a.push(i);
}
while(!(a.empty()))
{
cout<<a.top()<<endl;
}
return 0;
}
Объяснение:



Давайте создадим простую реализацию стека в C++, включающую основные операции: добавление элемента в вершину стека (push), удаление элемента из вершины стека (pop), проверку на пустоту стека (isEmpty), получение значения вершины стека без удаления (peek), и функцию для создания тестовой программы.
cpp#include <iostream>
class StackNode {
public:
int data;
StackNode* next;
StackNode(int value) : data(value), next(nullptr) {}
};
class Stack {
private:
StackNode* top;
public:
Stack() : top(nullptr) {}
void push(int value) {
StackNode* newNode = new StackNode(value);
newNode->next = top;
top = newNode;
}
void pop() {
if (isEmpty()) {
std::cout << "Stack is empty. Cannot pop." << std::endl;
return;
}
StackNode* temp = top;
top = top->next;
delete temp;
}
bool isEmpty() {
return top == nullptr;
}
int peek() {
if (isEmpty()) {
std::cout << "Stack is empty. Cannot peek." << std::endl;
return -1; // You can choose a different value or behavior for this case
}
return top->data;
}
~Stack() {
while (!isEmpty()) {
pop();
}
}
};
int main() {
Stack stack;
stack.push(5);
stack.push(10);
stack.push(20);
std::cout << "Top element: " << stack.peek() << std::endl;
stack.pop();
std::cout << "Top element after pop: " << stack.peek() << std::endl;
stack.pop();
stack.pop();
if (stack.isEmpty()) {
std::cout << "Stack is empty." << std::endl;
} else {
std::cout << "Stack is not empty." << std::endl;
}
return 0;
}
Это основная реализация стека и тестовая программа для демонстрации его работы. Пожалуйста, обратите внимание, что данная реализация не включает обработку всех возможных ошибок, таких как переполнение стека, и преднамеренно упрощена для целей объяснения. В реальном коде обязательно следует учесть все возможные ситуации и добавить обработку ошибок.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili