1075 链表元素分类 (25 分)
思路:首先建立一个结构体包含数据和下个地址,还有大小为3得vector数组。然后建立一个结构体数组,下标即为当前结点得地址。这样其实就可以用结构体数组来模拟链表进行一系列操作。然后定义一个变量并赋给它首地址,开始遍历到当它不等于-1(即不是链表尾),然后对每一次循环时得存储得数据进行判断 分为data<0 k>data>0和data>k 三个部分分别存储到v[0]
v[1] v[2]当中(个人学艺不精,参考得柳神得代码,没想到vector还有这种操作。。。。。)代码如下:
#include<vector>
using namespace std;
struct node{
int data,next;
}list[100000];
vector<int>v[3];
int main()
{
int start,n,k,a;
cin>>start>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a;
cin>>list[a].data>>list[a].next;
}
int p=start;
while(p!=-1)
{
int data=list[p].data;
if(data<0) v[0].push_back(p);
else if(data>=0&&data<=k) v[1].push_back(p);
else v[2].push_back(p);
p=list[p].next;
}
int flag=0;
for(int i=0;i<3;i++)
for(int j=0;j<v[i].size();j++)
if(!flag)
{
printf("%05d %d ",v[i][j],list[v[i][j]].data);
flag=1;
}
else printf("%05d\n%05d %d ",v[i][j],v[i][j],list[v[i][j]].data);
printf("-1");
}