数据结构专题——链表处理A1052.Linked List Sorting(25) (静态链表)

Posted jasonpeng1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构专题——链表处理A1052.Linked List Sorting(25) (静态链表)相关的知识,希望对你有一定的参考价值。

自己写的,少了异常处理。

技术图片

 

 

#include <bits/stdc++.h>
#include<math.h>
#include <string>
using namespace std;
const int maxn = 100010;
struct Node{//定义静态链表
    int data;
    int address;
    int next;
    bool flag;
}node[maxn];
bool cmp(Node a,Node b){
    //return a.data < b.data;
    if(a.flag != b.flag){
        return a.flag > b.flag;
    }else{
        return a.data < b.data;
    }
}
int main(){
    int n,addre;
    scanf("%d%d",&n,&addre);
    int add,d,nex;
    for(int i=0;i<n;++i){
        scanf("%d%d%d",&add,&d,&nex);
        node[add].data = d;
        node[add].next = nex;
        node[add].flag = true;
        node[add].address = add;
    }
    sort(node,node+maxn,cmp);
    printf("%d %05d
",n,node[0].address);
    for(int i =0;i<n;++i){
        if(i != n-1){
            node[i].next = node[i+1].address;
        }else{
            node[i].next = -1;
        }
        if(i != n-1){
            printf("%05d %d %05d
",node[i].address,node[i].data,node[i].next);
        }else{
            printf("%05d %d %d
",node[i].address,node[i].data,node[i].next);
        }
    }
    system("pause");
    return 0;
} 

由于题目可能会有无效节点,即不在题目给出的首地址开始的链表上

数据里面还有全部是无效的情况,这时就要根据有效节点的个数特判输出“0 -1”

技术图片

 

 

#include <bits/stdc++.h>
#include<math.h>
#include <string>
using namespace std;
const int maxn = 100010;
struct Node{//定义静态链表
    int data;
    int address;
    int next;
    bool flag;
}node[maxn];
bool cmp(Node a,Node b){
    //return a.data < b.data;
    if(a.flag != b.flag){
        return a.flag > b.flag;
    }else{
        return a.data < b.data;
    }
}
int main(){
    for(int i=0;i<maxn;++i){
        node[i].flag = false;
    }
    int n,begin,address;
    scanf("%d%d",&n,&begin);
    for(int i =0;i<n;++i){
        scanf("%d",&address);
        scanf("%d%d",&node[address].data,&node[address].next);
        node[address].address = address;
    }
    int count = 0,p = begin;
    //枚举链表,对flag进行标记,同时计数有效节点个数
    while(p != -1){
        node[p].flag = true;
        count++;
        p = node[p].next;
    }
    if(count == 0){//特判,新链表中没有节点时输出0 -1
        printf("0 -1");
    }else{
        //筛选有效节点,并按data从小到大排序
        sort(node,node+maxn,cmp);
        printf("%d %05d
",count,node[0].address);
        for(int i=0;i<count;++i){
            if(i != count -1){
                printf("%05d %d %05d
",node[i].address,node[i].data,node[i+1].address);
            }else{
                printf("%05d %d -1
",node[i].address,node[i].data);
            }
        }
    }
    system("pause");
    return 0;
} 

以上是关于数据结构专题——链表处理A1052.Linked List Sorting(25) (静态链表)的主要内容,如果未能解决你的问题,请参考以下文章

PAT Advanced 1052 Linked List Sorting (25) [链表]

1052 Linked List Sorting (25 分)难度: 一般 / 知识点: 链表

PAT甲级1052 Linked List Sorting (25 分)

1052 Linked List Sorting

PAT 甲级 1052 Linked List Sorting (25 分)(数组模拟链表,没注意到不一定所有节点都在链表里)

PAT甲题题解-1052. Linked List Sorting (25)-排序