鏈式前向星是ssfz神牛Malash創造的(至少Baidu上沒有搜到)名詞,或許這種數據結構有其他更加正規易懂的名字,但我還是沒有搜到。(有一個資料稱之為加上next數組前向星,但這個名字實在不好) 該數據結構可能是Jason911神牛或其他神牛發明的。
橫向比較,代碼,
橫向比較
如果說鄰接表是不好寫但效率好,鄰接矩陣是好寫但效率低的話,前向星就是一個相對中庸的數據結構。前向星固然好些,但效率並不高。而在最佳化為鏈式前向星後,效率也得到了較大的提升。雖然說,世界上對鏈式前向星的使用並不是很廣泛,但在不願意寫複雜的鄰接表的情況下,鏈式前向星也是一個很優秀的數據結構。
代碼
模板
#include<iostream>#include<string.h>#include<limits>const int maxn = 10005;const int maxm = 1000005;//edgeusing namespace std;int n;struct node { int to, next;// int value ,from,};node edge[maxm];int box[maxn];//box[i] 節點i下第一條邊int ecnt;//邊的個數void _make_map(int from, int to) { edge[ecnt].to = to;//to 節點 edge[ecnt].next = box[from];//同節點下該邊下一條邊 box[from] = ecnt++;// 節點from的第一條邊}void make_map(int from, int to)//雙向邊{ _make_map(from, to); _make_map(to, from);}int main() { while (scanf("%d", &n) != EOF) { ecnt = 0; int i; int u[100], v[100]; // 儲存邊 for (i = 0; i < n; i++) { scanf("%d%d", &u[i], &v[i]); make_map(u[i], v[i]); } // 遍歷父節點為u的所有邊// for(int i=box[u];i+1;i=edge[i].next)// {// int v=edge[i].to;// if(p==v)continue;// } } return 0;}