4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
1

Доступ к элементам связного списка

05.04.2013, 23:51. Показов 4138. Ответов 12
Метки нет (Все метки)

как организовать самый простой для реализации способ чтобы получить доступ к i-му элементу в односвязном списке?
придумал только создать вектор в который помещать адрес элемента из списка, получая доступ к i-му элементу вектора, получаем доступ к нужному элементу связного списка. но тогда сама суть пропадает связного списка, раз вектор используем в придачу к нему.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2013, 23:51
Ответы с готовыми решениями:

Интерактивный доступ к элементам списка
программа должна обеспечивать интерактивный режим просмотра элементов списка. Как это...

Создание двойного связного списка целых чисел, вводимых с клавиатуры; печать списка
Люди помогите, нужно сдать последнюю Лабу. Задача: Написать программу которая создает двойной...

Может ли объемлющий класс иметь неограниченный доступ к элементам вложенного класса? А вложенный класс — к элементам объемлющего?
Ответ как бы знаю(нет , да). но наверное я что-то не так понимаю, т.к. примерчик написать не...

Реализация связного списка
надо решить задачу: Сведения о владельце автомобиля: фамилия, марка автомобиля (строки), номер...

12
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
06.04.2013, 00:09 2
metrolog, смотрите в сторону индексированных списков.

Добавлено через 12 минут
metrolog, а что ты хочешь там сделать?
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
06.04.2013, 00:24  [ТС] 3
да просто интересно как к элементам по индексам доступ осуществлять.
хотел бы узнать именно в связных списках как простым способом это делается
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
06.04.2013, 00:28 4
metrolog, я как-то писал программу для индексированных списков, там принцип тот что и вы предложили, только я хранил указатели в массиве, там было задание для адресной книжки, чтобы ускорить поиск я хранил указатели на первые записи каждой буквы алфавита.
1
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
06.04.2013, 00:37  [ТС] 5
к примеру я хочу вставить элемент не в конец списка я между какими нибудь элементами.
не проблема, вставил)
но как быть с порядковыми номерами тогда, все элементы списка привязаны к элементам вектора ведь ?
все элементы списка сдвигать в векторе?

все, вопросов нет, разобрался.)) добавляем и элемент вектора в середину списка.
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
06.04.2013, 00:44 6
так а зачем тебе вообще индексированный список, что ты хранишь в списке? в векторе храни только на указатели на некоторые элементы списка, иначе в этих индексах не будет толку.
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
06.04.2013, 00:48  [ТС] 7
да ничего не храню)) просто разбираюсь)))
в каком случае связный список использовать выгоднее чем вектор?
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
06.04.2013, 00:53 8
если тебе нужен быстрый доступ, то однозначно вектор, так как он обеспечивает произвольный доступ с постоянной скоростью, чего не скажешь о списках, зато в списках быстро происходит вставка и удаление, причем не только с концов. и если не ошибаюсь, то в списках нельзя наткнуться на перераспределение памяти в отличие от вектора.
1
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
06.04.2013, 01:05  [ТС] 9
а как удалить элемент списка из памяти? как освободить адрес им занимаемый? через delete ?

Добавлено через 8 минут
то есть правильно я понимаю: если размер вектора не задается, а меняется с каждым добавлением нового элемента, происходит перераспределение памяти ? а это приводит к длительности процесса добавления каждого нового элемента, так?
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
06.04.2013, 01:58 10
Цитата Сообщение от metrolog Посмотреть сообщение
а как удалить элемент списка из памяти? как освободить адрес им занимаемый? через delete ?
Обновить связи его соседей, прибить сам элемент.

Цитата Сообщение от metrolog Посмотреть сообщение
то есть правильно я понимаю: если размер вектора не задается, а меняется с каждым добавлением нового элемента, происходит перераспределение памяти ? а это приводит к длительности процесса добавления каждого нового элемента, так?
Не с каждым добавлением, но да. И ещё часть элементов надо сдвигать (всегда), если вставка производится не в конец вектора.

Цитата Сообщение от metrolog Посмотреть сообщение
да просто интересно как к элементам по индексам доступ осуществлять.
хотел бы узнать именно в связных списках как простым способом это делается
Именно таким, каким вы подумали: тупо проходим по всему списку до нужного элемента. Можно навернуть сверху различных кеширований, разреженных и развёрнутых списков и т. п., но суть остаётся та же.

Цитата Сообщение от metrolog Посмотреть сообщение
да ничего не храню)) просто разбираюсь)))
в каком случае связный список использовать выгоднее чем вектор?
Когда надо делать много вставок и удалений элементов не только по краям. Когда надо вставлять/удалять сразу целые подсписки.
1
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
06.04.2013, 11:56  [ТС] 11
Каким образом прибить сам элемент? Delete?
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
06.04.2013, 13:28 12
Естессно. Если создавали с помощью new.
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 101
06.04.2013, 23:33  [ТС] 13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct node{
 
int number;
node *next;
};
 
...
 
node* pOne;
node* pEnd;
 
// создаем node temp каким либо образом.
 
if( pOne==NULL)  // добавляем temp в список.
pOne = temp;
pEnd = temp;
 
else
{ pEnd->next = temp;
pEnd = temp;
}
если хочу удалить этот элемент из списка что делать?
то что у соседних элементов поменять указатели на следующие элементы это понятно.
а как именно из памяти его удалить?

Добавлено через 9 часов 53 минуты
то есть node temp нужно создавать через new чтобы потом удалить его?
если не через new его создал то уже не освободить эту ячейку памяти? или когда ссылок на нее не будет сборщик мусора сам заберет ее?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2013, 23:33
Помогаю со студенческими работами здесь

Сортировка связного списка
Привет всем! пришлите пожалуйста код реализации сортировки односвязного списка (желательно с...

Реализация связного списка
Помогите решить задачу Нужно написать программу без использования библиотеки list я вот...

Сортировка связного списка
Привет всем! как правильно написать сортировку для связного циклического списка ? помогите...

Создание связного списка
нужно создать связной список, что собственно уже сделал. что нужно: -функции: -root...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru