链表的线性数组实现
#include"iostream"
#include"cstdio"
using namespace std;
int u[100]; //第i条边的起始点
int v[100]; //第i条边的终止点
int w[100]; //第i条边的权值
int n; //边数
int first[100]; //存储起点为 i 的第一条边的编号
int next[100]; //存储第 i 条边的下一条边的编号
int x,y,z;
int main()
{
int t;
cin>>n;
for(int i=1;i<=n;i++) //万分注意first数组开始必须初始化为-1,此-1代表链表中的NULL;
{
first[i]=-1;
}
for(int i=1;i<=n;i++)
{
cin>>x>>y>>z;
u[i]=x;
v[i]=y;
w[i]=z;
next[i]=first[u[i]]; //核心语句:含义:第i条边的下一条边的编号是以u[i]为起点的第一条边的编号
first[u[i]]=i; //以u[i]为起点的第一条边的编号是目前最新的i值
}
t=first[1]; //此时只是举例,以1位起点的边序列的举例
while(t!=-1)
{
printf("%d %d %d\n",u[t],v[t],w[t]; //打印边的信息
t=next[t]; //往后推边
}
return 0;
}