019
22.10.2008, 21:00 Uhr
Lensflare
|
So, ich hab das ein wenig umgebaut. Die Kommentare mit dem Ausrufezeichen (// !) markieren die veränderten Stellen.
C++: |
#include <iostream> using namespace std;
//#include "stack.h"
struct Stack { unsigned int depth; // maximale Tiefe (Anzahl der Elemente die in den Stack passen) char *content; unsigned int top; // aktuelle Tiefe (Position des tiefsten Elements im Stack). };
Stack* createStack(unsigned int n){
Stack *s;
s = (Stack*) malloc(sizeof(Stack)); s->content = (char*) malloc(n*sizeof(char)); s->depth = n; // ! maximale Tiefe ist n s->top = 0; // ! aktelle Tiefe ist 0, da noch noch kein Element im Stack ist s->content--; return s; }
void push(Stack *s, char c){
if(s->top < s->depth){ // ! wenn aktuelle Tiefe kleiner als maximale Tiefe... s->content++; // ! *s->content=c; s->top++; cout << "Hinzugefuegt" << endl; } else{ cout << "Stack ist voll!" << endl; } }
char pop(Stack *s){
if(s->top >= 1){ // ! char c = *s->content; //Element lesen... *s->content = 0; //...und "löschen" s->top--; s->content--; // ! cout << "Herausgeholt" << endl; return c; } else{ cout << "Stack ist leer" << endl; return 0; } }
void destroyStack(Stack *s){ // ! auch content freigeben for(int i=s->top; i>=1; i--) s->content--; s->content++; free(s->content);
free(s); }
int main(){
Stack *s;
s=createStack(3); push(s, 'a'); push(s, 'b'); push(s, 'c'); push(s, 'd');
cout << pop(s) << endl; cout << pop(s) << endl; cout << pop(s) << endl; cout << pop(s) << endl;
destroyStack(s); cin.ignore(); return 0; }
|
top ist auf 0, wenn sich im Stack nichts befindet. wenn top == depth dann ist der Stack voll. wenn der Stack leer ist, dann ist content die ursprüngliche Adresse minus 1. Beim Freigeben wird content vorher auf die ursprüngliche Adresse gebracht.
Das was ao zu pop vorgeschlagen hat, solltest du noch ergänzen.
Zitat von ao: |
Außerdem sollte pop das gepoppte Element nicht auf den Bildschirm schreiben, sondern zurückgeben (per Referenzparameter) und über einen bool-schen Returnwert anzeigen, ob der Stack leer war oder nicht.
|
-- Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten. (Emerson Pugh Trost) Dieser Post wurde am 22.10.2008 um 21:01 Uhr von Lensflare editiert. |