Deutsch
Quelltexte/ Codesnippets

Deque Doppelseitige Double Ended Include Queue Warteschlange

 

p.specht

Die Datenstruktur DEQue (Double Ended Queue, Warteschlange mit zwei Enden) wird für manche Algorithmen gebraucht, etwa die Melkman-Hüllensuche. Für über 400 Elemente in der Schlange wird die hier implementierte Variante allerdings langsam. Aber immerhin kann man damit auch reale Warteschlangensysteme, etwa an Supermarktkassen, auf Effektivität untersuchen.
' DEQ.inc

Proc DEQHelp

    font 2:Cls:Print:"\n\n============================================================"
    Print "                        D E Q H e l p"
    Print "============================================================"
    Print "\n CLEAR q&[] ' natives XProfan ":Print " sz&  = SizeOf(q&[]) ' sz=5 bedeutet: 0,1,2,3,4 "
    Print " SetSize q&[],sizeof(q&[])+1 ' erweitert Array um 1 Stelle "
    Print " MakeIndexDEQ(q&[],n&) ":Print " MakeRevertIndexDEQ(q&[],n&) "
    Print " MakeConstDEQ(q&[],n&,wert&) ":Print "\n ShowDEQ q&[],nw&   ' Temporary NumWidth "
    Print "\n Wert&= PopBtm(q&[]) ' -999999999 = OutOfRange Error "
    Print " Wert&= PopTop(q&[]) ' or -999999999 ":Print " PutTop Wert&,q&[] "
    Print " PutBtm Wert&,q&[] ":Print "\n Wert&= CopyBtm(q&[]) "
    Print " Wert&= CopyTop(q&[]) ' -999999999 ":Print " Wert&= CopyFromDEQ(q&[],n&) "
    Print "\n LogVgl&=CmpInDEQ(q&[],n&,m&)' n=Pos1,m=Pos2: <1,'=0',>-1 "
    Print "\n NisM&= SwapInDEQ(q&[],n&,m&)' (N=M)=1, -999999999 "
    Print " Wert&= DelFromDEQ(q&[],n&) ":Print " DEQHelp ' diesen Text ausgeben":waitinput :endproc
    :proc MakeIndexDEQ :parameters q&[],n&:SetSize q&[],n&:q&[]=&index+1:endproc
    :proc MakeRevertIndexDEQ :parameters q&[],n&:SetSize q&[],n&:q&[]=n&-&index:endproc
    :proc MakeConstDEQ :parameters q&[],n&,wert&:SetSize q&[],n&:q&[]=Wert&:endproc
    :Proc PopBtm :parameters q&[]:var sz&=sizeof(q&[]):if sz&>0:var wert&=q&[0]
    q&[]=q&[&index+(&index<(sz&-1))]:setsize q&[],sizeof(q&[])-(sz&>0):return wert&
    else :return int(-999999999):endif :endproc
    :proc PopTop :parameters q&[]:declare wert&:var sz&=sizeof(q&[]):if sz&>0:wert&=q&[sz&-1]
    else :wert&=int(-999999999):endif :setsize q&[],sz&-(sz&>0):return wert&:endproc
    :Proc PutTop :parameters Wert&,q&[]:var sz&=sizeof(q&[]):inc sz&:setsize q&[],sz&:q&[sz&-1]=Wert&:endproc
    :Proc PutBtm :parameters Wert&,q&[]:declare tmp&[]:var sz&=sizeof(q&[]):inc sz&
    setsize q&[],sz&:tmp&[]=q&[]:q&[]=tmp&[&index-(&index>0)]:clear tmp&[]:q&[0]=Wert&:endproc
    :Proc CopyBtm :parameters q&[]:var sz&=sizeof(q&[]):if sz&>0:return q&[0]
    else :return int(-999999999):endif :endproc
    :proc CopyTop :parameters q&[]:declare wert&:var sz&=sizeof(q&[])

    if sz&>0:wert&=q&[sz&-1]:else :wert&=int(-999999999):endif :return wert&:endproc

        :proc ShowDEQ :parameters q&[],nw&:var tmp&=get("numwidth"):set("numwidth",nw&)
        var sz&=sizeof(q&[]):print tab(2);"n=";sz&;":  ";:whileloop 0,sz&-1:print q&[&Loop],
        endwhile :print:set("numwidth",tmp&):endproc
        :proc CopyFromDEQ :parameters q&[],n&:declare wert&:var sz&=sizeof(q&[])

        if (sz&>0) and (n&>=0) and (n&<sz&):wert&=q&[n&]:else :wert&=int(-999999999):endif :return wert&:endproc

            :Proc CmpInDEQ :parameters q&[],n&,m&
            var sz&=sizeof(q&[]):if (sz&>0) and (n&>=0) and (n&<sz&) and (m&>=0) and (m&<sz&)
            return int((q&[n&]<q&[m&])-(q&[n&]>q&[m&])):else :return int(-999999999):endif :Endproc
            :Proc SwapInDEQ :parameters q&[],n&,m&'Swaps two elements in Queue
            var sz&=sizeof(q&[]):if (sz&>0) and (n&>=0) and (n&<sz&) and (m&>=0) and (m&<sz&):var tmp&=q&[n&]
            q&[n&]=q&[m&]:q&[m&]=tmp&:return int(n&<>m&):else :return int(-999999999):endif :endproc
            :proc DelFromDEQ :parameters q&[],n&:var sz&=sizeof(q&[]) :declare wert&

            if (sz&>0) and (n&>0) and (n&<sz&):wert&=q&[n&]:q&[]=q&[&index+(&index>=n&)*(&index<(sz&-1))]

                dec sz&:setsize q&[],sz&:else :wert&=int(-999999999):endif :return wert&

            endproc

 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
13.08.2014  
 




p.specht

Und wie macht man das da oben nun zu einem Codeabschnitt ohne Smilies?
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
14.08.2014  
 




Paul
Glatz

7 kB
Hochgeladen:14.08.2014
Ladeanzahl243
Herunterladen
 
14.08.2014  
 




p.specht

Ahhhhhhh, danke Paul!
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
14.08.2014  
 



Huhu,

ist das Thema besser hier  [...]  aufgehoben?


34 kB
Hochgeladen:15.08.2014
Ladeanzahl188
Herunterladen
 
15.08.2014  
 




p.specht

Unter welchem Stichwort würde das jemand dort suchen, wenn er von Deque als Begriff nie gehört hat? Und wieso käme er dann auf die Idee, Schirm 17 oder so anzuklicken? Aber in Kopie spricht natürlich nix dagegen.
Gruss
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
19.08.2014  
 



Das könntest Du meiner Meinung nach aber auch ganz anders sehen.

Wenn es unter Quelltexte liegt und jemand mit der Suchfunktion nach irgend einem dieser Worte sucht:

Include DeQue Double-ended Queue doppelseitige Warteschlange


dann wird dort stehen, dass es ein Thema unter "Quelltexte" dazu gibt und der Suchende wird damit erkennen, dass für ihn ein Quelltext-Fundstück bereitliegt.

Wiederum unter "XPSE" ist es danach weniger sinnvoll einsortiert auch weil es sich nicht um einen Quelltext speziell für XPSE handelt.

Und zudem: Dein Profil  [...]  wird damit auch korrekt ausgefüllt denn dort gibt es die Rubrik "Quelltexte/ Codesnippets" und dort steht jetzt ja bei Dir eine 0 (Null) was ja so dann nicht stimmt.
 
20.08.2014  
 




p.specht

Also bitteschön... wo Du recht hast hast Du natürlich recht... Gebe aber zu bedenken: Das Ding ist für die Praxis noch nicht leistungsfähig genug: Wegen der versuchsweise gewählten 'physischen Speicherverschiebung' ist es (z.B. für den Melkman-Algorithmus) leider viel zu langsam bei größeren Queue-Längen!
Ich hatte ja eigentlich gehofft, daß Microsoft das ohnehin irdenwie schon als API realisiert hat, allerdings fand ich bisher nur was in Dot.Net und Visual C#, und da kenne ich mich nun wirklich 'Nada' aus. Werde es demnächst mal mit Link-Listen versuchen...
Gruss
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
21.08.2014  
 



Habs mal verschoben das Thema...

Mal zum Thema...  [...]  das bringe ich meinem Saugroboter bei damit er im Programm-X nicht komplett verstumpft?
 
21.08.2014  
 




p.specht

Danke. Geht wohl eher um Vorarbeiten zu einer Verschnittoptimierung, oder um Oberfächenspannungsberechnung (Wie verhalten sich geschäumte Materialien) oder um Voraussetzungen für Voronoi- oder Delauney-Algorithmen (Funkzellen-Optimierung) oder um Erzeugung von neuen Nicht-Standard-Elementen für Finite-Elemente-Methoden (FEM).
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
21.08.2014  
 



Ich glaube zwar es zu verstehen aber mein Gefühl sagt mir auch das ich mich da ziemlich irren darf.
 
21.08.2014  
 




p.specht

Du darst !
P.S.: Andrew's Monotone Chain Algorithm kommt mit einem einfachen Stack aus. Sozusagen der halbe Melkman, und deshalb leichter zu verstehen...
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
21.08.2014  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

15.045 Betrachtungen

Unbenanntvor 0 min.
p.specht20.11.2021
Uwe Lang20.11.2021
Manfred Barei19.11.2021
Wilfried Friebe17.11.2021
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

p.specht (7x)
iF (4x)
Paul Glatz (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie