Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.74.239] |
|
Сообщ.
#1
,
|
|
|
Народ подскажите ссылку, где описано как с деревьями и списками работать. Желательно с примерами.
|
Сообщ.
#2
,
|
|
|
ну это конечна не ссылка но всеже
видел сегодня на рынке книженцию по АСМу написана Юровым называется Практикум на аасемблере, там есть то что ты хошь!! у нас она стоит 125 р. |
Сообщ.
#3
,
|
|
|
Не-а это не пойдет. А на этом сайте этого нет А еще исходниками называется
|
Сообщ.
#4
,
|
|
|
Ты хочешь, чтобы тебе на одном сайте было всё, что ты хочешь?!
Такого не бывает.... |
Сообщ.
#5
,
|
|
|
тебе панимаш умные люди говорят - купи Юрова. Рулезная книжка.
Вот тебе из нее примерчик <br>;--------------------------------------------------------------------------------;<br>;prg02_12.asm - программа построения и инициализации двоичного дерева.<br>;Вход: произвольный масиив чисел в памяти.<br>;Выход: двоичное дерево в памяти.<br>;--------------------------------------------------------------------------------;<br>.486<br>.model flat,STDCALL ;модель памяти flat,<br>;STDCALL - передача параметров в стиле С (справа налево), <br>; вызываемая процедура чистит за собой стек<br>;Объявление внешними используемых в данной программе функций Win32 (ASCII):<br>extrn AllocConsole:PROC<br>extrn ExitProcess:PROC<br>extrn GetProcessHeap:PROC<br>extrn HeapAlloc:PROC<br>extrn HeapFree:PROC<br>;объявления структур:<br>node_tree struc ;узел дерева<br>simbol db 0 ;содержательная часть<br>l_son dd 0 ;указатель на старшего (левого) сына<br>r_son dd 0 ;указатель на младшего (правого) сына<br>ends<br>.data<br>mas db 37h,12h,8h,65h,4h,54h,11h,02h,32h,5h,4h,87h,7h,21h,65h,45h,22h,11h,77h,51h,26h,73h,35h,12h,49h,37h,52h<br>l_mas=$-mas<br>Hand_Head dd 0 ;описатель кучи<br>HeadTree dd 0 ;указатель корень дерева<br>NewNode dd 0 ;временная переменная<br>.code<br>BuildBinTree proc<br>;формируем корень дерева и указатель на дерево HeadTree<br>;для размещения дерева используем кучу, выделяемую процессу по умолчанию (1 Мбайт), но при необходимости можно создать и доп. кучу с помощью HeapCreate<br>;HANDLE GetProcessHeap (VOID);<br> call GetProcessHeap<br> mov Hand_Head,eax ;сохраняеи дескриптор<br>;запрашиваем и инициализируем блок памяти из кучи для корня дерева:<br> xor ebx,ebx ;здесь будет указатель на предыдущий узел<br>;LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, DWORD dwBytes);<br> push type node_tree ;размер структуры для узла дерева<br> push 0 ;флаги не задаем<br> push eax ;описатель кучи (он же в Hand_Head)<br> call HeapAlloc<br> mov HeadTree,eax ;запоминаем указатель на корень дерева<br> mov ebx,eax ;и в ebx<br>;подчистим выделенную область памяти в куче<br> push ds<br> pop es<br> mov edi,eax<br> mov ecx,type node_tree<br> mov al,0<br>rep stosb<br>;первое число из mas в корень дерева<br> lea esi,mas<br> lodsb ;число в al<br> mov [ebx].simbol,al<br>;далее в цикле работаем с деревом и массивом mas<br> mov ecx,l_mas-1<br>@@cycl1:<br> push ecx ;HeapAlloc портит ecx, возвращая в нем некоторое значение<br>;запрашиваем блок памяти из кучи для узла дерева:<br>;LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, DWORD dwBytes);<br> push type node_tree ;размер структуры для узла дерева<br> push 0 ;флаги не задаем<br> push Hand_Head ;описатель кучи<br> call HeapAlloc<br> pop ecx<br> mov ebx,eax ;запоминаем указатель на узел дерева в ebx<br> mov NewNode,eax ;и во врем. перем.<br>;подчистим выделенную область памяти в куче<br> mov edi,eax<br> push ecx<br> mov ecx,type node_tree<br> mov al,0<br>rep stosb<br> pop ecx<br>;читаем очередное число из mas и записываем его в новый узел<br> lodsb ;число в al<br> mov [ebx].simbol,al<br>;ищем место в дереве согласно условиям упорядочивания и настраиваем указатели в узлах дерева<br> mov ebx,HeadTree<br>m_search:<br> cmp al,[ebx].simbol<br> mov edi,ebx ;продублируем<br> jae m1 ;если al >= [ebx].simbol <br>;если меньше, то идем по левой ветке<br> mov ebx,[ebx].l_son<br> cmp ebx,0<br> jne m_search<br>;если этого сына нет, то добавляем его к папе<br> mov ebx,NewNode<br> mov [edi].l_son,ebx<br> jmp end_cycl1<br>;если больше или равно, то по правой<br>m1:<br> mov ebx,[ebx].r_son<br> cmp ebx,0<br> jne m_search<br>;если этого сына нет, то добавляем его к папе<br> mov ebx,NewNode<br> mov [edi].r_son,ebx<br>end_cycl1:<br> loop @@cycl1<br>;двоичное дерево поиска построено<br> ret<br>BuildBinTree endp<br><br>start proc near<br>;точка входа в программу:<br> call BuildBinTree<br>exit:<br>;готовим вызов VOID ExitProcess(UINT uExitCode)<br> push 0<br> call ExitProcess<br>start endp<br>end start<br> |
Сообщ.
#6
,
|
|
|
Кхе а мне на .186 нужно, дерево список и.т.д.
|
Сообщ.
#7
,
|
|
|
Так переделай! Я сейчас проглядел быстренько, вроде достаточно только "e" отбросить и всё (т.е. eax -> ax и т.д), да заголовок поменять.....
|
Сообщ.
#8
,
|
|
|
Да я уже написал. Спасибо
|