-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNode.h
147 lines (119 loc) · 5.58 KB
/
Node.h
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
#pragma once
#include <iostream>
//Описати структуру даних для елементу однонаправленого списку Node :
//struct Node {
// int data;
// Node* next;
// Node() { data = 0; next = nullptr; }
// Node(int x) { data = x; next = nullptr; }
//};
//Структуру Node розмістити в окремому заголовному файлі <node.h>(про
// деталі організації багатофайлових програм можна подивитися в матеріалах
// лекцій першого семестру «Л6_Багатофайлові_програми.docx»).
// З використанням структури Node реалізувати однонаправлений
// динамічний список - стек.Додавання / видалення елементів здійснюється з
// вершини стека Top(змінна - покажчик на вершину стека).Якщо стек порожній,
// то Top = nullptr.
//
class Stack;
struct Node
{
int data;
Node* next;
Node()
{
data = 0; next = nullptr;
}
Node(int x)
{
data = x; next = nullptr;
}
};
// Клас для стека
class Stack
{
private:
Node* top; // Вказівник на вершину стека
public:
Stack() : top(nullptr) {}
// Додати елемент до вершини стека
void push(int value)
{
Node* newNode = new Node(value); // Створюємо новий елемент
newNode->next = top; // Оновлюємо вказівник на наступний елемент
top = newNode; // Оновлюємо вершину стека
}
// Видалити елемент з вершини стека
void pop()
{
if (isEmpty())
{
std::cout << "Stack is empty. Cannot pop." << std::endl;
return;
}
Node* temp = top; // Тимчасовий вказівник на вершину стека
top = top->next; // Переміщаємо вершину на наступний елемент
delete temp; // Видаляємо попередню вершину
}
// Перевірка на порожність стека
bool isEmpty() const
{
return top == nullptr;
}
// Розділити стек на два окремих стека: парні та непарні числа (для перевірки додаткової)
void splitEvenOdd(Stack& evenStack, Stack& oddStack)
{
Node* current = top;
while (current != nullptr)
{
if (current->data % 2 == 0)
evenStack.push(current->data);
else
oddStack.push(current->data);
current = current->next;
}
}
// Метод для виводу елементів стеку
void viewStack() const
{
Node* current = top;
while (current != nullptr)
{
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}
// Видалити з стеку верхній елемент
void removeFromStack()
{
pop();
}
//void mergeStacks(const Stack& stack1, const Stack& stack2, Stack& resultStack)
//{
// while (!stack1.isEmpty() && !stack2.isEmpty())
// {
// if (stack1.top->data > stack2.top->data)
// {
// resultStack.push(stack1.top->data);
// stack1.pop();
// }
// else
// {
// resultStack.push(stack2.top->data);
// stack2.pop();
// }
// }
// // Додатково додаємо елементи з не порожнього стеку
// while (!stack1.isEmpty())
// {
// resultStack.push(stack1.top->data);
// stack1.pop();
// }
// while (!stack2.isEmpty())
// {
// resultStack.push(stack2.top->data);
// stack2.pop();
// }
//}
};