milla писал(а):думаю, что здесь имеется в виду такой вариант: "хочу вставить/изменить/удалить элемент, который находится в i-том блоке на j-той позиции", i, j и значение элемента задает пользователь.
Ты понимаешь, что связный список не предназначен для эффективной работы с индексами? Т. е. чтобы найти элемент по индексу, нужно от первого элемента последовательно дойти до него. Ну или от последнего, если число элементов известно.
milla писал(а):1. Добавление новой записи в начало списка
2. Добавление новой записи в конец списка
3. Вставка новой записи на заданную позицию
4. Удаление записи, находящейся на заданной позиции
5. Изменение записи, находящейся на заданной позиции
6. Очистка информационного массива
7. Последовательный поиск записи в информационном массиве
8. Вывод содержимого информационного массива на экран
9. Вывод служебных данных и текущей структуры используемой структуры хранения.
Давай так. Код пишу тут, могут быть ошибки. В случае с массивами шаблонность не пройдёт.
Есть элемент списка:
- Код: Выделить всё
template <typename key_type, typename value_type>
struct item
{
key_type key;
value_type value;
item *prev, *next;
}
Есть сам список
- Код: Выделить всё
template <typename key_type, typename value_type>
struct list
{
item <key_type, value_type> first, last;
}
Что с этим надо сделать:
0. Создать список. first = last = 0
1. Добавление в начало. Создать новый item, его next должен указывать на старый first, обновить first. Аккутатно обработать случай, когда список пуст.
2. Добавление в конец. Аналогично 1.
3. Добавление после текущего. Новому поставить задать предыдущий cur и следующий cur->next. На созданный элемент направить cur->next, и cur->next->prev. Осторожно обработать случаи, когда что-то не существует.
4. Удалить текущий. Собственно изменить ссылки cur->next->prev и cur->prev->next, чтобы пропустить cur. Уничтожить cur. Рекомендую возвращать указатель на следующий. Осторожно обработать случаи, когда что-то не существует.
5. Изменение текущей записи. Просто поменять значение.
6. Очистка. Уничтожить все элементы списка пройдя по нему. Присвоить first = last = 0, как при создании.
7. Поиск. Идти по списку, пока не найдёшь.
8. Вывод. Идти по списку до конца и что-то выводить.
9. ???
Чтобы это работало с индексом, надо в цикле дойти до нужного элемента.