Текущий архив: 2004.05.16;
Скачать: CL | DM;
ВнизКак быстро удалить указатель из списка Найти похожие ветки
← →
Girder (2004-05-04 16:48) [0]Есть два списка указателей на данные. Первый содержит отсортированный список данных по их уникальным номерам. Каждой записи данных присваивается свой уникальный номер.
Второй список отсортирован по содержимому этих данных.
Вопрос:
- необходимо удалить некоторые указатели на данные по их
уникальному номеру. Понятно что из первого списка произвести
быстрою выборку нет проблемм. А как быстро найти этот же
указатель из второго списка(Последовательный перебор
отпадает - не производительно)?
← →
Erik © (2004-05-04 17:01) [1]Если у тебя TList то IndexOf используй или храни сам Index в первом списке.
← →
Girder (2004-05-04 17:49) [2]>Если у тебя TList то IndexOf используй
Да TList. А разве IndexOf делает это не последовательным перебором?.
>храни сам Index в первом списке
Хорошо - Пусть запись будет имеет следующий вид:
Type
PNumPoin=^TNumPoint;
TNumPoint=record
Num:integer - уникальный номер данных
Point:Pointer - данные
Index:integer - ссылка на номер индекса во втором списке
end;
Первый список содержит к примеру:
Указатель 0=(Num:1;Point:...;Index:5)
Указатель 1=(Num:6;Point:...;Index:2)
Указатель 2=(Num:7;Point:...;Index:1)
Указатель 3=(Num:10;Point:...;Index:0)
Указатель 4=(Num:11;Point:...;Index:3)
Указатель 5=(Num:12;Point:...;Index:4)
Второй список будет иметь вид:
Указатель 0=(Num:10;Point:...;Index:0)
Указатель 1=(Num:7;Point:...;Index:1)
Указатель 2=(Num:6;Point:...;Index:2)
Указатель 3=(Num:11;Point:...;Index:3)
Указатель 4=(Num:12;Point:...;Index:4)
Указатель 5=(Num:1;Point:...;Index:5)
Удаляем данные с номером Num=6, тогда:
Первый список станет:
Указатель 0=(Num:1;Point:...;Index:5)
Указатель 1=(Num:7;Point:...;Index:1)
Указатель 2=(Num:10;Point:...;Index:0)
Указатель 3=(Num:11;Point:...;Index:3)
Указатель 4=(Num:12;Point:...;Index:4)
Второй список примет вид:
Указатель 0=(Num:10;Point:...;Index:0)
Указатель 1=(Num:7;Point:...;Index:1)
Указатель 2=(Num:11;Point:...;Index:3)
Указатель 3=(Num:12;Point:...;Index:4)
Указатель 4=(Num:1;Point:...;Index:5)
А теперь попробуй удалить запись к примеру с номером Num=1.
Хотя в этом что-то есть интересное, если ввести коррекцию типо:
Записи с Index 5 нет, но есть Index 4 а в нем Index=5, но при большом списке и большом количестве удалений наверно будет много(слишком много) приблежений. Буду проверять.
Может быть есть еще идеи?
← →
Alex Konshin © (2004-05-04 19:27) [3]У тебя типичный случай данных с целым ключом.
Посмотри мои юниты Arrays и/или AVLTrees на http://home.earthlink.net/~akonshin/
← →
Alex Konshin © (2004-05-04 19:29) [4]Я только одного не понял, почему ты называешь это списком, когда это массив? Может тебе действительно список организовать?
← →
Girder (2004-05-04 19:44) [5]>Может тебе действительно список организовать?
Всмысле?
Страницы: 1 вся ветка
Текущий архив: 2004.05.16;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.037 c