מצביעים - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

מצביעים


~שירה

Recommended Posts

מה עושים אם אני רוצה לבנות עץ בעל 20 איברים, ולאחר 7 הכנסות מופיעה לי ההודעה:


An unhandled exception of type 'System.StackOverFlowExcpection'
occurred in shira.exe

ויש לי אפשרות לבחור בין Break ל Continue (שגם כן סוגר את התכנית)

יש אפשרות למנוע את הופעת החלון הזה ולהמשיך ת'תרגיל?????

מה עושים עם המחסנית הזו?

קישור לתוכן
שתף באתרים אחרים

איפה בדיוק זה מופיע זה כבר לא משנה.

אם תסתכלי על ה- stack שלך במצב הזה את תראי כמה עשרות/מאות קריאות לפונקציה, עם הפרמטרים של כל אחת.

זה יאפשר לך לראות למה הפונקציה נקראת הרבה יותר מדי פעמים.

קישור לתוכן
שתף באתרים אחרים

ה- stack הוא חלק מסביבת ההרצה של התוכנית שלך, לא חלק מהתוכנית עצמה. זה שאת מקבלת את השגיאה הזו אומר שיש משהו לא בסדר באלגוריתם שלך.

ב- Visual Studio 2005 את יכולה להסתכל בו דרך Debug->Windows->Call Stack

נדמה לי שב- Visual Studio 6 אפשר לראות אותו דרך View->Debug ->Call Stack.

קישור לתוכן
שתף באתרים אחרים

הצילו!!!!!!!!

מה לא נכון פה????


#include <iostream>
#include <assert.h>
#include "Tree.h"
using namespace std;

template <class T>
class BRtree: public Tree<T>
{
private:
Node<T>* parent;
int color;

Node<T>* Insert(T val);
Node<T>* Insert(Node<T>*current, T val, Node<T>*parent);
void Update (Node<T>*current);
Node<T>* RemoveTop(Node<T>*);

int includes(Node<T>*current, T val) const;
Node<T>* includes(Node<T>*current, T val);

void Right(Node<T>*current);
void Left(Node<T>*current);

void FixUp(Node<T>*current);


public:
BRtree();
void Add(T val);//äåñôú áï
void Remove (T val);//îçé÷ú áï
int Includes(T val) const;

void getcolor();
void print();
};

template <class T>
BRtree<T>::BRtree()
{
Tree<T>();
parent = NULL;
color = 0;
}

template <class T>
void BRtree<T>::Add(T val)
{
Node<T>* current;
Insert(val);
current=includes(root,val);
Node<T>*ezer;

if(current->parent==NULL)
{
current=root;
root->color=1;
return;
}
else
{
while((current!=root)&&(current->parent->color==0))
{
if(current->parent==current->parent->parent->left)
{
ezer=current->parent->parent->right;
if((ezer!=NULL)&&(ezer->color==0))
{
current->parent->color=1;
ezer->color=1;
current->parent->parent->color=0;

current=current->parent->parent;
}
else
{
if(current==current->parent->right)
{
current=current->parent;

Left(current);
}

else
{
current->parent->color=1;
current->parent->parent->color=0;

Right(current->parent);
}
}
}
else
{
ezer=current->parent->parent->left;
if((ezer!=NULL)&&(ezer->color==0))
{
current->parent->color=1;
ezer->color=1;
current->parent->parent->color=0;

current=current->parent->parent;
}
else
{
if(current==current->parent->left)
{
current=current->parent;

Right(current);
}
else
{
current->parent->color=1;
current->parent->parent->color=0;

Left(current->parent);
}
}
}
} root->color=1;
}

}

template <class T>
Node<T>* BRtree<T>::Insert(T val)
{
if (!root)
{
root=new Node<T>(val,NULL,NULL,NULL,0);
return root;
}

Node<T>*p = root;

return Insert(root,val,p);
}

template <class T>
Node<T>* BRtree<T>::Insert(Node<T>*current, T val, Node<T>*parent)
{
if (current->value < val)
{ // Add to right subtree
if (!current->right)
{
current->right=new Node<T>(val,NULL,NULL,current,0);
return current->right;
}
else
{
Insert(current->right,val,current);
}
}
else
{ // Add to left subtree
if (!current->left)
{
current->left=new Node<T>(val,NULL,NULL,current,0);
return current->left;
}
else
{
Insert(current->left,val,current);
}
}
}

template <class T>
void BRtree<T>::Right(Node<T>*current)
{//current->x
Node<T>*ezer=current->parent;

if(current->right!=NULL)
{
ezer->left=current->right;
}
else
{
ezer->left=NULL;
}

current->right= ezer;

if(ezer->parent==NULL)
{
current->parent=NULL;
}
else
{
current->parent=ezer->parent;
if(ezer->parent->right==ezer)
{
ezer->parent->right=current;
}
else
{
ezer->parent->left=current;
}
}

ezer->parent=current;

if(current->parent==NULL)
{
root=current;
}
}

template <class T>
void BRtree<T>::Left(Node<T>*current)
{//current=y
Node<T>*ezer=current->parent;

if(current->left!=NULL)
{
ezer->right=current->left;
}
else
{
ezer->right=NULL;
}

current->left= ezer;

if(ezer->parent==NULL)
{
current->parent=NULL;
}
else
{
current->parent=ezer->parent;
if(ezer->parent->right==ezer)
{
ezer->parent->right=current;
}
else
{
ezer->parent->left=current;
}
}

ezer->parent=current;

if(current->parent==NULL)
{
root=current;
}
}

template <class T>
Node<T>* BRtree<T>::includes(Node<T>*current, T val)
{
// see if argument value occurs in tree
if(!current)
{
return NULL; // not found
}
if (current->value == val)
{
return current;
}
if (current->value < val)
{
return includes(current->right,val);
}
else
{
return includes(current->left,val);
}
}

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...