Предмет:
ИнформатикаАвтор:
natashapotterОбъяснение:
Для добавления описанных функций к классу `ForwardList`, вам необходимо выполнить следующие шаги. Ниже представлен код с комментариями, которые поясняют каждый шаг:
```cpp
#include <iostream>
#include <set> // Для сортировки и поиска уникальных элементов
using namespace std;
template <typename T>
struct Node {
T value;
Node* pNext;
Node(T value = T()) {
this->value = value;
this->pNext = nullptr;
}
};
template <typename T>
class ForwardList {
typedef Node<T> Node;
Node* head;
unsigned int size;
public:
// Остальной код без изменений
// 1. PopBack (удаление с конца)
void PopBack() {
if (size == 0)
return;
if (size == 1) {
delete head;
head = nullptr;
size = 0;
return;
}
Node* temp = head;
while (temp->pNext->pNext != nullptr) {
temp = temp->pNext;
}
delete temp->pNext;
temp->pNext = nullptr;
size--;
}
// 2. Insert (добавление по индексу)
void Insert(unsigned int index, const T value) {
if (index == 0) {
PushFront(value);
return;
}
if (index >= size) {
PushBack(value);
return;
}
Node* temp = head;
for (unsigned int i = 0; i < index - 1; i++) {
temp = temp->pNext;
}
Node* newNode = new Node(value);
newNode->pNext = temp->pNext;
temp->pNext = newNode;
size++;
}
// 3. RemoveAt (удаление по индексу)
void RemoveAt(unsigned int index) {
if (index >= size)
return;
if (index == 0) {
PopFront();
return;
}
if (index == size - 1) {
PopBack();
return;
}
Node* temp = head;
for (unsigned int i = 0; i < index - 1; i++) {
temp = temp->pNext;
}
Node* toDelete = temp->pNext;
temp->pNext = toDelete->pNext;
delete toDelete;
size--;
}
// 4. operator +
ForwardList operator+(const ForwardList& other) {
ForwardList result(*this);
Node* temp = other.head;
while (temp != nullptr) {
result.PushBack(temp->value);
temp = temp->pNext;
}
return result;
}
// 5. Конструктор копирования
ForwardList(const ForwardList& other) {
head = nullptr;
size = 0;
Node* temp = other.head;
while (temp != nullptr) {
PushBack(temp->value);
temp = temp->pNext;
}
}
// 6. Сортировка
void Sort() {
if (size <= 1)
return;
for (unsigned int i = 0; i < size - 1; i++) {
Node* temp = head;
for (unsigned int j = 0; j < size - i - 1; j++) {
if (temp->value > temp->pNext->value) {
T tmpValue = temp->value;
temp->value = temp->pNext->value;
temp->pNext->value = tmpValue;
}
temp = temp->pNext;
}
}
}
// 7. GetUnique, который возвращает новый лист ТОЛЬКО из уникальных элементов
ForwardList GetUnique() {
ForwardList result;
set<T> uniqueSet;
Node* temp = head;
while (temp != nullptr) {
uniqueSet.insert(temp->value);
temp = temp->pNext;
}
for (const T& value : uniqueSet) {
result.PushBack(value);
}
return result;
}
};
int main() {
// Остальной код без изменений
return 0;
}
```
Теперь у вас есть реализация методов `PopBack`, `Insert`, `RemoveAt`, перегрузки оператора `+`, конструктора копирования, сортировки и `GetUnique`. Вы можете использовать их в своей программе для работы с односвязным списком `ForwardList`.
Проверь!
Автор:
cleodblvДобавить свой ответ
Предмет:
МатематикаАвтор:
skipperОтветов:
Смотреть
Предмет:
Українська моваАвтор:
makaylaОтветов:
Смотреть
Предмет:
МатематикаАвтор:
nicoОтветов:
Смотреть
Предмет:
МатематикаАвтор:
kristopherОтветов:
Смотреть