Ergebnis 1 bis 8 von 8

Thema: verkettete Listen

  1. #1
    HTML Newbie
    Registriert seit
    06.01.2008
    Beiträge
    3
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard verkettete Listen

    Hi, ich habe eine Aufgabe bei der ich nicht so richtig weiter komme :

    In dieser Aufgabe gehen wir von einer aufsteigend sortierten verketteten Liste aus. Diese Liste kann
    Duplikate enthalten, d.h. mehrere Listenelemente können diesselbe Nutzinfo haben. Für die Liste können
    Sie folgende Struktur verwenden:

    Code:
     struct SortierteListe {
    int data ;
    SortierteListe * next ;
    };
    (a) Schreiben Sie eine Funktion SortierteListe* neueSortierteListe(int info), die eine aus einem Element bestehende Liste erzeugt. Dabei soll die Variable data des neuen Listenelements mit dem übergebenen Wert initialisiert werden. Die Funktion soll einen Zeiger auf das einzige Listenelement zurückliefern.
    (b) Schreiben Sie eine Funktion SortierteListe* einfuegen(SortierteListe* l,int info), die
    ein neues Element mit Nutzinfo info anlegt und an einer korrekten Stelle in die (sortierte) Liste l einfügt. Ein Zeiger auf die veränderte Liste soll zurückgegeben werden.

    (c) Schreiben Sie eine Funktion void gibAus(SortierteListe* l), die alle in der Liste l eingetragenenWerte jeweils getrennt durch ein Leerzeichen auf dem Bildschirm ausgibt. Falls die Liste leer ist, soll der Text keine Werte ausgegeben werden.

    (d) Schreiben Sie eine Funktion SortierteListe* loeschen(SortierteListe* l,int info), die alle
    in der sortierten Liste vorhandenen Elemente mit Nutzinfo info löscht. Ein Zeiger auf die veränderte Liste soll zurückgegeben werden.

    (e) Schreiben Sie eine Funktion SortierteListe* verbinde(SortierteListe* l1, SortierteListe*
    l2), die zwei sortierte Listen verbindet. Die sich ergebende Liste soll wieder sortiert sein und alle Elemente aus Liste l1 und aus Liste l2 enthalten.

    (f) Schreiben Sie eine Funktion SortierteListe* kopiere(SortierteListe* l), die eine übergebene
    Liste l elementweise kopiert und einen Zeiger auf die kopierte Liste zurückgibt.

    (g) Schreiben Sie eine Funktion SortierteListe* dreheUm(SortierteListe* l), die eine übergebeneListe l elementweise kopiert und dabei die Reihenfolge der Elemente umdreht.


    Also zu (a) hab ich das hier:
    Code:
    #include <iostream>
    
    using namespace std;
    
    
    struct SortierteListe &#123;
          
           int data;
           SortierteListe *next;
                        
    
    &#125;;
    
    SortierteListe *startZeiger = NULL;
    
    
    SortierteListe *neueSortierteListe&#40;int info&#41;&#123;
    
              
                SortierteListe *neuesElement = new SortierteListe;
                neuesElement->data = info; // Besetze die Daten
                neuesElement->next=NULL;
                
        
        return neuesElement;
        
    &#125;
    
    
    
    int main&#40;&#41;&#123;
        
        int info;
        
        cout << "gib was ein ";
        cin >> info;
                
                          
       neueSortierteListe&#40;info&#41;;  
        
        system&#40;"Pause"&#41;;
        return 0;
    &#125;
    Kann mir jemand sagen ob das richtig für a ist? bzw mir ansätze für die weiteren aufgaben geben? würde mich freuen!! verstehe listen noch nicht wirklich ganz, nur grob
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Fortgeschrittene/r
    Registriert seit
    26.09.2005
    Ort
    Nürnberg
    Beiträge
    169
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Ja, das funktioniert. Also a) ist damit gelöst.
    Aber anstatt jetzt zu jeder Teilaufgabe einen Tipp zu geben, frag doch konkrete Sachen. Also wo hast du genau Probleme?

    PS: wozu der globale "startZeiger" Pointer wenn du ihn nicht nutzt?

  3. #3
    HTML Newbie
    Themenstarter

    Registriert seit
    06.01.2008
    Beiträge
    3
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Zitat Zitat von Wasserleiche
    Ja, das funktioniert. Also a) ist damit gelöst.
    Aber anstatt jetzt zu jeder Teilaufgabe einen Tipp zu geben, frag doch konkrete Sachen. Also wo hast du genau Probleme?

    PS: wozu der globale "startZeiger" Pointer wenn du ihn nicht nutzt?
    hi, ja also der kommt weg, hatte den vergessen rauszunehmen, hatte mal nen anderen ansatz zu der teilaufgabe a.

    also zu b und c hab ich folgendes dann kommt auch eine konkrete frage
    Code:
    #include <iostream>
    
    using namespace std;
    
    
    struct SortierteListe &#123;
           
           int data;
           SortierteListe *next;
                        
    
    &#125;;
    
    
    
    
    SortierteListe *neueSortierteListe&#40;int info&#41;&#123;
    
               
                SortierteListe *neuesElement = new SortierteListe;
                neuesElement->data = info; // Initialisierung von data mit Info
                neuesElement->next=NULL;  // neuesElement zeigt auf NULL
                
        
        return neuesElement;
         
    &#125;
    
    bool istLeer&#40;SortierteListe* l&#41; &#123;
    return &#40;l==NULL&#41;;
    &#125;
    
    
    SortierteListe *einfuegen&#40;SortierteListe *l, int info&#41; &#123;
     
                    SortierteListe* vorhergehendesElement;
                    SortierteListe* kopie = l; // Anfangsposition der Liste speichern
                    SortierteListe *neuesElement = new SortierteListe; // Neues Element
                    neuesElement->data = info; 
    
     // Spezialfall&#58; Leere liste
                    if &#40;l == NULL&#41; &#123;
                    neuesElement->next = NULL;
                    return neuesElement; // Neues Element ist das erste und einzige Element
                    &#125;
     
     // Spezialfall&#58; Neues Element vor dem ersten Element der Liste einfuegen
                    if &#40;l->data >= info&#41; &#123;
                    neuesElement->next = l; // Das neue zweite Element ist das bisher erste Element der Liste
                    return neuesElement;
                    &#125;
     
     // Suchen, an welcher Stelle das neue Element eingefuegt werden muss
      while &#40;l != NULL && l->data < info&#41; &#123;
      vorhergehendesElement = l;
      l = l->next; // Ein Element weiterwandern
     &#125;
     
     // neues Element zwischen vorhergehendesElement und l einfuegen
     neuesElement->next = l;
     vorhergehendesElement->next = neuesElement;
     
     return kopie;
    
    
    
    
    
    
    &#125;
    
    
    
    void gibAus&#40;SortierteListe* l&#41; &#123;
    
         SortierteListe *kopie = l;
         
         if&#40;kopie=NULL&#41;
         cout << "keine Werte";
         
         else &#123;
         
              while &#40;kopie != NULL&#41; &#123;
         
              cout << kopie->data << ' ';
              kopie = kopie->next;
              &#125;
    
         &#125; 
         
         
    &#125;
    
    
    
    
    
    
    int main&#40;&#41;&#123;
        
        int info;
        
        cout << "Bitte daten eingeben&#58; ";
        cin >> info;
                 
                         
        neueSortierteListe&#40;info&#41;;  
        
        system&#40;"Pause"&#41;;
        return 0;
    &#125;
    Also hab jetzt die teilaufgabe b und c noch ergänzt nur weiss nicht wie ich die miteinander kombinieren soll also die letzte funktion soll ja die in der liste l eingetragenen elemente ausgeben, nur irgendwie funktioniert das nicht und ich muss ja in der main die funktionen aufrufen, nur ich weiss nicht woher ich die parameter hole mhh

  4. #4
    Fortgeschrittene/r
    Registriert seit
    26.09.2005
    Ort
    Nürnberg
    Beiträge
    169
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Also, Teilaufgabe b) sollte problemlos funktionieren. Bei der Aufgabe c) hast du allerdings einen Fehler, und zwar in der Zeile

    Code:
    if&#40;kopie=NULL&#41;
       cout << "keine Werte";
    else
       &#123; ... &#125;
    musst du natürlich zwei "==" nutzen, nicht eines. Jetzt hast du in der If-Anweisung eine Zuweisung. Da sollte außerdem ein guter Compiler eine Warnung rausgeben!

    Ein Beispiel wie du die Funktionen nutzen könntest wäre folgendes:

    Code:
    int main&#40;&#41;
    &#123;
       SortierteListe* myList;
    
       myList = neueSortierteListe&#40;3&#41;;
       myList = einfuegen&#40;4&#41;;
       myList = einfuegen&#40;2&#41;;
    
       gibAus&#40;myList&#41;;
    
       return 0;
    &#125;
    Ich bin mir jetzt aber nicht vollkommen sicher ob das deine Frage war...

  5. #5
    HTML Newbie
    Themenstarter

    Registriert seit
    06.01.2008
    Beiträge
    3
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Zitat Zitat von Wasserleiche
    Also, Teilaufgabe b) sollte problemlos funktionieren. Bei der Aufgabe c) hast du allerdings einen Fehler, und zwar in der Zeile

    Code:
    if&#40;kopie=NULL&#41;
       cout << "keine Werte";
    else
       &#123; ... &#125;
    musst du natürlich zwei "==" nutzen, nicht eines. Jetzt hast du in der If-Anweisung eine Zuweisung. Da sollte außerdem ein guter Compiler eine Warnung rausgeben!

    Ein Beispiel wie du die Funktionen nutzen könntest wäre folgendes:

    Code:
    int main&#40;&#41;
    &#123;
       SortierteListe* myList;
    
       myList = neueSortierteListe&#40;3&#41;;
       myList = einfuegen&#40;4&#41;;
       myList = einfuegen&#40;2&#41;;
    
       gibAus&#40;myList&#41;;
    
       return 0;
    &#125;
    Ich bin mir jetzt aber nicht vollkommen sicher ob das deine Frage war...
    Hi danke erst mal, ja also den fehler hab ich korrigiert, komischer weise hat mein compiler nicht gemerkert... also die Funktion
    Code:
    SortierteListe *einfuegen&#40;SortierteListe *l, int info&#41;
    erwartet ja zwei Parameter nur ich weiss nicht recht wie ich der Funktion diese überegeben kann. Also ich muss die funktion ja in der main funktion aufrufen.. mein problem ist das ich nicht weiss wie die parameterübergabe in der main funktion machen soll[/quote]

  6. #6
    cplusplusnixchecker
    Gast

    Standard

    hi canfänger würd mich ma interressieren wie du die aufgabe jetzt gelöst hab.
    muss nämlich genau die selber aufgabe lösen
    und hab kein plan

    wär echt nett wenn du zeigen würdest wie du die zuende gelöst hast

  7. #7
    Kaiserliche Hoheit Avatar von No0ob
    Registriert seit
    02.01.2006
    Ort
    Nähe Frankfurt
    Beiträge
    1.500
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Ich hab die Liste in Delphi gelöst, kann ich also leider nicht helfen, auch wenn ich wollte

  8. #8
    Fortgeschrittene/r
    Registriert seit
    26.09.2005
    Ort
    Nürnberg
    Beiträge
    169
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    @canfänger:

    Ich hab doch geschrieben wie es in der main Funktion aufruft, auch wenn ich einen kleinen Fehler gemacht habe :

    Code:
    int main&#40;&#41;
    &#123;
       SortierteListe* myList;
    
       myList = neueSortierteListe&#40;3&#41;;
       myList = einfuegen&#40;myList, 4&#41;;
       myList = einfuegen&#40;myList, 2&#41;;
    
       gibAus&#40;myList&#41;;
    
       return 0;
    &#125;
    So funktioniert der Aufruf. Getestet habe ich das jetzt zwar nicht, aber ich wüsste nicht was schiefgehen sollte...

Ähnliche Themen

  1. Verkettete Listen und Ordnerinhalt
    Von acdc1 im Forum Forum für alle anderen Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 11.07.2008, 07:35
  2. verkettete Liste(STL) an Funktion übergeben
    Von Joshua im Forum Forum für alle anderen Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 28.07.2007, 17:16
  3. Probleme mit Listen
    Von bluebird82 im Forum HTML & CSS Forum
    Antworten: 3
    Letzter Beitrag: 12.12.2006, 18:45
  4. listen formatieren
    Von gast im Forum HTML & CSS Forum
    Antworten: 1
    Letzter Beitrag: 13.10.2006, 13:09
  5. abstand bei listen...
    Von driver im Forum HTML & CSS Forum
    Antworten: 7
    Letzter Beitrag: 06.10.2006, 09:03

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •