链表前插法
在链表的头部插入元素
e.g.
head指向链表元素第一个地址
如数列 1,2,3,4
1. head->NULL 初始状态无元素,表示为NULL
2. head->1->NULL
3. head->2->1->NULL
4. head->3->2->1->NULL
5. head->4->3->2->1->NULL
代码写法
用ver数组保存元素的值,nxt数组保存元素的下标
int head,ver[N],nxt[N],tot;
void add(int x) {
ver[tot]=x;
nxt[tot]=head;
head=tot;
tot++;
}
链式前向星
图解:
数组代码:
int head[N],ver[N],nxt[N],w[N],tot;
void add(int x,int y,int w){
ver[tot]=y;
w[tot]=w;
nxt[tot]=head[x];
head[x]=tot;
tot++;
}
for(int i=1;i<=n;i++){
for(int j=head[i];j!=-1;j=nex[i]){
cout<<i<<" "<<ver[j]<<" "<<w[j]<<endl;
}
}
vector 数组
vector<vector<int> >e(1000);
int a,b,c;
cin>>a>>b>>c;
e[a].push_back(make_pair(b,c));
for(int i=1;i<=n;i++){
for(int j=0;j<e[i].size();j++){
cout<<i<<" "<<e[i][j].first<<" "<<e[i][j].second<<endl;
}
}
树的重心的性质
1.树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个重心,他们的距离和一样。
2.把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。
3.一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。
4.一棵树最多有两个重心,且相邻。