Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » verkettete Liste

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]
010
03.08.2004, 13:44 Uhr
~sebastian
Gast


Deinen letzten Beitrag habe ich noch nicht gesehen als ich meinen geschrieben habe. Ich warte gern und wäre morgen wieder im Forum. Ihc habe dir mal eine Mail geschickt, du kannst es mir ja auch per Mail schicken!
Vielen Dank!
Sebastian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
03.08.2004, 13:50 Uhr
Zero



Als Anfänger bist du bei verketteten listen irgendwie an der falschen stelle, wer gibt dir so ne aufgabe ? wenn du mir sagst was gemacht werden soll guck ich mal was ich für dich tun kann. Du musst die Funktionalität und Verwendung von Pointer verstanden haben
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
03.08.2004, 14:04 Uhr
~sebastian
Gast


Schule ist grausam!
Meine Aufgabe war:

eine einfach verkettete Liste zu implementieren mit folgenden Methoden:
- die größe der Liste bestimmen
- ein Item einzufügen
- am Anfang
- am Ende
- an einer beliebigen Position
- ein item löschen
- am Anfang
- am ende
- an einer beliebigen Position
- die Liste komplett zu löschen
- ein item zu bestimmen
- das erste
- das letzte
- das an Position i

Meinen Quellcode habe ich ja schon mal gepostet. Es funktionierte ja auch alles so weit, AUßER halt das Einfügen!
Danke für die Hilfe!

Sebastian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
03.08.2004, 14:30 Uhr
0xdeadbeef
Gott
(Operator)


Warum machst du das denn alles static? Auf die Art wird die Liste ja quasi ein singleton, und das willst du hier nun wirklich nicht. Sinnvoller wäre es, die Liste in Listenkopf und Listenelement zu unterteilen, also etwa so:

C++:
class my_list {
private:
  struct element {
    int content;
    element *prev, *next;
  };

  element *head, tail;
  size_t length;

public:
  my_list() {
    head = new element;
    tail = new element;

    //Dummies einrichten
    head->prev = tail->prev = head;
    head->next = tail->next = tail;
  }

  ~my_list() {
    for(element *p = head->next; p != tail; p = p->next)
      delete p->prev;
    delete tail;    
  }

  void insert_at_beginning(int x) {
    head->next->prev = new element;
    head->next = head->next->prev;
    head->next->content = x;

    ++length;
  }
  void insert_at_end(int x) {
    tail->prev->next = new element;
    tail->prev = tail->prev->next;
    tail->prev->content = x;

    ++length;
  }
  void insert_at_index(size_t index, int x) {
    element *p = head;
    for(size_t i = 0; i < index; ++i) p = p->next;
    p->next->prev = new element;
    p->next = p->next->prev;
    p->next->content = x;

    ++length;
  }

  void remove_beginning() {
    if(size() == 0) return;
    head->next = head->next->next;
    delete head->next->prev;
    head->next->prev = head;

    --length;
  }

  void remove_end() {
    if(size() == 0) return;
    tail->prev = tail->prev->prev;
    delete tail->prev->next;
    tail->prev->next = tail;

    --length;
  }

///...und so weiter halt.

  void remove_at_index(size_t);

  size_t size() const { return length; }

  int get_item_at_beginning() const;
  int get_item_at_end() const;
  int get_item_at_index(size_t) const;
};


Das ist jetzt völlig ungetesteter Code, aber das Prinzip dürfte klar werden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
03.08.2004, 14:43 Uhr
~Sebastian
Gast


Vielen Dank, aber was soll in Zeile 11: size_t length; bedeuten?, (führt außerdem zu einem Fehler: type name expected)? Kann mit der Aussage des Fehlers leider nicht viel anfangen.
Danke für die Hilfe!
Sebastian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
03.08.2004, 14:49 Uhr
0xdeadbeef
Gott
(Operator)


Dann schreib halt unsigned statt size_t. Ich bin grad zu faul, rauszusuchen, in welchem header size_t getypedeft wird.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
03.08.2004, 15:08 Uhr
~sebastian
Gast


als C++ Anfänger habe ich von so etwas keine Ahnung. Das Prinzip scheint so weit klar zu sein, aber an der Synthax verzweifle ich (zu viele ERROR). Ich probiere weiter!
Danke für die Hilfe.

Sebastian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
03.08.2004, 15:50 Uhr
~sebastian
Gast


Code von Oxdeadbeef funktioniert einwandfrei wenn man in Zeile 8 anstelle von tail *tail schreibt, alle Fehler weg! Mal sehen ob ich jetzt weiter komme!
Vielen Dank!

Sebastian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
03.08.2004, 16:03 Uhr
~Sebastian
Gast


OK ich hage (glaube ich) die Klassendefinition verstanden. Wie rufe ich aber die einzelnen Funktionen in main auf bzw. wie baue ich eine Liste auf?
Sebastian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
03.08.2004, 16:05 Uhr
0xdeadbeef
Gott
(Operator)



C++:
my_list ls;

ls.insert_at_beginning(10);
ls.insert_at_end(20);
ls.insert_at_index(1, 15);

if(ls.size() == 3) {
  std::cout << "Yay!" << std::endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: