Stack dynamisch
-
Hallo zusamen, ich bin neu in C++ und habe noch ein paar Verständnisfragen. Als kleine Aufgabe soll ein Stack dynamisch für Zahlen erstellt werden. Hier mein Ansatz:
stack.h: class cStack{ friend int main(void); friend void showStack(cStack *Start); private: int top; double number; class cStack *next; class cStack *Start; public: cStack(void); //Konstruktor bool push(double number); double pop(void); int count(void); void drop(void); void swap(void); double get(int i); }; stack.cpp: #include"stack.h" #include<iostream> #include<stdio.h> #define TRUE 1 #define FALSE 0 cStack::cStack(void) { number=0; Start=NULL; } bool cStack::push(double number) { int Fehler=0; if(!Fehler) { //next = new cStack; Start = (cStack*)malloc(sizeof(cStack)); if(Start==NULL) Fehler= -1; } if(!Fehler) (Start)->number= number; Start = Start->next; return true; } double cStack::pop(void) { return 0; } int cStack::count(void) { return 1; } void cStack::drop(void) { } void cStack::swap(void) { } double cStack::get(int i) { return 0; } Rechner.cpp: #include<iostream> #include"stack.h" using namespace std; void showStack(cStack *Start); int main(void) { int rueckgabe; cStack Stack; rueckgabe = Stack.push(18); Stack.push(9); //showStack(Stack.Start); cout << "Rueckgabe: " << rueckgabe <<endl; //cout << "Stack: " << Stack.Start->number <<endl; //hier habe ich versucht die erste Zahl auszugeben. system("PAUSE"); return 0; } //Diese Funktion soll für die Ausgabe dienen, aber ich bekomme immer eine Fehlermeldung und rufe sie in main nicht auf ;) void showStack (cStack *Start) { while(Start){ cout << "Stack: " << Start->number << endl; Start = Start->next; } }Ich habe Probleme den Stack auszugeben. Das Programm steht noch in den Grundzügen, somit sind noch nicht alle Methoden implementiert und das Error-Handling ist auch noch nicht fertig. Ich wäre sehr dankbar für eine Antwort

-
Einige Verbesserungsvorschläge:
1. Templates (und falls die Bedingung des Template-Parameters weiterhin gilt (Zahl), dann eine static_assert o. ä.)
2. Ein Stack ist eigentlich ein Adapter (wie auch in der STL), willst du nicht einen Sequentiellen STL-Container o. ä. als Array verwenden?
3.#define TRUE 1 #define FALSE 0Wieso nicht gleich die Schlüsselwörter?
Und noch weitere...
-
Also ich habe mit Templates noch nicht gearbeitet und weiß nicht was das ist... bzw. ich habe es gerade mal gegoogelt. Also ich bin gerade am Anfang von C++... Nochmal zu der Aufgabe, es soll eine Verkettete Liste verwendet werden. Die Konstanten hatte ich vergessen rauszunehmen, wusste nicht mehr ob die vor definiert sind.
Vielen Dank erstmal für die Vorschläge!

-
Stack schrieb:
Also ich habe mit Templates noch nicht gearbeitet und weiß nicht was das ist... bzw. ich habe es gerade mal gegoogelt. Also ich bin gerade am Anfang von C++... Nochmal zu der Aufgabe, es soll eine Verkettete Liste verwendet werden.
Denkvorschlag (nichts ernstes):
template<typename type, typename container = std::deque<type>> class stack { size_t mSize; container mContainer; public: explicit stack(container const& Con = container()): mSize(Con.size()), mContainer(Con) {} void push(type const& e) { mContainer.push_back(e); } void pop() { mContainer.pop_back(); } type& top() { return mContainer.back(); } type const& top() const { return mContainer.back(); } bool empty() const {return !size();} size_t size() const {return mSize;} };Ein wenig wie der
std::stack.
Du kannst wegen der verketten liste ja das machen:stack<int, std::list<int>> s;Oder gleich als default-parameter ...
Wenn du keine Templates magst, kannst du alletypes durchintund allecontainers durchstd::list<int>ersetzen.
-
Buhh, da muss ich jetzt erstmal schlucken
aber an sich ist deine Idee nicht schlecht... ich muss das jetzt erstmal verarbeiten! Aber vielen Dank 
-
Wieso sollte irgendjemand eine deque für einen Stack nehmen? Die höchstens bei einer FIFO-Queue, ein Stack ist aber LIFO.
-
Ethon schrieb:
Wieso sollte irgendjemand eine deque für einen Stack nehmen? Die höchstens bei einer FIFO-Queue, ein Stack ist aber LIFO.
Deswegen ja nur als Hinweis, dass auch eine
dequeihren Zweck erfüllen würde. Da eignet sich aber (wie bereits durch mich angedeutet - oder auch nicht) einestd::listbesser.
-
Stack schrieb:
Start = (cStack*)malloc(sizeof(cStack));Eieieieiei! Was ist dein Background und wie lernst du C++?
-
krümelkacker schrieb:
Stack schrieb:
Start = (cStack*)malloc(sizeof(cStack));Eieieieiei! Was ist dein Background und wie lernst du C++?
Selbst für einen C-Programmierer Beängstigend. Nie den Rückgabewert von
malloccasten...
-
Hacker schrieb:
wobei bemerkt sei das std::deque auch eine verkette Liste ist
Eieieieiei! Was ist dein Background und wie lernst du die STL?
-
Edit: gelöscht.
-
deque hat so ziemlich nichts mit verketteten Listen zu tun...
-
Edit: Ah, stop. Da hab ich wohl den namen falsch verstanden...
Deque wird ja intern durch ein Array dargestellt und ist wie einstd::vectoraufgebaut.
-
Nö.
-
Kellerautomat schrieb:
Nö.
Doch, laut Jürgen Wolf.
-
...
-
Hacker schrieb:
Doch, laut Jürgen Wolf.

Quelle: C++ Reference - dequeu
[...] unlike vectors, deques are not guaranteed to have all its elements in contiguous storage locations, eliminating thus the possibility of safe access through pointer arithmetics.
Both vectors and deques provide thus a very similar interface and can be used for similar purposes, but internally both work in quite different ways: While vectors are very similar to a plain array that grows by reallocating all of its elements in a unique block when its capacity is exhausted, the elements of a deques can be divided in several chunks of storage, with the class keeping all this information and providing a uniform access to the elements.
[...]
-
Gut, gut. Jetzt liegt das Buch im Müll. Mein C++-Wissen ist mir locker nochmal 40€ wert...
-
Laut Jürgen Wolf erbt eine Wurst auch virtuell vom Supermarkt.

gruß
syntax
-
Syntax_error schrieb:
Laut Jürgen Wolf erbt eine Wurst auch virtuell vom Supermarkt.

gruß
syntaxSupermarkt ist eine Wurst und ein Brot.
Der Typ hat sie doch nicht mehr alle, bald kommt
struct Kind : public F***e, protected Penis
-
Und Erwachsene haben keine Geschlechtsorgane?