Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.022 c
3-1082688315
ksa3003
2004-04-23 06:45
2004.05.16
Время сервера


3-1082543669
avgur
2004-04-21 14:34
2004.05.16
Вопрос о истории значеий


11-1069055232
SanekBer
2003-11-17 10:47
2004.05.16
Не работает пример с MDI(DemoMDI.zip).


14-1082685033
Думкин
2004-04-23 05:50
2004.05.16
С днем рождения! 23 апреля.


14-1082786750
Mr.Credo
2004-04-24 10:05
2004.05.16
Shareware