drpingoo
Erfahrenes Mitglied
Hallo zusammen,
ich hätte da 3 Fragen zu einem Programm, das ich soeben geschrieben habe. Meiner erste Frage ist, wo bei mir in der Listenverknüpfung der Fehler ist? Weil immer wenn ich das letzte Element poppe, beendet das Programm mit einem Fehler.
Die anderen 2 Fragen sind eher allgemeiner Natur. Ich dachte ursprünglich, dass wenn man einem Pointer nichts zuweist, sei der NULL? Nun, das dachte ich eben, aber das hat er dann bei der if(top==NULL)-Abfrage (siehe Code) nicht verstanden, deshalb habe ich den Pointer schliesslich explizit mit NULL in der Fkt. init() deklariert, dann funktionierts.
Und die 3. Frage wäre, wieso ich das first nicht deleten kann. Ich dachte eigtl, dass wenn 2 Poniters, in diesem Falle top und first, auf dasselbe Element zeigen, dann wäre es egal, wenn ich einen Pointer löschen würde, weil ja immer noch der andere auf das Element zeigt.
lg
drpingoo
ich hätte da 3 Fragen zu einem Programm, das ich soeben geschrieben habe. Meiner erste Frage ist, wo bei mir in der Listenverknüpfung der Fehler ist? Weil immer wenn ich das letzte Element poppe, beendet das Programm mit einem Fehler.
Die anderen 2 Fragen sind eher allgemeiner Natur. Ich dachte ursprünglich, dass wenn man einem Pointer nichts zuweist, sei der NULL? Nun, das dachte ich eben, aber das hat er dann bei der if(top==NULL)-Abfrage (siehe Code) nicht verstanden, deshalb habe ich den Pointer schliesslich explizit mit NULL in der Fkt. init() deklariert, dann funktionierts.
Und die 3. Frage wäre, wieso ich das first nicht deleten kann. Ich dachte eigtl, dass wenn 2 Poniters, in diesem Falle top und first, auf dasselbe Element zeigen, dann wäre es egal, wenn ich einen Pointer löschen würde, weil ja immer noch der andere auf das Element zeigt.
lg
drpingoo
C++:
#include <stdlib.h>
#include <iostream>
#include <string>
using namespace std;
//Structs, Arrays und andere globale Variablen hier definieren.
struct liste{
int value;
liste *next;
} ;
liste *top = new liste;
int counter;
void init() {
top=NULL;//2. Frage
}
void push(int element){
if(top==NULL){
//top->value=element;
liste *first = new liste;//2. Frage
first->value=element;
top=first;
//delete first; //3.Frage
cout << "top->value: " << top->value << endl;
}
else{
liste *list = new liste;
liste *temp = new liste;
list->value=element;
temp=top;
list->next=temp;
top=list;
cout << "top->value: " << top->value << endl;
}
counter++;
}
int size() {
return counter;
}
int pop(){
if(size()!=0){
liste *tmp = new liste;
tmp=top;
cout << "top->value: " << top->value << endl;
if(top->next!=NULL){
top=top->next;}
counter--;
return top->value;
}
else{
cout << "Die Liste ist leer" << endl;
return -1;
}
return top->value;
}
void clear() {
while(size()!=0){
pop();
}
}
//Dieses Funktion implementiert eine Testumgebung fr den Stack
void test() {
cout << "The program has been startet without any arguments." << endl;
cout << "The program enters the stack test mode:" << endl;
cout << "Enter one of the commands: push, pop, end" << endl;
string command;
do{
cin >> command;
if (command == "pop"){
cout << pop() << endl;
} else if (command == "push"){
cout << "element?";
int elementToPush;
cin >> elementToPush;
push(elementToPush);
} else if(command == "end"){
clear();
}
else if(command == "size"){
cout << size() << endl;
}
else {cout << "command not recognised"<< endl;};
}while(command != "end");
}
int main(int argc, char * argv[]){
init();
test();
clear();
return 0;
}