Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Verkette Liste FIFO / LIFO Queue

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 <
000
08.07.2008, 22:32 Uhr
~Joshiura
Gast


hi,

hab mir eine verkette Liste gebastelt in der Form einer abstrakten Klassen von der ich vererbe und dann eine LIFO bzw. FIFO Queue daraus mache.

Die LIFO und FIFO Queue implementieren im Grunde nur die put Methode neu um die Elemente in die Queue einzufügen (derzeit sind es int's, da ich das mit dem templates noch nicht so ganz kapiert hab).

Ich wollte mal Fragen ob jemand bereit wäre meine "Implementierung" dessen zu begutachten hinsichtlich Programmierstil usw.

mache das ganze nur nebenher würde aber irgendwann auch eine berufliche Tätigkeit mit Programmierung anstreben.

Hier der Link zu Rapidsharedownload meines Projektes (ist ein VC2005 Projekt)
http://rapidshare.de/files/39950533/List.rar.html
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.07.2008, 10:52 Uhr
ao

(Operator)


Hallo Joshiura,

ich schlage vor, dass du das RAR da wegnimmst und ein ZIP hinstellst.

Nicht, weil es das bessere Packformat ist, sondern weil es in der Windows-Welt (für die du ja programmierst - VC2005) der Standard ist.

Gruß,
ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.07.2008, 12:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja winzip o.ä kommt bei mir nich auf den rechner, gibts nur winrar find das rar schon okay.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.07.2008, 14:03 Uhr
ao

(Operator)


Windows hat zip-Unterstützung eingebaut, "Compressed Folders" heißt das. Um einfach nur ein Verzeichnis ein- und wieder auszupacken, braucht man kein Winzip mehr.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.07.2008, 00:41 Uhr
kronos
Quotenfisch
(Operator)


Ich reihe mich ein in die Liste der Leute, die nichts zum eigentlichen Thema beitragen und schlage 7zip vor.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.07.2008, 01:14 Uhr
0xdeadbeef
Gott
(Operator)


Okay, mal ernsthaft zum Code - kein schlechter Anfang, aber ich hab doch ein paar grundsätzliche Bemerkungen dazu. Den Kleinkram zuerst:


C++:
#pragma once


ist im Standard nicht enthalten. Der übliche Weg hier ist, Include-Guards zu benutzen:

C++:
#ifndef INCLUDED_HEADERNAME_HIER
#define INCLUDED_HEADERNAME_HIER

// Eigentlicher Code hier

#endif


Damit kannst du dir sicher sein, dass der Code auch mit anderen Compilern kompiliert. Naja, oder zumindest, dass es nicht an einem unbekannten Pragma scheitert.

Jetzt zur echten Substanz:

Erstens fällt mir auf, dass du zwar AbstractDoubleLinkedList::add(int) pure virtual deklarierst (=0), aber trotzdem implementierst. Das ist mindestens schlechter Stil, und mit einiger Wahrscheinlichkeit illegal.

Zweitens ist eine Liste ohne echte Zugriffsfunktion keine wirkliche Liste. Dazu kommt, dass deine einzige Zugriffsfunktion auf das head-Element das head-Element auch noch entfernt - damit sind wir vom Konzept einer Liste schon seeehr weit entfernt.

Überhaupt stellt sich mir die Frage, warum die Liste abstrakt sein soll. Bau doch einfach eine doppelt verkettete Liste, und lass deinen Stack bzw. deine Queue die einfach benutzen. Einfache Prototypisierung:

C++:
class List {
public:
  List();

  void insert(std::size_t pos, int wert);
  void remove(std::size_t pos);

  int get(std::size_t pos) const;

  std::size_t size() const;
};

class Stack { // FIFO
public:
  Stack();

  void push(int wert);
  int pop();

private:
  List ls;
};

class Queue {  // LIFO
public:
  Queue();

  void enqueue(int wert);
  int dequeue();

private:
  List ls;
};



Ansonsten würde ich die Node-Klasse wahrscheinlich von ihren Methoden befreien und ein einfaches Struct a la

C++:
struct Node {
  Node *prev, *next;
  int wert;
};


benutzen, und die Verkettungslogik in die Liste verlegen - aber das ist ein bisschen Geschmackssache. Meiner Erfahrung nach ist es hier übersichtlicher, die ganze Logik in der Liste zu erledigen, weil die Nebeneffekte der Node-Methoden nicht immer sofort ersichtlich sind. Zum Beispiel wird beim Löschen eines Elements etwas in der Art auftreten:

C++:
Node *n;

n = zu_loeschende_node;
n->getPrevious()->setNextNode(n->getNextNode());
delete n;


...und aus der langen Zeile da zu sehen, dass n nachher befreit und n->getNextNode()->getPrevious() auch n->getPrevious() ist, ist für mein Verständnis weniger intuitiv als wenn da einfach

C++:
n->prev->next = n->next;
n->next->prev = n->prev;
delete n;


stünde. Aber wie gesagt, das ist ein bisschen Geschmackssache.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: