Vielen Dank an den Autor für diesen tollen Artikel!
es gibt andere Wer-Was? eine Art unvollständige Vorstellung.
Die Fähigkeiten eines Knotens für eine doppelt verkettete Liste sind also ähnlich wie die eines einfach verketteten Knotens, außer dass man noch einen Zeiger auf den vorherigen Knoten verarbeiten muss.
Ist es notwendig, einen Zeiger auf den vorherigen Knoten zu verarbeiten, um die Fähigkeiten eines einfach verketteten Knotens zu haben? Der Autor hat den Punkt verstanden, den er vermitteln wollte, aber die Formulierung selbst ist nicht sehr gut.....
Abb.3 Knoten für eine ringförmig verknüpfte Liste
1) der oberste Zeiger - der Pfeil ist ein wenig schief
2) Mir ist klar, dass dies vielleicht am Stil der Artikel liegt - aber die Beschreibung der Abbildung ist in sehr kleiner Schrift und ziemlich unscharf (persönliche Meinung bei schlechter Sehkraft).
Wir werden auch einen solchen Knoten benötigen, der den Bedürfnissen einer doppelt verketteten Liste entspricht. Er unterscheidet sich von der vorherigen Form dadurch, dass er einen weiteren Zeiger enthält, der auf den vorherigen Knotenverweist. Und natürlich wirdein solcher Knoten des Kopfelements der Liste gleich NULL sein.
1) Von der vorherigenForm - von was? Wie viel vorher? Warum sollte ich suchen, dass der Autor mit vorhergehendem "Knoten für eine einfach verknüpfte Liste" meint, oder vielleicht irre ich mich.
2) "derKnoten des Kopfelements der Liste wird gleich NULL sein". Knotenpunkt oder Zeiger?Vielleichtwäre esin Anbetracht der früheren Aussage "Sie können Knoten, nicht Elemente, in einer Liste speichern" korrekter zu sagen:
"Einer der Zeiger des Kopfknotens einerdoppelt verketteten Listeist gleich NULL" .
Aber im Endknoten wird der Link zum nächsten Knoten nicht leer sein, weil er mit dem Kopfzeiger gefüllt wird.
1) Es gibt keinen Verweis - es gibt kein Wer-Was ???? Fälle gelten nicht
2) Aber im Endknoten wird es keinen Verweis auf den nächsten leeren (who-what ????) geben. unvollendeter Gedanke
3) Er (der Verweis) wird mit einem Index gefüllt werden. Wird die Verknüpfung durch den Zeiger gefüllt, oder wird der Zeiger noch irgendwo einen Verweis haben ????.
Was die Löschoperationen betrifft, so sind sie fast identisch mit den ähnlichen Operationen aus der Gruppe der Hinzufügungen:
- delete head node;
- den Schwanzknoten löschen;
- Entfernen eines Knotens an der angegebenen Stelle in der Liste;
- Destruktor.
1) sie duplizieren praktisch die ähnlichen (who-what????) aus der add group. Again ein unvollständiger Gedanke
2) ist das Löschen eines Knotens von einer bestimmten Stelle in der Liste nicht ein allgemeiner Fall von "den Kopfknoten löschen" und "den Schwanzknoten löschen" ??? ähnlich wie bei add
3)"In Bezug auf Löschoperationen", und davor war es "Die folgenden können als Methoden des Hinzufügens betrachtet werden:" (dort Methoden, hier Operationen - ich möchte das gleiche Format).
Dies ist also eine persönliche Meinung über den einleitenden Teil von einer unwissenden Person, für die genau diese einleitenden Teile des Artikels erstellt werden.
Es hat mir gefallen. Ich danke Ihnen. Es ist gut, wenn man nach dem Lesen Ideen bekommt, wie man sie bei sich selbst anwenden kann. )
tol64, danke für die Meinung eines maßgeblichen Experten :-)
Ich halte mich nicht für einen Experten und ich halte mich auch nicht für eine Autorität. Und das ist nicht aus Bescheidenheit, das ist wirklich so. ))) Es gibt hier Programmierer, die um ein Vielfaches mehr Erfahrung in Programmierung, Mathematik und Handel haben. Und ich muss noch schwimmen und schwimmen. )))
Ich denke, Autorität ist eine subjektive Sache. Es ist wie die Anerkennung der Souveränität eines Landes durch ein anderes Land....
Zitat:
Autorität besteht in der Anerkennung des Subjekts (Trägers) herausragender Leistungen, Kenntnisse, Fertigkeiten, Fähigkeiten, seiner besonderen Stellung in der Gesellschaft...
Also, Ihre wird von mir anerkannt :-)
tol64, wir warten auf Ihre neuen Artikel.
- ru.wikipedia.org
Hier ist ein solcher Code für ein Beispiel des Zugriffs auf die Elemente des Datensatzes:
Wo haben Sie den binären Zugriff auf CList-Elemente mit log2(N)-Komplexität gefunden!?
CList ist eine Liste, und ein binärer Zugriff mit log2(N)-Komplexität erfordert einen momentanen Sprung zu einem Knoten mit dem Index CurrentIndex +/- (CurrentIndex/2), wobei CurrentIndex der aktuelle Knoten in der Liste ist.
Die CList-Implementierung verwendet die Standardfunktion QuickSearch(), die im Falle einer Sortierung tatsächlich nach einem Element sucht, indem sie sich auf den Knoten CurrentIndex +/- (CurrentIndex/2) bezieht. Dieser Knoten selbst wird jedoch von der Funktion GetNodeAtIndex() durchsucht, und darin stecken keine Wunder. Die gesamte Komplexität der Zugriffsoperation fällt auf ihn zurück, und zwar auf diese Zeichenketten:
if(revers) { //--- Suche von rechts nach links for(;i>index;i--) { result=result.Prev(); if(result==NULL) return(NULL); } } else { //--- Suche von links nach rechts for(;i<index;i++) { result=result.Next(); if(result==NULL) return(NULL); } }
Wenn man sie betrachtet, wird klar, dass die Komplexität der Suche nach einem Element im Grenzfall O(N/2) ist, weil die Liste bidirektional ist, so dass der Zugriff auf ein Element von einem der Enden N/2 Übergänge nicht überschreitet. Der Autor wäre gut beraten, den Algorithmus gründlicher zu verstehen, bevor er einen Artikel über ihn schreibt.
Aus eigener Erfahrung kann ich sagen, dass es fast immer ineffizient ist, die klassische CList für echte Aufgaben zu verwenden, da die Arbeit mit Daten fast immer mit Suchen und Sortieren verbunden ist. List ist vor allem in kombinierten Sammlungen stark, wo der Zugriff per Index mit dem Zugriff per Liste kombiniert wird.
Aus irgendeinem Grund denken nur wenige Leute darüber nach, dass ein Zeigerübergang viel, viel langsamer ist als die direkte Adressierung per Index. Tausendmal durch result.Next() zu gehen ist viel langsamer als tausendmal durch den Index in for zu gehen.
Ein Koma.
Ausgehend von den Bildern. Der Zeiger geht auf den Knoten, nicht auf die Daten, die Daten sind nur ein Teil des Knotens, d.h. es gibt einen Konflikt mit der Implementierung und potentielle Verwirrung.
Der Text ist größtenteils normal, um fair zu sein.
Zur Implementierung. Solche Dinge werden durch Templates implementiert. Die optimale Variante der Darstellung von Containern in der STL, wenn auch hier mit Iteratoren und Funktoren ist ein Fehlschlag, obwohl Ihnen wahrscheinlich etwas einfallen wird.
Infolgedessen sehen Ihre leeren virtuellen Methoden nicht nur unverständlich, sondern einfach vryviglaz aus. Die ) Blattsortierung hat geliefert. Die Implementierung und sogar die Deklaration einiger Methoden ist fragwürdig und sogar verwirrend.
Null Kapselung.
Enthüllungen über Komplexität und binäre(!) Suche bei der Liste(! gg) beendet.
Als Ergebnis haben wir aktuell einfach ALLES unverständlichen und unbequemen Mist, nicht einmal als Beispiel zum Lernen brauchbar (imho).
Nichts für ungut ) wenn Sie Programmierer werden wollen, lernen Sie NORMAL zu programmieren. Dann kann man es viel besser umsetzen.
Wenn man sie betrachtet, wird sofort klar, dass die Komplexität, ein Element zu finden, im Grenzfall O(N/2) ist, weil die Liste bidirektional ist, so dass der Zugriff auf ein Element von einem Ende N/2 Übergänge nicht überschreitet. Der Autor täte gut daran, den Algorithmus gründlicher zu verstehen, bevor er einen Artikel darüber schreibt.
Sie täten auch gut daran, Ihr Gedächtnis aufzufrischen, denn das oben geschriebene "O" ist erstens falsch berechnet und zweitens falsch aufgeschrieben.
_____________________________________
Das Interessanteste daran ist, dass dies bei weitem nicht der schlechteste Artikel über Ressourcen ist.
...
Nichts für ungut) Sie wollen ein Programmierer sein, lernen Sie NORMAL zu programmieren. Dann können Sie es viel besser umsetzen.
Sie täten auch gut daran, Ihr Gedächtnis aufzufrischen, was O, oben geschrieben ist, ist erstens falsch berechnet, zweitens falsch geschrieben.
...

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Grundlagen der Programmierung in MQL5: Listen :
Die neue Version der Programmiersprache für die Entwicklung von Handelsstrategien, MQL [MQL5], liefert im Vergleich zur Vorgängerversion [MQL4] leistungsstärkere und effektivere Features. Der Vorteil besteht im Wesentlichen aus den Merkmalen der objektorientierten Programmierung. In diesem Beitrag wird die Möglichkeit betrachtet, komplexe benutzerdefinierte Datentypen wie Knoten und Listen zu verwenden. Außerdem liefert der Beitrag ein Anwendungsbeispiel für die Verwendung von Listen in der praktischen Programmierung in MQL5.
Der erste Teil ist ein Datenfeld, der zweite wird für Verbindungen mit anderen Knoten genutzt (Abb. 1). Der erste Knoten in der Liste wird als 'Head' (Kopf) bezeichnet, der letzte als 'Tail' (Schwanz). Das Linkfeld des Schwanzes enthält einen NULL-Verweis. Es wird grundsätzlich dafür verwendet, das Fehlen anderer Knoten in der Liste zu signalisieren. Weitere spezielle Quellen beziehen sich auf den Rest der Liste nach dem Kopf als 'Schwanz'.
Abb. 1 Knoten in einer einfach verketteten Liste
Abgesehen von Knoten in einer einfach verketteten Liste gibt es noch andere Arten von Knoten. Ein Knoten in einer doppelt verketteten Liste ist vielleicht die häufigste darunter.
Autor: Dennis Kirichenko