A1052 Linked List Sorting
阿新 • • 發佈:2018-12-02
1.PAT很喜歡考的題型,主要就是用靜態連結串列處理,會很方便,即下標就是地址
2.輸入的資料不一定全部都在連結串列裡面,有可能有無用資料
3.得24分的應該是最後一個點,空連結串列輸出0 -1.
4.輸出的時候可以取巧,把每行最後一個地址和下一行第一個地址及資料在一起輸出,因為這兩個address都是data的address
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn = 100010;
struct Node{
int address,data,next;
}node[maxn]; //結構體陣列
bool cmp(Node a,Node b)//sort用
{
return a.data<=b.data;
}
int main(int argc, char const *argv[])
{
int n,head;
scanf("%d%d",&n,&head);
int address,data,next;
for(int i=0;i<n;i++){
scanf("%d%d%d",&address,&data,&next);
node[address].address = address; //下標存地址
node[address].data = data;
node[address].next = next;
}
Node L[n]; //另外建立陣列儲存有用資料,排除不在連結串列上的資料(vector更省空間)
int len = 0;
for(int p=head;p!=-1;p=node[p].next){ 遍歷資料
L[len++] = node[p];
}
sort(L,L+len,cmp); //按照data大小排序
printf("%d",len); //不管連結串列是否為空,長度一定要輸出的
if(len){ //連結串列不空
printf(" %05d\n" ,len,L[0].address);
printf("%05d %d",L[0].address,L[0].data);
}
for(int i=1;i<len;i++){
printf(" %05d\n%05d %d",L[i].address,L[i].address,L[i].data);
}
printf(" -1");
return 0;
}