목록 정렬 연결리스트 _A1052 (25 점)

https://pintia.cn/problem-sets/994805342720868352/problems/994805425780670464

/ * 
* 연결된 목록 
* 1. 정적으로 정의 링크리스트 구조 배열 
* 2 초기화 falg 거짓이다 
. * 제 주소 순회를 시작 3. 목록에서 유효한 노드 표시된 
유효 접합 참 * 4. 정렬 노드 거짓보다 크 
* / 
#INCLUDE <iostream>
 은 USING  스페이스 STD; 
#INCLUDE <cstdio> 
#INCLUDE <알고리즘>
 CONST의  INT의 MAXN = 100010 ; 

구조체 노드 {
     INT에서 , 어드레스, 데이터, 다음
     부울 ; falg 
노드 [MAXN]} 

BOOL CMP를 (노드 A, 노드 B) { // 노드의 기능 CMP 타입 불리언 변수 
    IF (a.falg == false로 || == b.falg 은 false ) {
        반환 a.falg> b.falg을; // 把无效结点往后放 
    } 다른 {
         반환 a.data < b.data; 
    } 
} 

INT 의 main () {
     위해 ( int로 I = 0 ; i가 MAXN를 <; 내가 ++ ) { 
        노드 [I] .falg = 거짓 ; 
    } 
    INT의 납입은 주소를 시작한다; 
    scanf와 ( " %의 D % d에 " , NUM,이 시작된다);
    위한 ( int로 I = 0 내가 ++; 나는 <NUM {) 
        는 scanf ( " %의 D ", 주소) // 제 1 어드레스 읽기 
        는 scanf ( " %의 D %의의 D " , 노드 [주소] .DATA, 및 , 기지국 [주소] 다음 내용) 
        노드 [주소] .Address가 = ; 주소 
    } 
    int로 카운트 = 0 , = 포인트는 시작,
     그동안 (포인트 = -! 1. ) { 
        노드 [포인트] .falg = true로 , 
        카운트 ++ ; 
        포인트 = 노드 [포인트] 다음 내용; 
    } 
    IF (카운트 == 0 ) { // 일본어 문장, 새로운 0-1 링크리스트 출력 노드 아니다 
        의 printf ( "0-1 ' ); 
    } 다른 { 
        정렬 (노드, 노드 + MAXN, CMP) 
        의 printf ( " % D % 05D \ n " , 계산 노드 [ 0 ] .address)
         에 대해 ( int로 I = 0 ; I는 < 카운트; 내가 ++ ) {
             경우 ! (counts- I = 1 ) {
                 // 结点地址노드 [I], 노드 [I + 1] 
                의 printf ( " % D % % 05D 05D \ n " , 노드 [I] .address 노드 [I] .DATA 노드 [I + 1 ] .address) 
            } 사람 {
                의 printf (" % 05D % D -1 \ n " , 노드 [I] .address 노드 [I] .DATA); 
            } 
        } 
    } 
    반환  0 ; 
}

추천

출처www.cnblogs.com/2o2o/p/11371583.html