Suchbaum - Speicherfreigabe
-
Hallo Leute,
ich hab ein Problem bei meinem Programm. Ich hab soweit das Programm fertig, muss aber noch die Speicherfreigabe beim Löschen des Baumes in die Destruktoren einbinden. Aber ich komme einfach net weiter.
Ich bin offen für jegliche Lösungsvorschläge, hoffe ihr könnt mir weiterhelfen.
Suchbaum.cpp
//--------------------------------------------------------------------------- #include <string.h> #include <stdlib.h> #include "CBaum.h" #include "CBaum.cpp" //--------------------------------------------------------------------------- void main() { CBaum* pBaum; pBaum = new CBaum(); pBaum->Einfuegen("dies", 1); pBaum->Einfuegen("und", 1); pBaum->Einfuegen("das", 1); pBaum->Einfuegen("das", 2); pBaum->Einfuegen("ist", 2); pBaum->Einfuegen("der", 2); pBaum->Einfuegen("Anfang", 2); pBaum->Einfuegen("das", 3); pBaum->Einfuegen("ist", 3); pBaum->Einfuegen("das", 3); pBaum->Einfuegen("Ende", 3); //pBaum->Optimieren(); //pBaum->HaufigstesWort(); delete pBaum; system ("pause"); return; } //---------------------------------------------------------------------------
CBaum.cpp
#include <string.h> #include <stdlib.h> #include "CBaum.h" //------------------------------------------------------------------------------ CBaum::CBaum() { cWurzel = NULL; sMaxWort = ""; iMaxZahl = 0; }; //------------------------------------------------------------------------------ CBaum::~CBaum() { delete cWurzel; }; //------------------------------------------------------------------------------ void CBaum::EinfuegenBaum(CKnoten* xKnoten, char* xWort, int xSeite) { int vergleich = strcmpi(xWort, xKnoten->sWort); //Kleiner < 0, Gleich = 0, Größer > 0 if (vergleich < 0) if (xKnoten->cLinks == NULL) xKnoten->cLinks = new CKnoten(xWort, xSeite); else EinfuegenBaum(xKnoten->cLinks, xWort, xSeite); else if (vergleich > 0) if (xKnoten->cRechts == NULL) xKnoten->cRechts = new CKnoten(xWort, xSeite); else EinfuegenBaum(xKnoten->cRechts, xWort, xSeite); else // vergleich == 0 xKnoten->cSeiten->EinfuegenSeite(xSeite); }; //------------------------------------------------------------------------------ void CBaum::Einfuegen(char* xWort, int xSeite) { if(xWort=="der"||xWort=="die"||xWort=="das") { } else { if (cWurzel == NULL) cWurzel = new CKnoten(xWort, xSeite); else EinfuegenBaum(cWurzel, xWort, xSeite); } }; //------------------------------------------------------------------------------ /*void CBaum::Optimieren() { //while (CWurzel->sWort!=NULL||this->sWort!=NULL) while (CWurzel->sWort!=NULL||this->sWort!=NULL) { if(cWurzel->sWort=="der"||cWurzel->sWort=="die"||cWurzel->sWort=="das") { delete this; } this->Optimieren(); } } */ //------------------------------------------------------------------------------ CKnoten::CKnoten(char* xNeuesWort, int xNeueSeite) { CListe* ptr = NULL; sWort = xNeuesWort; cSeiten = new CListe(xNeueSeite, ptr); cLinks = NULL; cRechts = NULL; }; //------------------------------------------------------------------------------ CKnoten::~CKnoten() { delete cSeiten; delete cLinks; delete cRechts; }; //------------------------------------------------------------------------------ CListe::CListe(int xNeueSeite, CListe* xListe) { this->iSeite = xNeueSeite; this->cNext = xListe; } //------------------------------------------------------------------------------ CListe::~CListe() { delete cNext; }; //------------------------------------------------------------------------------ void CListe::EinfuegenSeite(int xNeueSeite) { CListe* NeueListe; if (cNext == NULL || xNeueSeite < cNext->iSeite) { NeueListe = new CListe(xNeueSeite, cNext); cNext = NeueListe; } else cNext->EinfuegenSeite(xNeueSeite); }; //------------------------------------------------------------------------------ int CListe::GibAnzahl() { if (cNext == NULL) return 1; else return (cNext->GibAnzahl() +1); };
CBaum.h
#ifndef CBaumH #define CBaumH //============================================================================== class CListe { private: int iSeite; CListe* cNext; public: CListe(int, CListe*); ~CListe(); void EinfuegenSeite(int); int GibAnzahl(); }; //============================================================================== class CKnoten { private: public: char* sWort; CListe* cSeiten; CKnoten* cLinks; CKnoten* cRechts; CKnoten(char*, int); ~CKnoten(); }; //============================================================================== class CBaum { private: CKnoten* cWurzel; char* sMaxWort; int iMaxZahl; public: CBaum(); ~CBaum(); void Einfuegen(char*, int); void EinfuegenBaum(CKnoten*, char*, int); void Loeschen(); // void Optimieren(); char* HaufigstesWort(); }; #endif
MfG Tom