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
SemesterWas 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 werdenBin 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