데이터 구조 - 다항식 요약 링크리스트의 구현

데이터 구조 코스 절강 대학 강의 연습 : 연결리스트를 사용하여, 다항식의 합과 제품을 달성 단지 제품이 작성하지 않은 것, 합계를 작성합니다.

#INCLUDE는 <iostream> 
#INCLUDE <STDIO.H>
 은 USING  공간 STD; 

// 다항식이 타입 정의 별명 PolyNode * 유형 선언 인 
타입 정의의 구조체 PolyNode의 * 다항식;
 구조체 PolyNode 
{ 
    INT (Coef)를,
     INT expon; 
    다항식 링크와; 
}; 

무효화 첨부 ( INT의 C, INT의 다항식 * pRear에 E) / * * pRear 후면의 값을 변경 값으로 전달하는 포인터에 대한 포인터 * / 
{ 
    다항식 P로는, 

    P (다항식) = malloc이 ( sizeof의 ( 구조체 PolyNode) );/ * 현재 다항식을 저장하기위한 새로운 노드를 생성 * / 
    P -> 링크 = NULL; / * 노드리스트의 각 단부에 삽입되어 있기 때문에, 그것이 NULL 포인터되도록 * / 
    P -> C = (Coef)를하는 단계; / * 신규 노드 할당 * / 
    P -> expon = E] 
    ( * pRear) -> 링크 = P]
     * = P pRear; / * ---------------- 변경점 후면 리스트 ----------------- 현재 단부 * / 
} 

다항식 ReadPoly ()에 
{ 
    상기 다항식 P, T에 
    다항식 후방; / * 식의 최종 결과의 현재 항목 포인터 * / 
    INT의 C, E, N, 

    는 scanf ( " %의 D ' , N); / *읽기 여러 다항식 있습니다 * / 
    P = malloc이 ((다항식에) sizeof의 ( 구조체 P- 형> 링크 = NULL; PolyNode)) / * 빈 노드리스트 헤더로 사용하기 응용 프로그램 * / 
    후면 = P; / * 현재 노드는 후면 부여 포인터 * / 
    만약에 (N를 < . 1 ) / *는 입력 데이터가 정확한지 여부를 점검 * / 
        COUT은 << " 입력 오류가 " << ENDL,
     그동안 합니다 (N-- ) { 
        는 scanf ( " %의 D %의의 D ' , C & E)는; / * 다항식 인덱스 계수 읽기 * / 
        첨부 (C, E, 및 후면)을;/ * 다항식의에 현재 항목 * / 
    } 
    T = P하며 P-P => 링크, 무료 (T); / * 릴리스 응용 프로그램을 시작하는 빈 노드 * / 
    / * ........... ...... / * 
    ; P 
} 

(다항식 (PL) 다항식 P2까지) 추가 다항식 
{ 
    다항식 T1, T2, P에, 
    다항식 후방; 

    T1은 P2 = T2; PL # = / * 경기 수와 헤더 P2 지점 못해 값을 변경하거나 목록을 찾을 수 * / 
    P = malloc이 ((다항식에) sizeof의 ( 구조체 P- 형> 링크 = NULL; PolyNode)) / * 빈 노드리스트 헤더로 사용하기 응용 프로그램 * / 
    후면 = P,
     그동안 ( T1 &&T2) {
         경우 (T1-> expon T2- ==> expon) {
             경우 ((T1-> COEF + T2-> COEF)! = 0 ) { 
                부착 (T1 -> COEF + T2-> COEF, T1-> , expon 후면); 
                T1 = T1-> 링크; 
                T2 = T2-> 링크; 
            } 
            다른 { 
                T1 = T1-> 링크; 
                T2 = T2-> 링크; 
            } 
        } 
        다른  경우 (T1-> expon> T2-> expon) { 
            부착 (T1 -> COEF, T1-> expon,
            T1 = T1-> 링크; 
        } 
        다른 { 
            (T2 연결 -> COEF, T2-> expon, ; 뒷면)을 
            T2 = T2-> 링크; 
        } 
    } 
    동안 (T1)는 { 
        (T1 부착 - T1-> expon> COEF를, ; 후면) 
        T1 = T1-> 링크; 
    } 
    동안 (T2)은 { 
        부착 (T2 -> COEF, T2-> expon, 후면); 
        T2 = T2-> 링크; 
    } 
    다항식 t 단계; 
    t = P; P = P-> 링크; 무료 (t);
    반환피; 
} 

공극 PrintPoly (다항식 P) 
{ 
    INT의 플래그 = 0 ; 
    
    만약 (! P) {의 printf ( " 0 0 \ n " ); 반환 ; } 

    반면 (P) {
         경우 (!의 플래그) 
            플래그 = 1 ;
        다른 사람 
            (printf와 "  " ); 
        의 printf ( " %의 D % d에 " , P-> COEF, P-> expon); 
        P = P-> 링크; 
    } 
    의 printf ( " \ n을 "  );
}

 지능 의 main () 
{ 
    다항식 (PL) P2, P에, 
    경기 수 = ReadPoly (), 
    P2 = ReadPoly (); 
    P = 추가 PL (, P2); 
    
    // 다항식 T로; / * 박리 헤더 (헤더 이유 노드 * /) 공개하지 않습니다
     // T = P하며 P-P => 링크, 무료 (T) 

    PrintPoly (P) 
    의 printf ( " % d 개 %의 D " 의 P-> (Coef)를의 P-> expon) ;
     반환  0 ; 
}

요약 :

1. 헤더 포인터를 이동할 수 없습니다, 그렇지 않으면 항목의 목록을 찾을 수 없습니다

헤더 2. 응용 빈 k의 데이터를 삽입하는 단계 (프리)를 기억 노드를 분리한다 후에

3. malloc을 사용하여 응용 프로그램 메모리

  바이두 백과 사전하십시오 적용 연속지정된 크기 무효화하기 위해 할당 된 메모리 블록 영역, 당신은 실제 메모리 공간을 바인딩 할 때 메모리의 특정 위치를 모를 때, 당신은 동적 메모리 할당을 사용하는 메모리 영역 주소의 반환 형식이 필요합니다 *

  사용 예 : P = (다항식)의 malloc (sizeof 연산자 (구조체 PolyNode)); // 다항식 구조체의 PolyNode *이다의 typeof 별칭은 P 메모리에이 노드의 저장 위치

목록 4. 포인터 필드는 노드의 일반적인리스트 포인터의 저장 위치에 대한 포인터를 저장

  P1 = (다항식)의 malloc (sizeof 연산자 (구조체 PolyNode));

  이 P-> 링크 = P1, 즉, 새로운 노드는 링크 된리스트로 삽입되고 달성 할 수 있도록 예를 들어 P는 현재 노드의인가 후의 노드 P1이고,

추천

출처www.cnblogs.com/sunrise-to-set/p/10945115.html