並べ替えPAT A1052リンクリスト[静的リスト]

タイトル説明

リンクは、
大きな出力データ値への小さな順にリスト、ソートされたリストは、リスト上のそのノードが与えられ

分析

  • 、次の標準として、注目を構造物の静的リストを定義し、また、そこにアドレスを記録する必要がある、となぜか?インデックスをソート後のアドレスではないので
  • フラグ変数が定義されている間、ノード・リストに指定されたことは、いくつかでは、単純ではないように、横断する必要があることである(以下を参照の書かれた別のコードを横切る)CNTに記憶されているノードの数をカウントしながら、ノードフラグが有効ですトラバースし、次の状況公報判定0-1の便宜
  • アドレスリストが分散されるので、これと同じアドレスを使用して記録されたメンバ変数を追加し、データ値ではなく、ソートされたインデックスアドレスに応じて、ノード+ MAXNをソートするために、無効なノードが、そう:のソート実装識別フラグと、CMPフラグを機能させることができる= 1となるよう、フラグ= 0の背面に、一緒に置かれる有効な連続したストレージノード
#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e6+10;
struct Node{
    int add,data,next;
    bool flag;
}node[maxn];


bool cmp(Node a, Node b){
    if(a.flag != b.flag) return a.flag > b.flag;
    return a.data < b.data;
}

int main(){
    int n, st,cnt = 0;
    cin>>n>>st;
    int add,data,next;
    for(int i=0;i<n;i++){
        cin>>add>>data>>next;
        node[add] = {add, data, next, false}; //新的结构体赋值方法!!学到了
    }
    for(int i=st; i!=-1; i=node[i].next){ //遍历,新的方式!!学到了
        node[i].flag = true;
        cnt++;
    }
    if(cnt==0) printf("0 -1\n"); //全是无效结点
    else{
        sort(node, node+maxn, cmp);
        printf("%d %05d\n",cnt,node[0].add);
        for(int i=0;i<cnt-1;i++){
            printf("%05d %d %05d\n",node[i].add, node[i].data, node[i+1].add);
        }
        printf("%05d %d -1\n",node[cnt-1].add, node[cnt-1].data);
    }
}

おすすめ

転載: www.cnblogs.com/doragd/p/11263694.html