Главная страница
    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.46 MB
Время: 0.032 c
1-1083219223
GIL
2004-04-29 10:13
2004.05.16
Форма хочет быть неполноценной MDI


3-1081970454
3APA3A
2004-04-14 23:20
2004.05.16
База не меняет размер...


9-1059490261
Rooo
2003-07-29 18:51
2004.05.16
Как поставить GlScene 09b на Delphi 7?


3-1081783672
oleg_SYS
2004-04-12 19:27
2004.05.16
Stream в таблицу Access


4-1079949095
dr Tr0jan
2004-03-22 12:51
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский