|
0 / 0 / 0
Регистрация: 13.09.2016
Сообщений: 17
|
||||||
Двусвязный список, вставка элемента в заданную позицию, и удаление элемента из заданной позиции10.12.2016, 02:45. Показов 2855. Ответов 1
Метки нет (Все метки)
Нужны функции для двусвязного списка, вставка элемента в заданную позицию, и удаление элемента из заданной позиции (список задан структурой)
0
|
||||||
| 10.12.2016, 02:45 | |
|
Ответы с готовыми решениями:
1
Вставка элемента в заданную позицию вектора |
|
0 / 0 / 0
Регистрация: 26.01.2022
Сообщений: 12
|
|
| 26.01.2022, 19:25 | |
|
Вот моя реализация:
Думаю, по аналогии можно сделать) template<typename T> struct Node { T data = T(); Node* next = NULL, * prev = NULL; Node() = default; Node(T value) : data(value) {} }; template<typename T> class list{ short size; Node<T> *head; Node<T> *tail; public: list() : size(0), head(NULL), tail(NULL) {} ~list() { while (!isEmpty()) { tail = head->next; delete head; head = tail; } } void push_back(const T value) { Node<T>* new_element = new Node<T>; new_element->next = NULL; new_element->data = value; if (isEmpty()) { new_element->prev = NULL; head = tail = new_element; } else { new_element->prev = tail; tail->next = new_element; tail = new_element; } ++size; } void push_to_head(const T value = T()) { if (isEmpty()) return push_back(value); Node<T>* new_element = new Node<T>; new_element->data = value; new_element->prev = NULL; head->prev = new_element; new_element->next = head; head = new_element; ++size; } void insert(const short index, const T value = T()) { if (index < 0 || index > size) throw std::out_of_range("..."); if (index == size) return push_back(value); if (index == 0) return push_to_head(value); Node<T>* cur; if (index > size / 2) { short cur_index = size - 1; cur = tail; while (cur_index != index - 1) { --cur_index; cur = cur->prev; } } else { short cur_index = 0; cur = head; while (cur_index != index - 1) { ++cur_index; cur = cur->next; } Node<T>* temp = new Node<T>(value); temp->next = cur->next; temp->prev = cur; cur->next->prev = temp; cur->next = temp; } ++size; } void insert(short index, const std::initializer_list<T> list) { if (index < 0 || index > size) throw std::out_of_range("..."); for (T element_of_list : list) insert(index++, element_of_list); } T pull() { if (isEmpty()) throw std::out_of_range("..."); Node<T>* cur = tail; tail = tail->prev; tail->next = NULL; T deleted_value = cur->data; delete cur; --size; return deleted_value; } T pull_from_head() { if (isEmpty()) throw std::out_of_range("..."); Node<T>* temp = head; T deleted_value = temp->data; head = head->next; head->prev = NULL; delete temp; --size; return deleted_value; } T p_erase(const short index) { if (isEmpty()) throw std::out_of_range("..."); if (index < 0 || index >= size) throw std::out_of_range("..."); if (index == size - 1) return pull(); if (index == 0) return pull_from_head(); Node<T>* cur; if (index > size / 2) { cur = tail; short cur_index = size - 1; while (cur_index != index) { --cur_index; cur = cur->prev; } } else { cur = head; short cur_index = 0; while (cur_index != index) { ++cur_index; cur = cur->next; } } Node<T>* temp = cur; temp->prev->next = cur->next; temp->next->prev = cur->prev; T deleted_value = cur->data; delete cur; --size; return deleted_value; } const T clear_list() { while (!isEmpty()) { tail = head->next; delete head; head = tail; } return T(); } T p_erase(const short index, const short amount) { if (amount >= size) if (index == 0) return clear_list(); else throw std::out_of_range("..."); for (short cur_amount = 0; cur_amount != amount - 1; ++cur_amount) p_erase(index); return p_erase(index); } inline bool isEmpty() const { return !head; }
0
|
|
| 26.01.2022, 19:25 | |
|
Помогаю со студенческими работами здесь
2
Односвязные списки.Вставка элемента в заданную позицию Функция: вставка элемента в двусвязный список после заданного Вставка элемента в список на все X позиции Двусвязный список. Удаление элемента по ключу Удаление последнего элемента, двусвязный список Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|