Liste (abstrakter Datentyp)

In der Informatik, einer Liste oder Folge ist ein abstrakter Datentyp, der eine bestellte Sammlung von Werten durchführt, wo derselbe Wert mehr vorkommen kann als einmal. Ein Beispiel einer Liste ist eine Computerdarstellung des mathematischen Konzepts einer begrenzten Folge. Jedes Beispiel eines Werts in der Liste wird gewöhnlich einen Artikel, Zugang oder Element der Liste genannt; wenn derselbe Wert mehrmals vorkommt, wird jedes Ereignis als ein verschiedener Artikel betrachtet.

Die Namenliste wird auch für mehrere konkrete Datenstrukturen verwendet, die verwendet werden können, um abstrakte Listen, besonders verbundene Listen durchzuführen.

Die so genannten statischen Listenstrukturen erlauben nur Inspektion und Enumeration der Werte. Eine veränderliche oder dynamische Liste kann Sachen erlauben, eingefügt, ersetzt, oder während der Existenz der Liste gelöscht zu werden.

Viele Programmiersprachen stellen Unterstützung für Listendatentypen zur Verfügung, und haben spezielle Syntax und Semantik für Listen und Listenoperationen. Eine Liste kann häufig durch das Schreiben der Sachen in der Folge gebaut werden, die durch Kommas, Strichpunkte oder Räume, innerhalb eines Paares von Begrenzungszeichen wie Parenthesen' ', Klammern getrennt ist, '[]' klammert '{} ', oder Winkelklammern'

In der Typ-Theorie und funktionellen Programmierung werden abstrakte Listen gewöhnlich induktiv durch vier Operationen definiert: Null, die die leere Liste nachgibt, lernt, der einen Artikel am Anfang einer Liste, Kopfs hinzufügt, der das erste Element einer Liste und den Schwanz zurückgibt, der eine Liste minus sein erstes Element zurückgibt. Formell können die natürlichen Zahlen von Peano als abstrakte Listen mit Elementen des Einheitstyps definiert werden.

Operationen

Die Durchführung der Listendatenstruktur kann einige der folgenden Operationen zur Verfügung stellen:

  • ein Konstrukteur, für eine leere Liste zu schaffen;
  • eine Operation wegen zu prüfen, ob eine Liste leer ist;
  • eine Operation wegen prepending eine Entität zu einer Liste
  • eine Operation, wegen eine Entität an einer Liste anzuhängen
  • eine Operation, wegen den ersten Bestandteil (oder der "Kopf") von einer Liste zu bestimmen
  • eine Operation, wegen sich auf die Liste zu beziehen, die aus allen Bestandteilen einer Liste abgesehen von seinem ersten besteht (wird das den "Schwanz" der Liste genannt.)

Eigenschaften

Listen haben die folgenden Eigenschaften:

  • Die Größe von Listen. Es zeigt an, wie viele Elemente dort in der Liste sind.
  • Gleichheit von Listen:
  • In der Mathematik manchmal wird die Gleichheit von Listen einfach in Bezug auf die Gegenstand-Identität definiert: Zwei Listen sind gleich, wenn, und nur wenn sie derselbe Gegenstand sind.
  • Auf modernen Programmiersprachen wird die Gleichheit von Listen normalerweise in Bezug auf die Strukturgleichheit der entsprechenden Einträge, außer dass definiert, wenn die Listen getippt werden, dann können die Listentypen auch wichtig sein.
  • Listen können getippt werden. Das deutet an, dass die Einträge in einer Liste Typen haben müssen, die mit dem Typ der Liste vereinbar sind. Es ist üblich, dass Listen getippt werden, wenn sie mit der Reihe durchgeführt werden.
  • Jedes Element in der Liste hat einen Index. Das erste Element hat allgemein Index 0 oder 1 (oder eine andere vorherbestimmte ganze Zahl). Nachfolgende Elemente haben Indizes, die 1 höher sind als das vorherige Element. Das letzte Element hat Index
  • Es ist möglich, das Element an einem besonderen Index wiederzubekommen.
  • Es ist möglich, die Liste in der Ordnung des zunehmenden Index zu überqueren.
  • Es ist möglich, das Element an einem besonderen Index zu einem verschiedenen Wert zu ändern, ohne irgendwelche anderen Elemente zu betreffen.
  • Es ist möglich, ein Element an einem besonderen Index einzufügen. Die Indizes von höheren Elementen, an denen um 1 vergrößert werden.
  • Es ist möglich, ein Element an einem besonderen Index zu entfernen. Die Indizes von höheren Elementen, an denen um 1 vermindert werden.

Durchführungen

Listen werden normalerweise irgendein als verbundene Listen (entweder einzeln durchgeführt oder doppelt verbunden), oder als Reihe, gewöhnlich variable Länge oder dynamische Reihe.

