码迷,mamicode.com
首页 > 其他好文 > 详细

A1052 Linked List Sorting (25分)

时间:2020-02-03 19:13:12      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:lin   next   false   add   代码   names   else   cst   head   

一、技术总结

  1. 这个也是一个链表类题目,主要是在结构提上的设计,可以设计一个flag参数用于记录真实有效的结点。
  2. 然后就是根据题目要求进行排序,输出结果。
  3. cmp()函数可以,一层是把有效节点排到数组的左边,然后可以进行二次比较,按题目要求来。

二、参考代码

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct Node{
    int key;//数据 
    int next;//用于存储下一个地址 
    int address;//地址 
    bool flag;
}node[100010];
bool cmp(Node a, Node b){
     if(a.flag == false || b.flag == false){
        return a.flag > b.flag;
     }else{
        return a.key < b.key;
     }
}
int main(){
    int N, head;
    int cnt = 0;//用于统计有效节点个数 
    scanf("%d %d", &N, &head);
    for(int i = 0; i < N; i++){
        int tkey, tnext, taddress;
        scanf("%d %d %d", &taddress, &tkey, &tnext);
        node[taddress] = {tkey, tnext, taddress, false};
    } 
    for(int i = head; i != -1; i = node[i].next){
        cnt++;
        node[i].flag = true; 
    }
    if(cnt == 0){
        printf("0 -1");
    }else{
        sort(node, node+100010, cmp);
        printf("%d %05d\n", cnt, node[0].address);
        for(int i = 0; i < cnt; i++){
            if(i == cnt-1){
                printf("%05d %d -1", node[i].address, node[i].key);
            }else{
                printf("%05d %d %05d\n", node[i].address, node[i].key, node[i+1].address);
            }   
        }
    }
    return 0;
} 

A1052 Linked List Sorting (25分)

标签:lin   next   false   add   代码   names   else   cst   head   

原文地址:https://www.cnblogs.com/tsruixi/p/12256623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!