第13章リンクリスト

A1133

#include<iostream>
#include<vector>
using namespace std;

const int maxn=100010;

int data[maxn],next1[maxn];

int first,n,k;

/*
    题意:1.所有负数在正数前面
          2.所有在0--k的数在大于0-k的数的前面
          3.整个数就被分成3段:第1段负数 第2段是0--k中的数 第3段是大于k的数
    
*/

int main()
{
    
    
    cin >> first >> n >> k;
    int temp1,temp2,temp3;
    for(int i=0; i<n; i++)
    {
    
    
        cin >> temp1;
        cin >> data[temp1] >> next1[temp1];
    }

    vector<int> a,b,c;
    while(first!=-1)
    {
    
    
        if(data[first]<0)
        {
    
    
            a.push_back(first);
        }
        else if(data[first]<=k)
        {
    
    
            b.push_back(first);
        }
        else
            c.push_back(first);
        first=next1[first];
    }
    a.insert(a.end(),b.begin(),b.end());  //将3个vector进行拼接
    a.insert(a.end(),c.begin(),c.end());
    for(int i=0; i<a.size()-1; i++)
    {
    
    
        printf("%05d %d %05d\n",a[i],data[a[i]],a[i+1]);
    }
    printf("%05d %d -1\n",a[a.size()-1],data[a[a.size()-1]]);
    return 0;
}

私はコードに納得していません:

#include<iostream>
#include<vector>
using namespace std;

const int maxn=100010;

int n,first,k;

struct node
{
    
    
    int data;
    int address;
    int next;
}Node[maxn];

vector<node> Node1,Node2,Node3;

int main()
{
    
    
    cin >> first >> n >> k;
    int temp1;
    for(int i=0; i<n; i++)
    {
    
    
        cin >> temp1;
        cin >> Node[temp1].data >> Node[temp1].next;
        Node[temp1].address=temp1;
    }

    while(first!=-1)
    {
    
    
        if(Node[first].data<0)
        {
    
    
            Node1.push_back(Node[first]);

        }
        else if(Node[first].data<=k)
        {
    
    
            Node2.push_back(Node[first]);
        }
        else
        {
    
    
            Node3.push_back(Node[first]);
        }
        first=Node[first].next;
    }

    Node1.insert(Node1.end(),Node2.begin(),Node2.end());
    Node1.insert(Node1.end(),Node3.begin(),Node3.end());
    for(int i=0; i<Node1.size()-1; i++)
    {
    
    
        printf("%05d %d %05d\n",Node1[i].address,Node1[i].data,Node1[i+1].address);
    }
    printf("%05d %d -1",Node1[Node1.size()-1].address,Node1[Node1.size()-1].data);
}

おすすめ

転載: blog.csdn.net/wsfhdhjs/article/details/109708608