Die Standardweise, Listen durchzuführen, mit dem Programmiersprache-Lispeln entstehend, soll jedes Element der Liste haben enthalten sowohl seinen Wert als auch einen Zeigestock, der die Position des folgenden Elements in der Liste anzeigt. Das läuft entweder auf eine verbundene Liste oder auf einen Baum je nachdem hinaus, ob die Liste Sublisten verschachtelt hat. Einige ältere Lispeln-Durchführungen (wie die Lispeln-Durchführung der Symbolik 3600) haben auch "komprimierte Listen" unterstützt (CDR verwendend, der codiert), der eine spezielle innere Darstellung (unsichtbar für den Benutzer) hatte. Listen können mit der Wiederholung oder recursion manipuliert werden. Der erstere wird häufig auf befehlenden Programmiersprachen bevorzugt, während der Letztere die Norm auf funktionellen Sprachen ist.

Listen können als das Selbstausgleichen binärer Suchbäume durchgeführt werden, die Paare des Index-Werts halten, gleich-maligen Zugang zu jedem Element zur Verfügung stellend (z.B das ganze Wohnen in der Franse, und innere Knoten, die den Index des niedrigstwertigen Kindes versorgen, haben gepflegt, die Suche zu führen), logarithmisch in der Größe der Liste Zeit in Anspruch nehmend, aber so lange es sich nicht ändert, wird viel das Trugbild des zufälligen Zugangs zur Verfügung stellen und Tausch, Präfix ermöglichen und Operationen in der logarithmischen Zeit ebenso anhängen.

Programmiersprache-Unterstützung

Einige Sprachen bieten keine Listendatenstruktur an, aber bieten den Gebrauch der assoziativen Reihe oder einer Art Tisches an, um mit Listen wettzueifern. Zum Beispiel stellt Lua Tische zur Verfügung. Obwohl Lua Listen versorgt, die numerische Indizes als Reihe innerlich haben, erscheinen sie noch als Hash-Tabellen.

Im Lispeln sind Listen der grundsätzliche Datentyp und können sowohl Programm-Code als auch Daten vertreten. In den meisten Dialekten konnte die Liste der ersten drei Primzahlen als geschrieben werden. In mehreren Dialekten des Lispelns, einschließlich des Schemas, ist eine Liste eine Sammlung von Paaren, aus einem Wert und einem Zeigestock dem folgenden Paar (oder ungültigem Wert) bestehend, eine einzeln verbundene Liste machend.

Anwendungen

Da der Name einbezieht, können Listen verwendet werden, um eine Liste von Aufzeichnungen zu versorgen. Die Sachen in einer Liste können zum Zweck der schnellen Suche (binäre Suche) sortiert werden.

Weil in der Computerwissenschaft Listen leichter sind zu begreifen als Sätze, kann ein begrenzter Satz im mathematischen Sinn als eine Liste mit zusätzlichen Beschränkungen begriffen werden, d. h. Doppelelemente werden zurückgewiesen und solch, dass Ordnung irrelevant ist. Wenn die Liste sortiert wird, beschleunigt sie Bestimmung, wenn ein gegebener Artikel bereits im Satz ist, aber um die Ordnung zu sichern, verlangt sie, dass mehr Zeit neuen Zugang zur Liste hinzufügt. In effizienten Durchführungen, jedoch, werden Sätze mit dem Selbstausgleichen binärer Suchbäume oder Hash-Tabellen, aber nicht einer Liste durchgeführt.

Abstrakte Definition

Der abstrakte Listentyp L mit Elementen von einem Typ E (eine Monomorphic-Liste) wird durch die folgenden Funktionen definiert:

:nil:  L

:cons: E × L  L

:first: L  E

:rest: L  L

mit den Axiomen

:first (lernt (e, l)), = e

:rest (lernt (e, l)), = l

für jedes Element e und jede Liste l. Es ist das implizit

:cons (e, l)  l

:cons (e, l)  e

:cons (e, l) = lernt (e, l) wenn e = e und l = l

Bemerken Sie, dass zuerst (Null ) und Rest (Null ) nicht definiert werden.

Diese Axiome sind zu denjenigen des abstrakten Stapel-Datentyps gleichwertig.

In der Typ-Theorie wird die obengenannte Definition einfacher als ein induktiver in Bezug auf Konstrukteure definierter Typ betrachtet: Null und lernt. In algebraischen Begriffen kann das als die Transformation 1 + E &times vertreten werden; L  L. zuerst und Rest werden dann durch das Muster erhalten, das auf zusammenpasst, lernt Konstrukteur und getrennt das Berühren des Null-Falls.

Die Liste monad

Der Listentyp bildet einen monad mit den folgenden Funktionen (E aber nicht L verwendend, um Monomorphic-Listen mit Elementen des Typs E zu vertreten):

::

wo anhängen, wird als definiert:

:

Wechselweise kann der monad in Bezug auf die Operationsrückkehr, fmap definiert werden und sich anschließen, mit:

::

Bemerken Sie, dass fmap, sich anschließen Sie, anhängen Sie und binden Sie, sind bestimmt, da sie auf progressiv tiefere Argumente bei jedem rekursiven Anruf angewandt werden.

Der Listentyp ist ein Zusatz monad mit der Null als die monadische Null, und hängen Sie als monadische Summe an.

Listen bilden einen monoid unter der anhängen Operation. Das Identitätselement des monoid ist die leere Liste, Null. Tatsächlich ist das der freie monoid über den Satz von Listenelementen.

Siehe auch


Regenbogen-Inseln: Die Geschichte der Luftblase-Bommel 2 / Henry Frederick, Prinz Wales
Impressum & Datenschutz