数据结构专题——链表处理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 分)
PAT 甲级 1052 Linked List Sorting (25 分)(数组模拟链表,没注意到不一定所有节点都在链表里)