АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Реализация функций структуры

Читайте также:
  1. Анализ объема структуры и качества строительно-монтажных работ
  2. Анализ реализации функций системы самоменеджмента на предприятии (на примере ООО «ХХХ»)
  3. Анализ структуры почвы
  4. Анализ структуры рисунка.
  5. Анализ структуры технического состояния основных фондов
  6. Артерии. Морфо-функциональная характеристика. Классификация, развитие, строение, функция артерий. Взаимосвязь структуры артерий и гемодинамических условий. Возрастные изменения.
  7. Бытие как хаос и как порядок: горизонтальные и вертикальные структуры.
  8. Виды маркетинга в зависимости от структуры маркетинговой концепции
  9. Влияние изменения возрастной структуры на воспроизводство населения
  10. Влияние структуры и размера зерна на ударную вязкость стали
  11. Возводим матрицу А в квадрат, используя мастер функций действие «МУМНОЖ».
  12. Вопрос 7. (Функции ОС и структуры данных)

 

При внесении данных в структуру, первоначально генерируется «pseudokey», после чего алгоритм проверяет, существует ли первый элемент дерева. Если данные до этого не вводились, то выделяется память под один узел дерева и текущее значение помещается в данный узел. Если же в структуре уже имеются элементы, то данные добавляются в ближайший свободный элемент, путь к которому соответствует «pseudokey».

Функция, реализующая добавление элемента:

 

int Past(BH *root, String *data,int coll,int pos)

{

char *p=Key_Gen(data,coll);

if(root==NULL)

{root=new (BH);

Past(root,data,coll,pos);

return 1;

}

else

{

if(root->BH_data==NULL

&& root->Left==NULL

&& root->Right==NULL)

{root->BH_data=data;

root->collData=coll;

return 1;

}

else

{if(root->BH_data==NULL)

{

if(p[pos]=='0')

{

if(root->Right==NULL)

{

BH *tmp = new BH;

root->Right=tmp;

root->Right->BH_data=data;

root->Right->collData=coll;

return 1;

}

else

{

Past(root->Right,data,coll,++pos);

return 1;

}

}

if(p[pos]=='1')

{

if(root->Left==NULL)

{

BH *tmp =new BH;

root->Left=tmp;

root->Left->BH_data=data;

root->Left->collData=coll;

return 1;

}

else

{

Past(root->Left,data,coll,++pos);

return 1;

}

}

}

if(root->BH_data!=NULL)

{

if(*root->BH_data==*data)return 1;

if(p[pos]=='0')

{

BH * tmp =new BH;

root->Right=tmp;

root->Right->BH_data=data;

root->Right->collData=coll;

}

if(p[pos]=='1')

{

BH * tmp =new BH;

root->Left=tmp;

root->Left->BH_data=data;

root->Left->collData=coll;

}

int dd = root->collData;

String *ddd = new String;

*ddd=*root->BH_data;

delete(root->BH_data);

root->BH_data=NULL;

root->collData=0;

Past(root,ddd,dd,pos);

return 1;

}

}

}

}

 

При внесении данных автоматически выполняется функция прорисовки дерева:

 

void paintTree(TImage *img, int x, int y,int _x=0, int _y=0)

{

img->Canvas->Rectangle(0,0,img->Width,img->Height);

img->Canvas->Brush->Color=clWhite;

img->Canvas->FloodFill(0,0,clWhite,fsBorder);

img->Canvas->CleanupInstance(); paintRoot(img,Head, x, y,100,20,_x,_y)

;}

 

Данная функция вызывает функцию рисования узла дерева и затем посредством рекурсивных вызовов прорисовывают всё дерево:

void paintRoot(TImage *img,BH *root,int x, int y,int n=1,int m=1,int _x=0, int _y=0)

{

n-=25;

m+=10;

if(_x>=x & _x<=x+20 & _y>=y & _y<=y+20)

{

img->Canvas->Brush->Color=clWhite;

img->Canvas->Font->Size=24;

if(root!=NULL) if(root->BH_data!=NULL) img->Canvas->TextOutA(10,10,(*root->BH_data));

}

if(root==NULL)

{

img->Canvas->Brush->Color=clRed;

img->Canvas->Ellipse(x,y,(x+10),(y+10));

}

else

{

if(root!=NULL && root->BH_data==NULL)

{

img->Canvas->Brush->Color=clBlue;

img->Canvas->Ellipse(x,y,(x+10),(y+10));

img->Canvas->MoveTo(x+5,y+5);

img->Canvas->LineTo(x-5-n,y+15+m);

paintRoot(img,root->Left,x-10-n,y+10+m,n,m,_x,_y);

img->Canvas->MoveTo(x+5,y+5);

img->Canvas->LineTo(x+15+n,y+15+m);

paintRoot(img,root->Right,x+10+n,y+10+m,n,m,_x,_y); }

else {

img->Canvas->Brush->Color=clGreen;

img->Canvas->Ellipse(x,y,x+10,y+10);

img->Canvas->MoveTo(x+5,y+5);

img->Canvas->LineTo(x-5-n,y+15+m);

paintRoot(img,root->Left,x-10-n,y+10+m,n,m,_x,_y);

img->Canvas->MoveTo(x+5,y+5);

img->Canvas->LineTo(x+15+n,y+15+m);

paintRoot(img,root->Right,x+10+n,y+10+m,n,m,_x,_y);

}

}

}

 

 

 


1 | 2 | 3 | 4 | 5 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)