• 数据结构专题——链表处理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;
    } 
  • 相关阅读:
    ScriptManager在客户端来调用服务器端方法或者webService的方法
    转2010 .NET面试题整理之基础篇
    .net 面试题1
    读写文件
    三种编解码方式
    vs2008快捷键
    SharePoint类库说明.NET教程,Asp.Net研发
    一道sql面试题解法
    16天学完java
    总结DataTable 导出Excel数据
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12210819.html
Copyright © 2020-2023  润新知