www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Algorithmen und Datenstrukturen" - Doppelt verkettete Liste
Doppelt verkettete Liste < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Algorithmen und Datenstrukturen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Doppelt verkettete Liste: Frage
Status: (Frage) beantwortet Status 
Datum: 18:59 Mo 13.06.2005
Autor: Back-Up

Hallo,

ich habe bereits eine einfach verkette Liste programmiert. Über ein Applet kann ich einen Wert an einer bestimmten Position der Liste eingeben, einen Wert suchen, einen Wert löschen, einen Wert ersetzen und mir den Wert an einer bestimmten Position angeben lassen.
Was kann ich mit einer doppelt verketten Liste machen? Ich kann ja zusätzlich "rückwärtsgehen"... welche Vorteile habe ich dadurch?

Könnt ihr mir konkrete Beispiele nennen, die ich vielleicht mal versuchen kann umzusetzen?

PS: Ich programmiere mit Java. Meine Kenntnisse sind beschränkt ;-). Das was man halt so kann, wenn man mehr oder weniger 1 Jahr an der Schule Informatik gemacht hat und nicht so aufpasst ;-).


Viele Grüße

        
Bezug
Doppelt verkettete Liste: Antwort
Status: (Antwort) fertig Status 
Datum: 20:01 Mo 13.06.2005
Autor: Karl_Pech

Hallo Back-Up,


>  Was kann ich mit einer doppelt verketten Liste machen? Ich
> kann ja zusätzlich "rückwärtsgehen"... welche Vorteile habe
> ich dadurch?


Auf einer einfach verketteten Liste ist, soweit ich weiß, nur lineare Suche möglich. Stell' dir mal vor, Du speicherst n Zahlen in absteigender Reihenfolge in einer einfach verketteten Liste ab. Jetzt möchtest Du die kleinste Zahl aus diesen Zahlen bestimmen. Weil alle Knoten einer solchen Liste nur einen Zeiger zum Nachfolger besitzen, mußt Du in diesem schlimmsten Fall zwangsläufig alle n Knoten durchlaufen um gerade beim n-ten Mal deine Zahl zu finden. Das bezeichnet man auch als lineare Laufzeit. Hättest Du die Zahlen in einem Array abgespeichert, könntest Du hingegen binäre Suche anwenden, indem Du das mittlere Element der Folge bestimmst und mit dem Element vergleichst den Du im Array suchst. Je nachdem, ob das Element größer-gleich oder kleiner ist als das Gesuchte, gehst Du entweder nach rechts oder nach links und betrachtest ab diesem Zeitpunkt nur noch diese Elemente der Folge. Dein Problem hat sich folglich halbiert. Da dies in jedem Suchschritt so ist, erhälst Du eine logarithmische Laufzeit.
Auf einer einfach verketteten Liste kannst Du so etwas aber nicht implementieren, da Du nur in eine Richtung gehen kannst. Bei einer doppelt verketteten Liste kannst Du das. Allerdings benötigst Du für solche Listen auch mehr Speicherplatz (welcher von den "zweiten" Zeigern beansprucht wird.)

Wenn Du willst, kannst Du ja jetzt mal die binäre Suche auf einer doppelt verketteten Liste implementieren.


Meine Antwort basierte leider auf einem Irrtum, der mir gerade beim nochmaligen Durchlesen meiner Antworten bewußt geworden ist. Die binäre Suche auf einer solchen Liste zu implementieren, ist natürlich unmöglich! Eine doppelt verkettete Liste ähnelt schon sehr einem Array, aber man kann mit ihr nicht in konstanter Zeit auf ein beliebiges Element zugreifen. Auch bei einer doppelt verketteten Liste mußt Du einige Elemente der Liste (entweder rückwärts oder vorwärts) durchlaufen, um zu einem beliebigen "weiter entfernten" Element zu gelangen, denn Du hast keinen direkten Zeiger zu diesem beliebigen Element, sondern nur Zeiger für die Nachbar-Elemente des Knotens, auf den Du gerade zugreifst. binarySearch() benötigt jedoch konstanten Zugriff auf beliebige Elemente eines zu sortierenden Feldes, um in logarithmischer Zeit zu suchen.


(Meine andere Antwort beschreibt quasi den binarySearch(). Aus dem Kontext deiner Frage gegriffen ist die Beschreibung wohl korrekt.)




Viele Grüße
Karl



Bezug
                
Bezug
Doppelt verkettete Liste: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:13 Mo 13.06.2005
Autor: Back-Up

Müssen die Werte in meiner Liste dafür sortiert sein?

Kannst du mir nochmal anschaulich erklären, wie diese Suche funktionieren müsste? Ich wäre Dir sehr dankbar :).

Wenn ich in der Mitte anfange und feststelle, das ich z.B. nach links laufen muss, was passiert dann, wenn der gesuchte Wert auf der rechten Seite liegt?
Wie du siehst, fehlt es mir grad am Vorstellungsvermögen ;-).


Gruß

Bezug
                        
Bezug
Doppelt verkettete Liste: Antwort
Status: (Antwort) fertig Status 
Datum: 22:00 Mo 13.06.2005
Autor: Karl_Pech


> Müssen die Werte in meiner Liste dafür sortiert sein?
>  
> Kannst du mir nochmal anschaulich erklären, wie diese Suche
> funktionieren müsste? Ich wäre Dir sehr dankbar :).
>  
> Wenn ich in der Mitte anfange und feststelle, das ich z.B.
> nach links laufen muss, was passiert dann, wenn der
> gesuchte Wert auf der rechten Seite liegt?
>  Wie du siehst, fehlt es mir grad am Vorstellungsvermögen
> ;-).


Der folgende Text ist nur richtig, wenn es sich um ein Array und nicht um eine Liste handelt!


Ich bin mir ziemlich sicher, daß Du hier Recht hast, und die Liste (das Array) sortiert sein muß damit es funktioniert. Man kann ja die Einfüge-Operation bei der Liste (dem Array) entsprechend komplizierter machen, damit die Liste (das Array) ständig sortiert bleibt. (Die Einfüge-Operation kann ja auch auf binärer Suche aufgebaut werden. Aber nur, wenn es sich um ein Array handelt!)


Ok, im folgenden ersetze ich 'Liste' durch 'Array':


Vorrausgesetzt das Array ist sortiert, greifst Du also auf die Mitte des Arrays zu, weil sich dort dann wegen der Sortierung das mittlere Element befindet und vergleichst dieses Element mit dem, den Du in dem Array finden willst. Ist das mittlere Element größer, befindet sich dein Element im linken Teil des Arrays, ansonsten im rechten Teil des Arrays. Solange Du das Element nicht gefunden hast, halbierst Du nun das neue "Teilarray", indem Du dort wieder das mittlere Element bestimmst und die Obige vorgehensweise wiederholst.



Viele Grüße
Karl



Bezug
                                
Bezug
Doppelt verkettete Liste: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:17 Di 14.06.2005
Autor: Back-Up

Das habe ich verstanden :).

Bezug
        
Bezug
Doppelt verkettete Liste: noch ne Antwort
Status: (Antwort) fertig Status 
Datum: 20:40 Mo 13.06.2005
Autor: iftpr

Hi.

Eine doppelt verkettete Liste hat mehrere Vorteile.

Stell dir einmal vor, du hast einen Zeiger auf ein beliebiges Element in der Mitte der Liste und du willst es löschen. Bei einer einfach verketteten Liste musst du nun die Liste ab Start so lange durchlaufen bis du das Element und dessen Vorgänger gefunden hast. Erst dann kannst du es löschen. Das ist in vielen Fällen einfach viel zu langsam! Wenn man die Elemente in einer doppelt verketteten Liste speichert (also zu einem Element den Vorgänger und Nachfolger), so kann man es ganz leicht löschen - in konstanter Zeit.

Das gleiche passiert, wenn du einen Zeiger auf ein beliebiges Element hast und möchtest direkt davor ein neues Element einfügen - das geht wieder in konstanter Zeit.

Grüße
Till

Bezug
                
Bezug
Doppelt verkettete Liste: Frage
Status: (Frage) beantwortet Status 
Datum: 20:46 Mo 13.06.2005
Autor: Back-Up

Hallo,

wie kann man denn in einer doppelt verketteten Liste "ganz leicht löschen"? Wie findet man so schnell das zu löschende Element?


Gruß

Bezug
                        
Bezug
Doppelt verkettete Liste: Antwort
Status: (Antwort) fertig Status 
Datum: 21:53 Mo 13.06.2005
Autor: Karl_Pech

Hallo Back-Up,

> wie kann man denn in einer doppelt verketteten Liste "ganz
> leicht löschen"? Wie findet man so schnell das zu löschende
> Element?

Hmm, ich denke Till hat hier vorrausgesetzt, daß Du bereits einen Zeiger auf das zu löschende Element hast(, denn sonst müßtest Du es ja trotzdem finden (und das geht nicht in konstanter Zeit.) Aber Till schreibt dann ja auch, daß das Einfügen auch in konstanter Zeit möglich ist, vorrausgesetzt man hat die Einfügestelle bereits gefunden.

Grüße
Karl




Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Algorithmen und Datenstrukturen"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de