C++링크

10071 단어 C++
이전에 C 로 체인 시 계 를 쓸 때 결점 은 구조 체 로 봉 하여 조작 하기 가 항상 번 거 로 웠 다.C++에서 종 류 를 사용 하여 결점 을 밀봉 하면 조작 하기에 훨씬 편리 하고 메모리 회수 도 잘 느껴 집 니 다.
    최근 Gps 데이터 분석 을 할 때 트 리 컨트롤 을 추가 해 달라 고 요청 했다.
    Gps 데 이 터 는 Excel 에 저 장 된 것 으로 어떤 이유 인지 OLE 방식 으로 데이터 가 많은 Excel 을 조작 할 때 데이터 읽 기 가 느 려 지 므 로 트 리 컨트롤 을 추가 하면 한 번 도 누 르 지 못 하고 Excel 표를 새로 읽 습 니 다.그래서 여기 서 링크 로 이 문 제 를 잠시 해결 했다.엑셀 표 의 데 이 터 는 링크 의 한 노드 로 보고 트 리 컨트롤 은 엑셀 의 제목 을 표시 한다.트 리 컨트롤 에서 읽 은 엑셀 을 클릭 하면 프로그램 은 엑셀 의 데 이 터 를 다시 읽 지 않 고 링크 에서 해당 하 는 노드 를 조회 하면 된다.
 
다음은 링크 를 실현 하 는 두 가지 유형(비교적 간단 한 패키지)입 니 다.
GpsNode 와 GpsList 의 정의:
class GpsNode//    GPS     

{

public:

    GpsNode();

    GpsNode(int TotalNum);

    GpsNode(int TotalNum, int label = 0);//label=0     

    ~GpsNode();



    void SetSpace(int TotalNum);

    GpsNode *next;

public:

    double Q;//  DQ   

    double *F;//F 

    double *DQn;

    double *X;

    double*Y;

    double*Z;

    int  TotalNum;//   

    double MaxValue;//

    int Label;//       

};



class GpsList   //Gps    

{

public:

    GpsList();

    ~GpsList();

    GpsNode *Head;

    GpsNode *p;

    void AddTail(int TotalNum, GpsNode *N);



    GpsNode * ReadNode(int Label);

    void DeleteNode(int Label);

    void ClearNode();

};

두 가지 유형의 실현:
GpsNode::GpsNode()

{

    F = NULL;

    DQn = NULL;

    X = NULL;

    Y = NULL;

    Z = NULL;

}

GpsNode::GpsNode(int TotalNum)

{

    F = new double[TotalNum];

    DQn = new double[TotalNum];

    X = new double[TotalNum];

    Y = new double[TotalNum];

    Z = new double[TotalNum];

}



GpsNode::GpsNode(int TotalNum, int label)

{

    if (label == 0)

    {

        F = NULL;

        DQn = NULL;

        X = NULL;

        Y = NULL;

        Z = NULL;

    }

}



GpsNode::~GpsNode()

{

    if (F != NULL)

    {

        delete[] F;

        delete[] DQn;

        delete[] X;

        delete[] Y;

        delete[] Z;

    }

}

void GpsNode::SetSpace(int TotalNum)

{

    F = new double[TotalNum];

    DQn = new double[TotalNum];

    X = new double[TotalNum];

    Y = new double[TotalNum];

    Z = new double[TotalNum];

}

GpsList::GpsList()

{

    GpsNode *N;

    N = new GpsNode;

    Head = N;

    p = Head;

}

GpsList::~GpsList()

{

    ClearNode();

}

void GpsList::AddTail(int TotalNum, GpsNode *N)

{

    p->next = N;

    N->next = NULL;

    p = N;

}

GpsNode * GpsList::ReadNode(int Label)

{

    GpsNode *Flag = NULL;

    GpsNode *Result = NULL;

    Flag = Head->next;

    while (Flag != NULL)

    {

        if (Flag->Label == Label)

        {

            Result = Flag;

        }

        Flag = Flag->next;

    }

    return Result;

}

void GpsList::DeleteNode(int Label)

{

    GpsNode *Flag = NULL;

    GpsNode *Next = NULL;

    while (Flag != NULL)

    {



        if (Flag->next->Label == Label)

        {

            GpsNode *Next = NULL;

            Next = Flag->next;

            Flag->next = Next->next;

            delete Next;

        }

        Flag = Flag->next;

    }

}



void GpsList::ClearNode()

{

    GpsNode *Flag = NULL;

    GpsNode *Next = NULL;

    Flag = Head->next;

    while (Flag != NULL)

    {

        Next = Flag->next;

        delete Flag;

        Flag = Next;

    }

}

Node 에 포 장 된 X,Y,Z,Q...Gps 의 일부 데 이 터 는 각 그룹의 데이터 크기 가 다 르 기 때문에 각 노드 의 크기 가 다 를 수 있 습 니 다.

좋은 웹페이지 즐겨찾기