1075 链表元素分类 (25 分)
生活随笔
收集整理的這篇文章主要介紹了
1075 链表元素分类 (25 分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個單鏈表,請編寫程序將鏈表元素進行分類排列,使得所有負值元素都排在非負值元素的前面,而 [0, K] 區間內的元素都排在大于 K 的元素前面。但每一類內部元素的順序是不能改變的。例如:給定鏈表為 18→7→-4→0→5→-6→10→11→-2,K 為 10,則輸出應該為 -4→-6→-2→7→0→5→10→18→11。
輸入格式:
每個輸入包含一個測試用例。每個測試用例第 1 行給出:第 1 個結點的地址;結點總個數,即正整數N (≤10?5??);以及正整數K (≤10?3??)。結點的地址是 5 位非負整數,NULL 地址用??1?表示。
接下來有 N 行,每行格式為:
Address Data Next其中?Address?是結點地址;Data?是該結點保存的數據,為?[?10?5??,10?5??]?區間內的整數;Next?是下一結點的地址。題目保證給出的鏈表不為空。
輸出格式:
對每個測試用例,按鏈表從頭到尾的順序輸出重排后的結果鏈表,其上每個結點占一行,格式與輸入相同。
輸入樣例:
00100 9 10 23333 10 27777 00000 0 99999 00100 18 12309 68237 -6 23333 33218 -4 00000 48652 -2 -1 99999 5 68237 27777 11 48652 12309 7 33218輸出樣例:
33218 -4 68237 68237 -6 48652 48652 -2 12309 12309 7 00000 00000 0 99999 99999 5 23333 23333 10 00100 00100 18 27777 27777 11 -1 作者: CHEN, Yue 單位: 浙江大學 時間限制: 400 ms 內存限制: 64 MB 代碼長度限制: 16 KB?
#include<iostream> #include<algorithm> using namespace std; const int maxn = 1000010;struct Node{int address,data,next;int flag;int count; }node[maxn];bool cmp(Node a,Node b){if(a.flag != b.flag) return a.flag < b.flag;else return a.count < b.count; }int main(){for(int i = 0; i < maxn; i++){node[i].flag = maxn;node[i].count = maxn;}int begin,n,k;scanf("%05d%d%d",&begin,&n,&k);int address; for(int i = 0; i < n; i++){scanf("%d",&address);scanf("%d%d",&node[address].data,&node[address].next);node[address].address = address;}int p = begin,cnt = 0;while(p != -1){node[p].count = cnt++;if(node[p].data < 0) node[p].flag = -1;else if(node[p].data > k) node[p].flag = 15;else node[p].flag = 10;p = node[p].next;}sort(node,node+maxn,cmp);if(cnt == 0) printf("-1");else{ for(int i = 0; i < cnt; i++){printf("%05d %d",node[i].address,node[i].data);if(i < cnt - 1) printf(" %05d\n",node[i+1].address);else printf(" -1");} }return 0; }?
轉載于:https://www.cnblogs.com/wanghao-boke/p/10421148.html
總結
以上是生活随笔為你收集整理的1075 链表元素分类 (25 分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 甲亢会影响试管婴儿移植吗
- 下一篇: 九大经典算法之选择排序、堆排序