Страница: 1 |
Вопрос: Использование очередей | Добавлено: 24.01.06 01:05 |
Автор вопроса: ![]() |
Часто в прогоамме требуется использовать такие элементы как очереди. Превожу пример создания очереди на PB с использованием кучи(heap):
#If Not %Def(%PBlistUsingHeapFunctions) %PBqueueUsingHeapFunctions=1 %usemacros=1 #If Not %Def(%WINAPI) #Include "Win32Api.inc" #EndIf Type FileList nxt As FileList Ptr Str As Asciiz Ptr Lng As Dword End Type Global hHeap As Dword Global First As FileList Ptr Global Last As FileList Ptr Macro InitList hHeap=GetProcessHeap() End Macro Function pop(ByRef str As String) As Dword Local x As FileList Ptr If First Then x=First First=@First.nxt str=Space$(@x.lng) MoveMemory(ByVal StrPtr(str),ByVal @x.str,@x.lng) HeapFree(hHeap,0,@x.str) HeapFree(hHeap,0,x) End If End Function Function push(Txt As String) As Dword Local element,y As FileList Ptr, s As Asciiz Ptr element=HeapAlloc(hHeap,%HEAP_ZERO_MEMORY,SizeOf(FileList)) s=HeapAlloc(hHeap,%HEAP_ZERO_MEMORY,Len(Txt)+1) If element=0 Or s=0 Then Exit Function End If @element.str=s @element.Lng=Len(Txt) MoveMemory(ByVal s,ByVal StrPtr(txt),ByVal Len(txt)) If First Then @Last.nxt=element Last=element Else First=element Last=element End If End Function #EndIf Если у кого есть примеры деревьев(АВЛ, Фибоначи), стеков и т.д. если можно выложите.(код также можно взять здесь http://piv-tula.narod.ru/powerbasic/queue.inc) |
Ответы | Всего ответов: 4 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 84 Ответов: 453 |
Профиль | Цитата | #1 | Добавлено: 24.01.06 10:43 |
сли у кого есть примеры деревьев(АВЛ, Фибоначи), стеков и т.д. если можно выложите.(код также можно взять здесь http://piv-tula.narod.ru/powerbasic/queue.inc)
Ищи такие примеры в POFFS, там все это должно быть... |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 24.01.06 22:17 |
А стек тебе то чем не угодил? Та же очередь, только не по нашему названа ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ICQ: 333346191 Вопросов: 6 Ответов: 21 |
Профиль | Цитата | #3 | Добавлено: 24.01.06 23:57 |
To CyRax
В стеке ассоциированная информацию кладётся и извлекается с конца, а в очереди извлекается с конца, а кладётся в начало. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 25.01.06 00:46 |
Понятно, в принципе ты можешь брать откуда хочешь. Посмотри вот такой вариант:
Function PBMain
#Register None Dim Dst As Long ' Инициализация ! MOV EAX,3 ! MOV ECX,4 ' Создать временную базу стека в EDX ! MOV EDX,ESP ' Загрузить в стек 2 значения ! PUSH EAX ! PUSH ECX ' Получить элемент, отправленный в стек первым ! MOV EAX,[EDX-4] ! MOV Dst,EAX MsgBox Str$(Dst) End Function EDX-4 - этро будет первый запушенный элемент, EDX-8 - второй и т.д. Если тебе нужен инкремент временной базы, то просто делай SUB EDX,4. Вроде так. |
Страница: 1 |
|