1. 程式人生 > >A1052 Linked List Sorting

A1052 Linked List Sorting

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; }