Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 13.09.2016
Сообщений: 17

Двусвязный список, вставка элемента в заданную позицию, и удаление элемента из заданной позиции

10.12.2016, 02:45. Показов 2855. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужны функции для двусвязного списка, вставка элемента в заданную позицию, и удаление элемента из заданной позиции (список задан структурой)
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct item 
{
    int data;
    item *next;
    item *prev;
    item(int x = 0, item*p = nullptr, item*n = nullptr)
    {
        data = x;
        prev = p;
        next = n;
    }
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2016, 02:45
Ответы с готовыми решениями:

Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
Добавить в класс "Односвязный список" следующие функции: вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск...

Вставка элемента на заданную позицию в список, TurboProlog
Здравствуйте, помогите пожалуйста,нужно вставить элемент на заданную позицию в список, вот мой код: domains list=integer* predicates ...

Вставка элемента в заданную позицию вектора
Помогите пожалуйста сделать задание Вставка элемента в заданную позицию вектора в MATLAB и МATHCAD. Спасибо.

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2022, 19:25
Помогаю со студенческими работами здесь

Односвязные списки.Вставка элемента в заданную позицию
Здравствуйте, я столкнулся с такой проблемой точнее наверно с непониманием...короче говоря нужно в список добавить элемент по позиции вот...

Функция: вставка элемента в двусвязный список после заданного
Всем доброго времени суток! Нужно написать функцию вставки элемента в двусвязный список после заданного. Список моего задания состоит из 4...

Вставка элемента в список на все X позиции
Имеется программа вставки элемента в список ins(1,EL,,). ins(N,EL,,):- N1=N-1, ins(N1,EL,T,T1). По заданию нужно: Написать...

Двусвязный список. Удаление элемента по ключу
Привет, товарищи-форумчане. Нужно построить двусвязный список из фамилий. Оставить в нем только фамилии, начинающиеся на букву «А»,...

Удаление последнего элемента, двусвязный список
void del() { struct elem *p; p=tail-&gt;pred; free(tail); p=tail; } Вот собсна код удаления. Но есть одно но. На месте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru