verkette Liste



  • Hi zusammen !

    Ich hätte da son kleines Problem. Ich soll ein Programm schreiben, das mit nen Namen, Matrikelnummer und Semester aus Dialogfeldern einliest und diese 3 Informationen in eine verkettete Liste speichert. Leider hab ich absolut keine Ahnung, wie ich die Informationen in eine verkettete Liste bekomm. Wär nett, wenn ihr mir ein paar Hilfen geben könntet, bzw. ein Tutorial darüber kennt.

    Thx schonmal



  • Such mal unter CList in der MSDN



  • Hm... weil noch keiner geantwortet hat, frage ich jetzt einfach mal... ^^

    Musst Du die verkettete Liste selber schreiben oda kannst Du auch der Standard Bibliothek(List) bedienen?



  • Aus meinen C++ Unterlagen
    Verkettete Listen(einfach linear)

    In vielen Anwendungsfällen wird erst zur Laufzeit klar wieviel Speicherplätze für eine Liste benötigt werden. Der Speicher kann dynamisch angefordert, und über eienn Zeiger an das vorherige Listenelement angehängt werden.

    struct liste
    {
    char Name[30];
    char Vorname[30];
    //Zeiger auf naechstes Listenelement
    liste *pNListe;
    };
    

    Anlegen der Zeiger auf erstes Listenelement ud auf das aktuelle Listenelement

    liste *pStartListe;
    liste *pAktuellesElement;
    [/cpp]

    Speicheranforderung für das erste Listenelement

    pStartListe=new(liste);
    pAktuellesElement=pStartListe;
    //0 - noch keine neue Liste angehaengt
    pAktuellesElement->pNListe=0;
    

    Neues Listenelement anhängen

    pAktuellesElement->pNListe=new(liste);
    pAktuellesElement=pAkuellesElement->pNListe;
    pAktuellesElement->pNListe=0;
    

    Liste durcharbeiten

    pAktuellesElement=pStartListe;
    pAktuellesElement=pAktuellesElement->pNListe;
    

    Beispielprogramm:

    #include <iostream.h>
    struct liste
    {
    char Name[30];
    char Vorname[30];
    //Zeiger auf nächstes Listenelement
    lsite *pNListe;
    }
    
    int main()
    {
    char c;
    int i;
    liste *pStartListe;
    liste *pAktuellesElement;
    
    pStartListe=new(liste);
    pAktuellesElement=pStartListe;
    //o - noch keine neue Liste angehängt
    pAktuellesElement->pNListe=0;
    i=0;
    do
    {
    i++;
    cout<<"Nr.: "<<i<<" Name Vorname ";
    cin>>pAktuellesElement->Name;
    cin>>pAktuellesElement->Vorname;
    pAktuellesElement->pNListe=new(liste);
    pAktuellesElement->pAktuellesElement->pNListe;
    ppAktuellesElement->->pNListe=0;
    cout<<"\tneue Eingabe mit 'n' beenden; mit 'e': ";
    cin>>c;
    }while(c!='e');
    cout<<"Liste Ausgeben######################"<<endl;
    pAktuellesElement=pStartListe;
    i=0;
    while(pAktuellesElement->pNListe!=0)
    {
    i++;
    cout<<"Adr: "<<pAktuellesElement;
    cout<<"Nr: "<<i<<"\t"<<pAktuellesElement->Vorname<<",
               "<<pAktuellesElement->Name<<endl;
    pAktuellesElement=pAktuellesElement->pNListe;
    }
    
    liste *pDeleteElement;
    pAktuellesElement=pStartListe;
    i=0;
    while(pAktuellesElement->pNListe!=0;
    {
    pDeleteElement=pAktuellesElement;
    pAktuellesElement=pAktuellesElement->pNListe;
    delete(pDeleteElement);
    }
    delte(pAktuellesElement);
    return 0;
    }
    
    Ich hoffe ich hab beim Abtippen nicht so viele Fehler rein gehauen. VIelleicht bringt es dich ja weiter.
    


  • benutzen kann ich die schon aber ich hab keinen Plan wie ich die Bib von MS bediene.

    Ein listenelement muss später enthalten:

    Name
    Matrikelnummer
    Semester

    Was muss ich da nehmen aus der Bib ?

    mfg Legolas



  • #include <list>
    #include <string>
    
    using namespace std;
    
    struct Eintrag {
        string Namen;
        string Artikelnummer; 
        string Semester;
    };
    
    int main()
    {
        list<Eintrag> theList;
    
        Eintrag e;
        e.Namen = "Jupp";
        e.Artikelnummer = "0001";
        e.Semester = "2.";
    
        theList.push_front(e) // in Die verkettete Liste einfügen
    
        return 0;
    }
    

    Sollte so gehen, läuft bei mia aba net.. muss wohl noch was installieren...? KA!

    Hier noch ein paar Member der STL-List:
    push_front() //neues erstes element einfügen
    pop-front() // erstes element entfernen
    remove() //um ein bestimmtes element zu löschen
    unique() //entfernt duplikate

    ... u. schau auch mal hier: http://www.sgi.com/tech/stl/List.html

    void.



  • Vielen vielen Dank für eure Hilfen, aber so richtig funzen will das immer noch nicht. 😞

    @void:
    Wenn ich mir deinen Beispielcode nehm. Wie geb ich da die Listelemente aus ?

    copy(theList.begin(), theList.end(), ostream_iterator<int>(cout, " "));
    

    bringt mir diesen Fehler: 😞

    error C2665: 'ostream_iterator<int,char,struct std::char_traits<char> >::ostream_iterator<int,char,struct std::char_traits<char> >' : Durch keine der 2 Ueberladungen kann Parameter 1
    vom Typ 'class ostream_withassign' konvertiert werden

    Bin so langsam echt am verzweifeln...seit heute Nachmittag sitz ich an dieser MistListe und es will und will einfach nix richtig laufen.

    Thx schonmal



  • Hier ein Beispil mit VerketeteListen

    #include <fstream.h>
    #include "Zimmer.h"

    class CHotel
    {
    public:
    void add(CZimmer *erfasse);
    CHotel();
    ~CHotel();

    CZimmer *search(int gesucht);

    bool remove(int letzteReservation);

    void save(char* fliename);
    void show();

    int menue();
    private:
    CZimmer * Anker;
    };

    #include <fstream.h>

    class CZimmer
    {
    friend class CHotel;
    public:

    //Konstruktoren
    CZimmer();
    CZimmer(int _zNr, int _stockWerk, float _preis,
    char *_zBeschreibung,char *_reservation,
    char *_miniBar, char *_badWc, char *_lage,
    char *_balkon, char *_tv, char *_telefon,
    char *_internet, char *_betBestueckung, char *_name,
    char *_vorname);
    virtual ~CZimmer();

    //Methoden
    void setReservation(char* _reservation);

    int getZimmerNr();
    char* getBett();
    char* getInternet();
    char* getTelefon();
    char* getTv();
    char* getBalkon();
    int getStockWerk();
    char* getLage();
    char* getBadWc();
    char* getMiniBar();
    float getPreis();

    void display();

    void save(ofstream of);
    CZimmer * load(ifstream ifin);

    private:
    int zNr, stockWerk, into;
    float preis;
    char *zBeschreibung,
    *reservation,
    *miniBar,
    *badWc,
    *lage,
    *balkon,
    *tv,
    *telefon,
    *internet,
    *betBestueckung;
    char *name, *vorname;
    CZimmer * next;
    };



  • Original erstellt von <Legolas>:
    **
    @void:
    Wenn ich mir deinen Beispielcode nehm. Wie geb ich da die Listelemente aus ?
    **

    #include <list>
    #include <string> // VC++ -> CString nehmen ^^
    #include <iostream>
    
    using namespace std;
    
    struct Eintrag {
        string Name;
        string Matrikelnummer;
        string Semester;
    };
    
    int main()
    {
        list<Eintrag> theList;
    
        Eintrag e;
    
        e.Name = "Jupp";
        e.Matrikelnummer = "0001";
        e.Semester = "2.";
    
        theList.push_back(e);
    
        e.Name = "Tom";
        e.Matrikelnummer = "0013";
        e.Semester = "4.";
    
        theList.push_back(e);
    
        typedef list<Eintrag>::const_iterator LI;
    
        for (LI i=theList.begin(); i!=theList.end(); ++i)
        {
            const Eintrag &e=*i;
            cout << "Name: " << e.Name << endl;
            cout << "Matrikelnummer: " << e.Matrikelnummer << endl;
            cout << "Semester: " << e.Semester << endl;
        }
    
        return 0;
    }
    

    Gruß void

    [ Dieser Beitrag wurde am 22.01.2003 um 00:24 Uhr von void editiert. ]



  • // Header  
    class Datenstruktur  
    {
    public:
            Datenstruktur *m_pNext;
        Datenstruktur(Datenstruktur *pNext);
        virtual ~Datenstruktur();
    
        CString Product;
        CString Preis;
        int Anfang;
    };
    
    // cpp
    
    Datenstruktur::Datenstruktur(Datenstruktur *pNext)
    {
        m_pNext=pNext;
        Product = "";
        Preis = "";
        Anfang = 0;
    }
    
    Datenstruktur::~Datenstruktur()
    {
    
    }
    

    Diese Klasse erstellstun mal.

    Verwendung:

    In deiner Header

    Datenstruktur *m_pdatenzeiger;
    

    Eine Funktion zum Hinzufügen von Daten

    void deine Klasse::adddata()
    {
        Datenstruktur *pdatenzeiger;
        pdatenzeiger=new Datenstruktur(m_pdatenzeiger);
        m_pdatenzeiger=pdatenzeiger;
    }
    

    Zugriff auf Elemente

    Datenstruktur *pdatenzeiger;
    
    for(pdatenzeiger=m_pdatenzeiger;pdatenzeiger!=NULL;pdatenzeiger=pdatenzeiger->m_pNext)
        {
        if (pdatenzeiger->anfang== 2){}
    
            }
    

    // Destructor

    Datenstruktur *temp;
        while(m_pdatenzeiger!=NULL)
        {
            temp=m_pdatenzeiger->m_pNext;
            delete m_pdatenzeiger;
            m_pdatenzeiger=temp;
        }
    

    Soll nur eine Bsp. sein welches aber funktioniert


Anmelden zum Antworten