Ho fatto alcune correzioni, probabilmente quelle istruzioni dopo il break causavano il problema, praticamente quando inserivo il numero dell' istruzione andava a capo senza fare nulla....ora funziona. Una cosa sola, questo č una parte del vecchio esercizio sullo stack che avevo postato, non so se ricordi, non so come usare i distruttori, ho provato a crearli nelle varie classi, potresti dirmi come li faresti tu o se sono scorretti?
Classi linkedlist cpp e hpp:
codice:class LinkedList { protected: Node* head; // Node* tail; int size; public: LinkedList(); ~LinkedList(); void setHead(Node* n); Node* getHead(); //void setTail(Node* n); // Node* getTail(); int getSize(); void addNode(int element); void deleteNode(); }; #endif /* LINKEDLIST_HPP */
codice:#include "LinkedList.hpp" LinkedList:: LinkedList() { head=NULL; size=0; } LinkedList::~LinkedList(){ delete head; } void LinkedList::setHead(Node* n){head=n;} Node* LinkedList::getHead(){return head;} // void LinkedList:: setTail(Node* n){tail=n;} // Node* LinkedList::getTail(){return tail;} int LinkedList::getSize(){return size;} void LinkedList::addNode(int element){ Node* nuovo=new Node(element); if(size==0) { head=nuovo; } else { nuovo->setNext(head); head=nuovo; } size++; } void LinkedList::deleteNode(){ if(size>0) { Node* tmp=getHead(); Node* succ=tmp->getNext(); head=succ; delete tmp; //delete succ; size--; } }
Classi nodo:
codice:#ifndef NODE_HPP #define NODE_HPP #include <stdio.h> class Node { protected: int element; Node* next; public: Node(int element); ~Node(); int getElement(); void setElement(int element); void setNext(Node * next); Node* getNext(); }; #endif /* NODE_HPP */codice:#include "Node.hpp" Node:: Node(int number) { element=number; next=NULL; } Node:: ~Node(){ delete next; } int Node:: getElement(){return element;} void Node::setElement(int number){element=number;} void Node::setNext(Node* succ){next=succ;} Node * Node:: getNext(){return next;}
Classe stack:
codice:#ifndef STACK_HPP #define STACK_HPP #include "LinkedList.hpp" #include "Node.hpp" #include <string> using namespace std; class Stack { protected: LinkedList* lista; int size; Node* top; public: Stack(); ~Stack(); string Top(); int getsize(); void push(int nuovo); void pop(); string toString(); }; #endif /* STACK_HPP */codice:#include "Stack.hpp" #include <string.h> #include <sstream> //#include "LinkedList.hpp" //#include "Node.hpp" LinkedList* stack; Stack::Stack() { stack=new LinkedList(); top=stack->getHead(); } Stack::~Stack(){ delete stack; } string Stack::Top() { string conv; stringstream out; string stampa; if(stack->getSize()>0) { int number=stack->getHead()->getElement(); out << number; conv=out.str(); stampa+=conv; } else { stampa="Error!!! Stack is Empty!"; } return stampa; } int Stack::getsize(){return stack->getSize();} void Stack::pop() { if(stack->getSize()>0) stack->deleteNode(); else printf("Error!!! Stack is empty"); } void Stack::push(int nuovo){ stack->addNode(nuovo); top=stack->getHead(); } string Stack::toString() { string str="["; int num; if(stack->getSize()==0) return str+"]"; Node*tmp=stack->getHead(); for(; tmp->getNext()!=NULL; tmp=tmp->getNext()) { string conv; stringstream out; num=tmp->getElement(); out << num; conv=out.str(); str+=conv+", "; } string conv; stringstream out; num=tmp->getElement(); out << num; conv=out.str(); str+=conv+"]"; return str; }codice:#include <cstdlib> #include "Stack.hpp" #include <stdio.h> #include <iostream> using namespace std; /* * */ int main(int argc, char** argv) { int op; Stack *myStack=new Stack(); bool finito=false; while(!finito) { int el; printf ("Che operazione vuoi eseguire?\n"); cout << "1)push: 2)pop 3)top: 4)Fornisci dimensione: 5)Stampa struttura:\n"; cin >> op; switch(op) { case 1: cout << "Che numero vuoi inserire?\n" << endl; cin >> op; myStack->push(op); break; case 2: myStack->pop(); break; case 3: cout <<myStack->Top()<< endl; break; case 4: el=myStack->getsize(); printf("Il numero di elementi e' %d.\n", el); break; case 5: cout <<myStack->toString() << endl; break; default: cout << "Errore...il programma verra' terminato...\n" <<endl; finito=true; break; } if(finito==false) { cout << "Vuoi continuare? 1)si 2)no\n" << endl; cin >> op; if(op==2) finito=true; else if(op!=1 && op!= 2) cout<<"Errore!!! Il programma verra' terminato\n"<<endl; } } }

Rispondi quotando