鏈式前向星

鏈式前向星

鏈式前向星是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;}

相關詞條

熱門詞條

聯絡我們