⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cd5_1u.cpp

📁 C++ Builder程序员学习数据结构,里面涵盖了所有你要学习的数据结构的所有源码(二叉树、链表、单链表、双链表、红黑树、快速排序、冒泡排序、哈弗曼树、堆、集合、字典、散列、字典、跳表、图、最短路径
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <math.h>                      //使用math函数
#include "cd5_1u.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int tree[32]={0};                  //简单的数组数据类型,经过设计后可变成树状结构
int a=1,i,l;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void create(int lv,int d,int i)          //可视化新结点的构建函数;运行时调用
{
   static int p[16];            //静态数组整数变量p是用来记录与应用线段的端点

   TShape *sp;                  //产生新的Spape控件sp及设定其属性值
   TColor color[5]={clWhite,clYellow,clLime,clBlue,clRed};      //设置结点层次颜色
   sp=new TShape(Form1);
   sp->Parent=Form1->pn;     //设置新控件出现在画板上
   sp->Height=30;
   sp->Width=30;
   sp->Shape=stCircle;
   sp->Brush->Color=color[d];

   TLabel *lb;                 //声明产生新的Label控件lb并设置其属性值
   lb=new TLabel(Form1);
   lb->Parent=Form1->pn;
   lb->Height=20;
   lb->Width=30;
   lb->Transparent=true;         //设置Label为透明,在画面上只出现字
   lb->Caption=IntToStr(i);

   sp->Top=20+d*50;             //设定控件出现的顶端值
   lb->Top=28+d*50;

   if(d==0)                    //设置控件出现的左端值,注意d为新控件深度
   {
      sp->Left=245;          //这是根结点座标
      lb->Left=255;
   }
   else
   {
      sp->Left=245-d*50+(d*100/(pow(2,d)-1)*(lv-(pow(2,d))));     //用pow()求次方
      lb->Left=255-d*50+(d*100/(pow(2,d)-1)*(lv-(pow(2,d))));      //lv为结点位置

      Form1->Image1->Canvas->MoveTo(p[lv/2],35+(d-1)*50);         //线段起点设置
      Form1->Image1->Canvas->LineTo((sp->Left)+15,(sp->Top)+15);  //线段终点设置
   }

   Form1->lout->Caption="第 "+IntToStr(a)+" 个输入值("+IntToStr(tree[lv])+"),"+
                         "位于第 "+IntToStr(d+1)+" 层";         //在这里深度加1为层数

   if(lv<16)
      p[lv]=(sp->Left)+15;             //将结点中心位置记录于p数组
}
//---------------------------------------------------------------------------
void __fastcall TForm1::einKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   int d=0;                              //深度初始值设为0
   if(Key==13)
   {
      i=StrToInt(ein->Text);
      l=1;                               //根结点位置为1(便于运算)
      if(a>1)
      {
         while(tree[l]!=0)              //有根结点后才可安排子结点位址
         {
            if(i<tree[l])               //新的输入值比较小
            {
               l=l*2;                   //位置在其两倍处
               d++;                     //深度加1
            }
            else                        //新的输入值比较大
            {
               l=l*2+1;                 //位置在其两倍加1处
               d++;
            }
         }
      }
      tree[l]=i;                       //将数值设置于特定数组位置中
      if(d>=5)
         lout->Caption="请输入的值落在第五层之外";
      else
         create(l,d,i);    //调用构建窗体显示控件的函数并传入位置,深度及内容
      ein->Text="";
      a++;                 //结点计数器加1
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::endClick(TObject *Sender)
{
   Close();
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -