лаба 6 с комментариями
unknown
c_cpp
3 years ago
3.3 kB
24
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...