лаба 6 с комментариями
unknown
c_cpp
3 years ago
3.3 kB
30
Indexable
#include <iostream>
template <typename T>
struct Node
// узел или нода. Список это сеть узлов, по которому мы гуляем, когда работаем с ним
// Список это не один массив данных. Это именно порядок узлов, где они друг на друга ссылаются
{
// Здесь хранится передаваемая переменная
T data;
// Указатель на следующий элемент
Node *next;
};
template <typename T>
class List
{
private:
// Указатель на первый элемент
Node<T>* _head;
// Размер лист
int _size = 0;
public:
List() {
// _head - указатель на первый элемент
// У нас список с односвязным связыванием.
_head = nullptr;
};
void push(T val){
// добавить элемент в начало списка
Node<T> *n = new Node<T>();
n->data = val;
n->next = _head;
_head = n;
_size++;
}
T pop(){
// удалить элемент в начале списка и вернуть элемент p
if(_head) {
T p = _head->data;
_head = _head->next;
_size--;
return p;
}
}
void set_value(int idx, T value)
{
// Установка нового значения по индексу idx
// Используется перебор для поиска
Node<T> *temp = _head;
int index = 0;
while (temp->next) {
if (index == idx) {
temp->data = value;
return;
} else {
temp = temp->next;
}
index++;
}
temp->data = value;
}
T& operator [](int idx)
{
// Получение значения элемент по индексу idx
Node<T> *temp = _head;
int index = 0;
while (temp->next) {
if (index == idx) {
return temp -> data;
} else {
temp = temp->next;
}
index++;
}
return temp -> data;
}
void print_data()
{
// вывод всего списка
Node<T> *temp = _head;
// пока у текущего элемента есть следующий
while (temp->next) {
// выводим его на экран
std::cout << temp->data << " ";
// текущий = следующий
temp = temp->next;
}
std::cout << temp->data << " ";
std::cout << std::endl;
}
};
int main() {
// Даны два списка L1 и L2.
// Сформировать список L3, элементы которого являются разностью соответствующих элементов L1 и L2.
int n;
std::cout << "Input n=";
std::cin >> n;
// Создаём списки
List<int> list1, list2;
int temp;
for (int i=0; i<n; i++) {
std::cout << "Input list1[" << i << "]=";
std::cin >> temp;
list1.push(temp);
};
for (int i=0; i<n; i++) {
std::cout << "Input list2[" << i << "]=";
std::cin >> temp;
list2.push(temp);
}
List<int> list3;
for (int i=0; i<n; i++) {
temp = list2[i] - list1[i];
list3.push(temp);
}
std::cout << "list3:\n";
list3.print_data();
return 0;
};
Editor is loading...