Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 |

 

  Вопрос: Использование очередей Добавлено: 24.01.06 01:05  

Автор вопроса:  piv | ICQ: 333346191 
Часто в прогоамме требуется использовать такие элементы как очереди. Превожу пример создания очереди на 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
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #1 Добавлено: 24.01.06 10:43
сли у кого есть примеры деревьев(АВЛ, Фибоначи), стеков и т.д. если можно выложите.(код также можно взять здесь http://piv-tula.narod.ru/powerbasic/queue.inc)


Ищи такие примеры в POFFS, там все это должно быть...

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 24.01.06 22:17
 А стек тебе то чем не угодил? Та же очередь, только не по нашему названа :)

Ответить

Номер ответа: 3
Автор ответа:
 piv



ICQ: 333346191 

Вопросов: 6
Ответов: 21
 Профиль | | #3 Добавлено: 24.01.06 23:57
To CyRax
В стеке ассоциированная информацию кладётся и извлекается с конца, а в очереди извлекается с конца, а кладётся в начало.

Ответить

Номер ответа: 4
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам