zoukankan      html  css  js  c++  java
  • 数据结构专题——链表处理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;
    } 
  • 相关阅读:
    LAMP环境搭建博客
    PHP项目中经常用到的无限极分类函数
    在PHP项目中,每个类都要有对应的命名空间,为什么?
    一键解决docker pull hello-world的问题
    网盘10M速度下载-亿寻下载器
    《提问的智慧》
    idea出现 Error:(1, 1) java: 非法字符: 'ufeff'解决方式
    多线程的四种实现方式
    Java中的get()方法和set()方法
    Java构造器(构造方法/constructor)
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12210819.html
Copyright © 2011-2022 走看看