全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1713
推到 Plurk!
推到 Facebook!

如何建立二元樹(Linked List發生錯誤)

尚未結案
k804138
一般會員


發表:3
回覆:4
積分:1
註冊:2005-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-22 04:10:29 IP:218.166.xxx.xxx 未訂閱
typedef struct TPline *Pline_Pointer;
struct TPline
   {
    double X1;//線其中一點的X座標
    double X2;//線其中一點的X座標
    double Y1;//線其中一點的y座標
    double Y2;//線其中一點的y座標
    double C;//線的電容值
    double D;//線的延遲時間
    double Snake;//當0=0;i--)//
    {
     for(int j=0;j<=i;j  )
      {
       Pline = (TPline*)LineToLine->Items[j line_jump];
       ComparePline = (TPline*)LineToLine->Items[j 1 line_jump];
       check_x1 = (Pline->X1   Pline->X2)/2;
       check_x2 = (ComparePline->X1   ComparePline->X2)/2;
       if(check_x1 > check_x2)
        {
         LineToLine->Exchange(j line_jump,j 1 line_jump);
        }
      }
    }
odd_line:
   line_jump_level=1;
   do
    {
     line_jump_level  ;
    }while(pow(2,line_jump_level)=0;i--)
      {
       for(int j=0;j<=i;j  )
        {
         Pline = (TPline*)LineToLine->Items[j (k*jump) line_jump];
         ComparePline = (TPline*)LineToLine->Items[j 1 (k*jump) line_jump];
         check_x1 = (Pline->X1   Pline->X2)/2;
         check_x2 = (ComparePline->X1   ComparePline->X2)/2;
         if(check_x1 > check_x2)
          {
           LineToLine->Exchange(j (k*jump) line_jump,j 1 (k*jump) line_jump);
          }
        }
      }
    }
   line_jump_level=line_jump_level-1;
   if(line_jump_level==1)
    {
     goto endline;
    }
   else
    {
     jump=jump/2;
     does=does*2;
     goto yline;
    }    yline:
   for(k=0;k=0;i--)
      {
       for(j=0;j<=i;j  )
        {
         Pline = (TPline*)LineToLine->Items[j (k*jump) line_jump];
         ComparePline = (TPline*)LineToLine->Items[j 1 (k*jump) line_jump];
         check_y1 = (Pline->Y1   Pline->Y2)/2;
         check_y2 = (ComparePline->Y1   ComparePline->Y2)/2;
         if(check_y1 > check_y2)
          {
           LineToLine->Exchange(j (k*jump) line_jump,j 1 (k*jump) line_jump);
          }
        }
      }
    }       line_jump_level=line_jump_level-1;
   if(line_jump_level==1)
    {
     goto endline;
    }
   else
    {
     jump=jump/2;
     does=does*2;
     goto xline;
    }
endline:
   check_line=check_line-do_line;
   
   line_jump=line_jump do_line;
   
   if(check_line<=4)
    {
     line_jump=line_jump check_line;
     goto end_odd_line;
    }
   else
    {
     finish_line_disable=0;
     goto odd_line;
    }
  }
 else
  {
  }
end_odd_line://上面是做X軸.Y軸的排序
 
 bool head=true;
 TPline *Left_child,*Right_child,*common_father;//左子節點跟右子節點以及合併的父節點
 TPline *Front,*final_source;//*Front做同一層的聯接  *final_source記錄最後一個的source位子
 TPline *Write_Front_list;//要寫Front用的
 Write_Front_list=new TPline;
 Write_Front_list=NULL;
 Front=NULL;
 for( int iii = 0; iii < do_line_num; iii=iii 2 )//兩條兩條線一起做
  {
   double LCap,LDelay,LDelay1;
   double avertx1,avertx2,averty1,averty2;
   Left_child=new TPline;
   Right_child=new TPline;
   common_father=new TPline;
   Left_child = (TPline*)LineToLine->Items[iii];
   Right_child = (TPline*)LineToLine->Items[iii 1];       if(Write_Front_list!=NULL)
    {
     Left_child->Front=Write_Front_list;
    }
   Right_child->Front=Left_child;
   Write_Front_list=Right_child;       //中間計算出avertx1,avertx2,averty1,averty2,LCap,LDelay       common_father->X1=avertx1;
   common_father->Y1=averty1;
   common_father->X2=avertx2;
   common_father->Y2=averty2;
   common_father->C=LCap;
   common_father->D=LDelay;       common_father->Left   = Left_child;//做link
   common_father->Right  = Right_child;//做link
   common_father->Level  = Left_child->Level   1;
   common_father->Back=NULL;
   if(Front!=NULL)
    {
     Front->Back=common_father;
    }
   else
    {
     final_source=common_father;
    }
  Front=common_father;
 if(finish_line==1)//判斷是否做到最後一條線了
  {
   goto stop;
  }
 else
  {
   for ( int i = 0; i < LineToLine->Count; i   )
    {
      Pline = (TPline*)LineToLine->Items[i];
      delete Pline;
    }
   LineToLine->Clear();
   LineToLine=new TList;
   TPline *Write_Back_list;
   Write_Back_list=new TPline;       AnsiString Str;
   Memo1->Lines->Add("測試");
   //ShowMessage("do_line_num=" FloatToStr(do_line_num));
   Write_Back_list=final_source;       for(int i=0;iAdd(final_source);
     if(Write_Back_list->Back!=NULL)
      {
       final_source=Write_Back_list->Back;
      }
     Write_Back_list=final_source;
    }
   goto restartline;
  }
stop:
 ShowMessage("final_source->Left->Left->X1=" FloatToStr(final_source->Left->Left->X1));
 
程式主要是兩個子樹建立一個父子樹,依此建立上去,簡單來說是8->4->2->1. 因為我需要再把建完的子樹,依照剛建起來的結果,在連回去1->2->4->8. 程式建出來的Linked List,最後只有1->2是正確的,2->4之後的資料都錯誤. 本來的資料型態為double,數字在1~10000. 但是最後ShowMessage出來的答案卻是2.122049...E-312. 這樣是不是中間建Linked List發生錯誤? 抱歉,程式有點長. 發表人 - k804138 於 2005/08/22 04:20:14 發表人 - k804138 於 2005/08/22 04:24:18
系統時間:2024-05-11 17:52:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!