Главная страница
    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.46 MB
Время: 0.037 c
14-1082878097
konstantinov
2004-04-25 11:28
2004.05.16
Как отключить autorun в ХР


3-1082465871
stud
2004-04-20 16:57
2004.05.16
использование параметра для LIKE


14-1082647358
SergP
2004-04-22 19:22
2004.05.16
Подскажите как правильно делать?


3-1081404801
ev
2004-04-08 10:13
2004.05.16
Как передать текст из edit в SQL запрос?


7-1080548997
kingdom
2004-03-29 12:29
2004.05.16
Поиск объектов на экране





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский