这是一道 模板题。直接背步骤,写代码。。。。
#include<iostream> #include<algorithm> using namespace std; const int maxn = 100010; struct Node { //第一步:定义静态链表 int address,next,data; int order = 2*maxn;//第二步,初始化order } node[maxn]; bool cmp(const Node& a,const Node& b) { return a.order < b.order; } int main() { int begin,n,k,address; cin>>begin>>n>>k; for(int i = 0; i < n; ++i) { cin>>address; cin>>node[address].data>>node[address].next; node[address].address = address; } int p = begin,cnt = 0;//第三步,遍历静态链表,统计有效结点个数,并标记 order while(p != -1) { if(node[p].data < 0) node[p].order = cnt++ - maxn;//负值元素 else if(node[p].data > k) node[p].order = maxn + cnt++;//大于 k的元素 else node[p].order = cnt++;//元素在[0,k]内 p = node[p].next; } sort(node,node+maxn,cmp);//第四步,按order递增排序 for(int i = 0; i < cnt; ++i) {//第五步,按格式输出 if(i < cnt - 1){ printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address); }else printf("%05d %d -1",node[i].address,node[i].data); } return 0; }
原文地址:https://www.cnblogs.com/keep23456/p/12358364.html
时间: 2024-11-09 10:26:16