zoukankan      html  css  js  c++  java
  • pat甲级 1052 Linked List Sorting

    题意:给出N个结点的地址address,数据域data以及指针域next,然后给出链表的首地址,要求把在这个链表上的结点按data值从大到小输出。

    思路:用map来保存输入的数据,用vector迭代器来保存有效数据;

              看给出的首地址元素是否存在,存在则遍历链表,将元素保存在vector中,直到地址为-1;

              将vector中的元素按data的大小由小到大排序;

              循环输出;

    注意点:直接使用%05d的输出格式进行补0,-1除外;

                 题目可能出现无效结点,即结点不在链表上,所以要进行过滤;

                可能所有结点都为无效结点,所以需要保存下有效结点的个数k,当k为0时输出“0  -1”;

    AC代码:

    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<algorithm>
    #include<map>
    using namespace std;
    
    struct node{
        int s;
        int number;
        int next;
    };
    
    bool cmp(node a,node b){
        return a.number<b.number;
    }
    int main(){
        vector<node>vec;
        map<int,node>mapp;
        int n,start;
        cin>>n>>start ;
        node x;
        for(int i=0;i<n;i++){
            cin>>x.s>>x.number>>x.next;
             mapp[x.s]=x;
        }
        int k=0;
        if(mapp[start].s==start)
        for(int i=start;i!=-1;i=mapp[i].next){
            vec.push_back(mapp[i]);
            k++;
        }
        if(k){
        sort(vec.begin(),vec.end(),cmp);
        printf("%d %05d
    ",k,vec[0].s);
        for(int i=0;i<vec.size()-1;i++){
            printf("%05d %d %05d
    ",vec[i].s,vec[i].number,vec[i+1].s);
        }
        printf("%05d %d -1",vec[k-1].s,vec[k-1].number);
    }
    else printf("0 -1");
    } 
  • 相关阅读:
    【转】kafka&zookeeper集群搭建指南
    spark-streaming问题集锦
    Rokid开发者社区skill之【历史上的今天】
    jQuery+Ajax获取百度百科历史上的今天
    python+xpath+requests爬取维基百科历史上的今天
    jQuery请求维基百科[历史上的今天]
    Redis和Memcached比较
    [转]RosBridge小结
    [转]使用rosbridge协议实现安卓跟ros的解耦
    跨域访问之jsonp
  • 原文地址:https://www.cnblogs.com/fromzore/p/10008743.html
Copyright © 2011-2022 走看看