|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 4, 2003 02:21:25 И еще такой вопрос: есть некая структура, например, такая: SOMESTRUCT struct Param1 dd ? Param2 dd ? Param3 dd ? Param4 dd ? SOMESTRUCT ends Предполагается использование динамического массива таких структур, т.е. в любой момент количество элементов массива(а не элементов самой структуры) может уменьшиться или увеличиться. Как такое реализовывается? Есть у кого-нибудь примеры или ссылки на такой материал? |
|
|
Дата: Ноя 4, 2003 04:01:33 а не проще объявит труктуру так: 1. Params dd столько-то dup (?) - если знаешь сколько максимум будет элементов 2. Params dd ? - указатель на димамически изменяемый массив данных обращаться так Lea ESI, [EBP+EDX*4] ;EBP - указатель; EDX - элемент LodsD ;считать данные элемента |
|
|
Дата: Ноя 4, 2003 05:28:24 Создаёш переменную, которая указывает на последнюю существующую структуру и переменную указывающую на последнюю заполненную структуру при добавлении новой структуры проверяеш достаточно ли памяти, если нет то выделяеш ещё памяти (добавлять лучше память на несколько структур) под структуры. Можно в структуру добавить две переменные: адрес предыдущей структуры и адрес следующей структуры, если адрес предыдущей равен нулю, значит эта структура первая, если адрес следующей равен нулю, значит последняя. |
|
|
Дата: Ноя 4, 2003 17:06:46 hopeless Твой материал называется списком, т.е., структурой вида: SOMESTRUCT struct Param1 dd ? Param2 dd ? Param3 dd ? Param4 dd ? Next dd 0 SOMESTRUCT ends Поле Next показывает на следующую структуру такого же типа. Равно нулю, если структура последняя, равно указателю на следующую структуру в противном случае. Почитай статьи в разделе доков. |
|
|
Дата: Ноя 4, 2003 18:14:30 volodya Лист, конечно, неплохо, но при большом количестве елементов - страдает скорость кода. Причина: елементы листа не лежат 'рядом', как в массиве. При доступе получается большая вероятность Page Faults. === Это дело можно улучшить - выделяя сразу много елементов в одном куске памяти и когда нужен новый елемент - просто назначаем его из этого массива. Если елемент удаляется - помечаем его как свободный для применения в этом же листе. === |
|
|
Дата: Ноя 4, 2003 19:06:51 AsmGuru62 Это уже тоже обсуждалось - см. пример с realloc, приведенный bcl_lcz в топике о сортировке в алгоритмах. Что до выделения кучи элементов - мне не нравится, т.к. начинается своп. А вообще, лучше тогда, бинарное дерево. Оно не страдает недостатками списка, который, я, кстати, тоже не люблю. Пусть возмет сбалансированное деревце и все. |
|
|
Дата: Ноя 4, 2003 19:57:22 volodya Дерево не лучше и не хуже списка. Выбор дерева или списка (или вообще другой структуры) зависит от конкретной задачи. Например, деревья идеально подходят для быстрого поиска, зато списки проще сбрасывать/подгружать в файл. Кстати, сбалансировать дерево - задачка ещё та :-) IMO, если человек (hopeless) со структурами сталкивается впервые, то пусть уж лучше сначала разберётся с односвязным списком. |
|
|
Дата: Ноя 4, 2003 22:32:42 Quantum Оки-доки. Читаем Ника Паланте в разделе "Классика" - что в "Документы". Список читается так: узел = указатель на начало списка;
while(узел)
{
узел = узел->next;
} |
|
|
Дата: Ноя 6, 2003 19:05:15 volodya Что-то не нашел доков про списки/деревья и realloc(что меня особенно интересует). Можно прямой линк? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072 |