Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Как быстро удалить указатель из списка   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.047 c
14-1082954691
sapsi
2004-04-26 08:44
2004.05.16
Передача "Фактор страха"


3-1082087860
Dark Man
2004-04-16 07:57
2004.05.16
А вот акаунт какой???


3-1082370904
Женя
2004-04-19 14:35
2004.05.16
однофайловая однопользовательская база данных


6-1079886834
LAndreyL
2004-03-21 19:33
2004.05.16
Кодировка для отправки почты?


4-1080467334
Nevil
2004-03-28 13:48
2004.05.16
Как определить атрибуты файла из SHGetFileInfo?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский