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