国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖

這篇具有很好參考價值的文章主要介紹了【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

by.Qin3Yu

請注意:嚴格來說,圖不是一種數(shù)據(jù)結(jié)構(gòu),而是一種抽象數(shù)據(jù)類型。但為了保證知識點之間的相關(guān)性,也將其列入數(shù)據(jù)結(jié)構(gòu)專欄。

本文需要讀者掌握順序表和單鏈表的操作基礎(chǔ),若需學(xué)習(xí),可參閱我的往期文章:
【C++數(shù)據(jù)結(jié)構(gòu) | 順序表速通】使用順序表完成簡單的成績管理系統(tǒng).by.Qin3Yu
【C++數(shù)據(jù)結(jié)構(gòu) | 單鏈表速通】使用單鏈表完成數(shù)據(jù)的輸入和返回元素之和.by.Qin3Yu

本文將不會涉及圖的具體操作案例,若需閱讀案例,可參閱我的往期文章:
【經(jīng)典案例 | 騎士之旅】回溯算法解決經(jīng)典國際象棋騎士之旅問題 | 詳解Knight’s Tour Problem數(shù)學(xué)問題.by.Qin3Yu
【算法詳解 | 最小生成樹 I 】詳解最小生成樹prim算法(拓展kruskal算法) | 電力網(wǎng)絡(luò)最短路徑覆蓋問題.by.Qin3Yu

文中所有代碼默認已使用std命名空間且已導(dǎo)入部分頭文件

#include <iostream>
#include <vector>
using namespace std;

概念速覽

圖的基本概念及定義

  • 圖(Graph) 是由一組頂點和連接這些節(jié)點的組成的數(shù)據(jù)類型,可以將圖抽象的看作為一些島嶼和連接這些島嶼的小橋,頂點就是島嶼,邊就是橋。點和邊是構(gòu)成圖的基本元素,如下所示就是一個圖:

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 注意:大多數(shù)數(shù)據(jù)結(jié)構(gòu)和類型都可以為空,但是 圖不可以為空 。

向性與連通性

  • 在圖中,如果 所有的邊 都沒有方向限制,均可以雙向通行,則稱為無向圖。相反,如果 所有的邊 都具有方向限制,每條邊只提供單向通行,則稱為無向圖。

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 無向圖 中,如果圖上任意一對點都有路徑連通(可以穿過其他點),則稱為 連通圖 。如果在 有向圖 中,如果圖上任意一對點都有路徑連通且 雙向連通 ,則稱為 強連通圖

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表
【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

特別注意:有向圖需雙向連通才算作強連通圖!

加權(quán)圖與邊權(quán)

  • 在很多圖中,每條邊都有指定的長度,且長度各不相同。在圖論中,邊的長度叫做 邊權(quán) ,每條邊都有權(quán)值的圖叫做 加權(quán)圖 ,例如在下圖中,圖書館到體育室的邊的長度為1200m,則我們可以說圖書館-體育室的 邊權(quán) 為1200:

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

稀疏圖與稠密圖

  • 在圖中,邊數(shù)明顯少于點數(shù) 的圖叫做稀疏圖,相反,點數(shù)明顯少于邊數(shù) 的圖叫做稠密圖。需要注意,稀疏圖與稠密圖只是一個相對而言的概念,沒有明確的數(shù)值指明邊和點之間的數(shù)量界限。

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

度與入度出度

  • 在無向圖中,某個點的 度指的是與這個點相連的邊的數(shù)量。如圖所示,我們可以說 A點 的度為 2B點 的度為 1

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 在有向圖中,某個點的 入度是指與該點相連,且終點為該點 的邊的數(shù)量。相反,某個點的 出度是指與該點相連,且起點為該點 的邊的數(shù)量。如圖所示,我們可以說 A點 的出度為 2,入度為 1

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

一個明確的圖應(yīng)具有以下特征:

1. 無重復(fù)邊: 在無向圖中,每對點之間只有唯一的一條邊連接,不存在一對點之間有兩條邊的情況;
2. 明確向性: 大多數(shù)情況下的圖要么是有向圖,要么是無向圖,很少存在同一張圖中某些邊有向同時某些邊無相(混合圖)的情況;
3. 無自環(huán): 在圖中不存在連接一個節(jié)點到其自身的邊。
【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表


圖的存儲與表示

圖根據(jù)稀疏和稠密的特征有兩種常用的存儲方式,分別是鄰接矩陣和鄰接表。

鄰接矩陣

  • 在鄰接矩陣中,我們使用一個二維數(shù)組(矩陣)來表示圖,如下圖中有6個點,則我們需要畫一個6×6的矩陣,且默認表內(nèi)元素全部為0:

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

int n = 6;  // 點數(shù)
vector<vector<int>> Graph(n, vector<int>(n, 0));  // 初始化一個n×n的矩陣,默認為0
  • 如圖,點1點0 之間有一條邊連接,則我們在 (1,0) 位置填入 1 ,表示 點1點0 之間有邊:

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 同理,點1點2 之間有一條邊連接,則我們在 (2,1) 位置填入 1 ,表示 點2點1 之間有邊:

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 一直重復(fù)這個過程,我們便可以得出以下結(jié)果:

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 但同時根據(jù)無向表雙向通行的特性,點0點1 有邊,那么反過來 點1點0 也有邊,所以我們還需要反過來再重復(fù)一次,將剩下的半部分補齊。如下圖所示,可以看到 無向圖的鄰接矩陣呈對角線對稱 ,所以我們在使用程序輸入時可以直接 對稱輸入

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

for (int i = 0; i < n; i++) {
    int x, y;
    cin >> x >> y;
    Graph[x][y] = 1;
    Graph[y][x] = 1;  // 對稱輸入
}
  • 但如果圖是有向圖,則只能逐個輸入:
int m = ...  // 邊數(shù)
for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    Graph[x][y] = 1;
}
  • 從上面的案例可以看出鄰接矩陣需要維護一個n×n的二維數(shù)組,且使用1來標記邊的位置,所以不難看出,假如圖是點很多而邊很少的稀疏圖,則會浪費大量的內(nèi)存。所以,鄰接矩陣更適合表示稠密圖和無向圖 。

鄰接表

  • 除了用矩陣外,我們還可以用多鏈表來表示圖。在鏈表中,每個節(jié)點具有兩個成員,一個為該節(jié)點的值,另一個為指向下一個節(jié)點的指針,我們先初始化一些鏈表,讓每個點都有一串對應(yīng)的鏈表來表示自己與其他點的相連關(guān)系:

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

//定義單鏈表
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

const int n = 6;  // 節(jié)點數(shù)
const int m = 7;  // 邊數(shù)
ListNode* Graph[n];  // 聲明多個鏈表
  • 如圖,點0點1 相連,則我們在 0號鏈表 上增加節(jié)點,節(jié)點值為 1,代表 點1

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 然后再看 點1,點1點2 相連,則我們在 1號鏈表 上增加節(jié)點,節(jié)點值為 2,代表 點2

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 不斷重復(fù)此過程,我們便可以得出如下的結(jié)果,這便是圖的鄰接表,與鄰接矩陣相比,鄰接表不需要維護一個很大的矩陣來表示邊與邊的關(guān)系,但是構(gòu)造起來也相對復(fù)雜。因此,鄰接表更適合表示稀疏圖和有向圖:

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

  • 在具體的代碼實現(xiàn)中,我們只需要將節(jié)點鏈接到鏈表后面即可,具體操作請參閱我的往期單鏈表教程,本文不再贅述:
for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;

    ListNode* newNode = new ListNode(v);
    newNode->next = Graph[u];
    Graph[u] = newNode;

}
  • 但要注意,在無向圖中邊是雙向互通的,只要 u 有一條路徑指向 v,那么相反 v 也有一條路徑指向 u。因此,對于無向圖,我們需要對稱輸入
for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;

    ListNode* newNode1 = new ListNode(v);
    newNode1->next = Graph[u];
    Graph[u] = newNode1;

    ListNode* newNode2 = new ListNode(u);
    newNode2->next = Graph[v];
    Graph[v] = newNode2;

}
至此圖的相關(guān)內(nèi)容已講解完畢,具體案例可以參閱我的往期文章(如文章開頭所示)(=
如需提問,可以在評論區(qū)留言或私信(=

完整代碼展示

無向圖鄰接矩陣

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

代碼

#include <iostream>
#include <vector>
using namespace std;

int n = 6;  // 點數(shù)
int m = 7;  // 邊數(shù)
vector<vector<int>> Graph(n, vector<int>(n, 0));

int main() {

    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        Graph[u][v] = 1;
        Graph[v][u] = 1;
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            cout << Graph[i][j] << " ";
        cout << endl;
    }

    return 0;
}

參考輸入

0 1
1 2
2 3
3 4
4 0
2 5
3 5

參考輸出

0 1 0 0 1 0
1 0 1 0 0 0
0 1 0 1 0 1
0 0 1 0 1 1
1 0 0 1 0 0
0 0 1 1 0 0

有向圖鄰接矩陣

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

代碼

#include <iostream>
#include <vector>
using namespace std;

int n = 6;  // 點數(shù)
int m = 7;  // 邊數(shù)
vector<vector<int>> Graph(n, vector<int>(n, 0));

int main() {

    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        Graph[u][v] = 1;
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            cout << Graph[i][j] << " ";
        cout << endl;
    }
    
    return 0;
}

參考輸入

0 1
1 2
2 3
3 4
4 0
3 5
5 3

參考輸出

0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 1
1 0 0 0 0 0
0 0 0 1 0 0

無向圖鄰接表

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

代碼

#include <iostream>
using namespace std;

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

const int n = 6;  // 節(jié)點數(shù)
const int m = 7;  // 邊數(shù)
ListNode* Graph[n];

int main() {

    for (int i = 0; i < n; i++)
        Graph[i] = nullptr;

    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;

        ListNode* newNode1 = new ListNode(v);
        newNode1->next = Graph[u];
        Graph[u] = newNode1;

        ListNode* newNode2 = new ListNode(u);
        newNode2->next = Graph[v];
        Graph[v] = newNode2;
    }

    for (int i = 0; i < n; i++) {
        cout << i << ": ";
        ListNode* curr = Graph[i];
        while (curr != nullptr) {
            cout << curr->val << " ";
            curr = curr->next;
        }
        cout << endl;
    }

    return 0;
}

參考輸入

0 1
1 2
2 3
3 4
4 0
2 5
3 5

參考輸出

0: 4 1
1: 2 0
2: 5 3 1
3: 5 4 2
4: 0 3
5: 3 2

有向圖鄰接表

【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖,數(shù)據(jù)結(jié)構(gòu)速通,c++,數(shù)據(jù)結(jié)構(gòu),圖論,算法,c語言,鏈表

代碼

#include <iostream>
using namespace std;

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

const int n = 6;  // 節(jié)點數(shù)
const int m = 7;  // 邊數(shù)
ListNode* Graph[n];

int main() {

    for (int i = 0; i < n; i++)
        Graph[i] = nullptr;

    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;

        ListNode* newNode = new ListNode(v);

        newNode->next = Graph[u];
        Graph[u] = newNode;
    }

    for (int i = 0; i < n; i++) {
        cout << i << ": ";
        ListNode* curr = Graph[i];
        while (curr != nullptr) {
            cout << curr->val << " ";
            curr = curr->next;
        }
        cout << endl;
    }

    return 0;
}

參考輸入

0 1
1 2
2 3
3 4
4 0
3 5
5 3

參考輸出

0: 1
1: 2
2: 3
3: 5 4
4: 0
5: 3

感謝您的觀看(=

by.Qin3Yu文章來源地址http://www.zghlxwxcb.cn/news/detail-755385.html

到了這里,關(guān)于【C++數(shù)據(jù)結(jié)構(gòu) | 圖速通】10分鐘掌握鄰接矩陣 & 鄰接表 | 快速掌握圖論基礎(chǔ) | 快速上手抽象數(shù)據(jù)類型圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】五分鐘自測主干知識(四)

    【數(shù)據(jù)結(jié)構(gòu)】五分鐘自測主干知識(四)

    線性數(shù)據(jù)結(jié)構(gòu)中有兩個典型代表——棧和隊列。它們的邏輯結(jié)構(gòu)和線性表一致,不同之處在于其操作的特殊性:棧的插入和刪除操作只能在線性表的一端進行,并且元素遵循“后進先出”的原則 今天我們先來講述這個經(jīng)典概念:“?!?3.1棧的基本概念 棧 (Stack)是一種線性

    2024年03月19日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu) 隊列(一篇基本掌握)

    數(shù)據(jù)結(jié)構(gòu) 隊列(一篇基本掌握)

    ????????任其事必圖其效;欲責(zé)其效,必盡其方。——歐陽修;本篇文章主要寫的是什么是隊列、以及隊列是由什么組成的和這些組成接口的代碼實現(xiàn)過程。( 大多細節(jié)的實現(xiàn)過程以注釋的方式展示請注意查看 ) ? ?話不多說安全帶系好,發(fā)車啦 (建議電腦觀看) 。 附

    2024年02月12日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu) 棧(一篇基本掌握)

    數(shù)據(jù)結(jié)構(gòu) 棧(一篇基本掌握)

    ????????時間就是生命,時間就是速度,時間就是氣力。——郭沫若;本章繼續(xù)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),本章主要講了什么是棧以及棧的基本功能和實現(xiàn)方法。 ? ?話不多說安全帶系好,發(fā)車啦 (建議電腦觀看) 。 附:紅色,部分為重點部分;藍顏色為需要記憶的部分(不是死記

    2024年02月12日
    瀏覽(20)
  • 三分鐘了解Redis HyperLogLog 數(shù)據(jù)結(jié)構(gòu)

    三分鐘了解Redis HyperLogLog 數(shù)據(jù)結(jié)構(gòu)

    HyperLogLog算法是一種非常有用的數(shù)據(jù)結(jié)構(gòu)和算法,它可以在很小的空間內(nèi)估計一個集合中不重復(fù)元素的數(shù)量,具有很高的效率和精度,非常適合用于大數(shù)據(jù)量的計數(shù)場景。在使用時,需要注意HyperLogLog算法的概率特性,以及對誤差的容忍度,才能得到最好的效果。 HyperLogLog是一

    2024年02月16日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu) 二叉樹(一篇基本掌握)

    數(shù)據(jù)結(jié)構(gòu) 二叉樹(一篇基本掌握)

    緒論 ????????雄關(guān)漫道真如鐵,而今邁步從頭越。 本章將開始學(xué)習(xí)二叉樹(全文共一萬兩千字),二叉樹相較于前面的數(shù)據(jù)結(jié)構(gòu)來說難度會有許多的攀升,但只要跟著本篇博客深入的學(xué)習(xí)也可以基本的掌握基礎(chǔ)二叉樹。 ? ?話不多說安全帶系好,發(fā)車啦 (建議電腦觀看)

    2024年02月14日
    瀏覽(22)
  • 有哪些數(shù)據(jù)結(jié)構(gòu)與算法是程序員必須要掌握的?——“數(shù)據(jù)結(jié)構(gòu)與算法”

    有哪些數(shù)據(jù)結(jié)構(gòu)與算法是程序員必須要掌握的?——“數(shù)據(jù)結(jié)構(gòu)與算法”

    作為IT程序員,學(xué)習(xí)算法的原因主要有以下幾點: 提升問題解決能力:算法可以幫助程序員分析、優(yōu)化和解決復(fù)雜問題。了解算法原理和實現(xiàn)方式將有助于程序員更快地找到合適的解決方案。這對于解決實際工作中的問題是非常有幫助的。 提高代碼效率:通過學(xué)習(xí)不同的算法

    2024年02月13日
    瀏覽(29)
  • 5分鐘學(xué)會數(shù)據(jù)結(jié)構(gòu)中的線性鏈表

    5分鐘學(xué)會數(shù)據(jù)結(jié)構(gòu)中的線性鏈表

    除了一些算法之外,我們還要掌握一些常見的數(shù)據(jù)結(jié)構(gòu),比如 數(shù)組、鏈表、棧、隊列、樹等結(jié)構(gòu)。 在之前的文章中,已經(jīng)帶著大家學(xué)習(xí)了Java里的一維數(shù)組和多維數(shù)組,所以對此我就不再細述了。 接下來我會給大家講解一下線性結(jié)構(gòu)中的鏈表,希望你能喜歡哦。 全文大約【

    2024年02月08日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】--- 幾分鐘走進棧和隊列(詳解-上)

    【數(shù)據(jù)結(jié)構(gòu)】--- 幾分鐘走進棧和隊列(詳解-上)

    ?? 個人主頁 :@小沈熬夜禿頭中???? ?? 小編介紹 :歡迎來到我的亂七八糟小星球?? ?? 專欄 :數(shù)據(jù)結(jié)構(gòu) ?? 本章內(nèi)容 :[數(shù)據(jù)結(jié)構(gòu)]—棧和隊列 送給各位 ??:一事無成也代表萬事皆有可能 歡迎 評論?? +點贊?? +收藏?? +關(guān)注??哦~ 提示:以下是本篇文章正文內(nèi)容,

    2024年02月06日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)--》從線性表說起,掌握常用基礎(chǔ)算法

    數(shù)據(jù)結(jié)構(gòu)--》從線性表說起,掌握常用基礎(chǔ)算法

    目錄 初識線性表 線性表的基本操作 順序表的定義 順序表的基本操作 單鏈表的定義 單鏈表的基本操作? 雙鏈表的介紹 循環(huán)鏈表的介紹 靜態(tài)鏈表的介紹 線性表是具有 相同 數(shù)據(jù)類型的 n (n0) 個數(shù)據(jù)元素的 有限序列 ,其中n為 表長 ,當(dāng)n=0時線性表是一個 空表 。若用L命名線性

    2024年02月09日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】掌握順序棧:從入門到實踐

    【數(shù)據(jù)結(jié)構(gòu)與算法】掌握順序棧:從入門到實踐

    ?? ??博客主頁:青竹霧色間. ??系列專欄:數(shù)據(jù)結(jié)構(gòu)與算法 ??博客制作不易歡迎各位??點贊+?收藏+?關(guān)注 目錄 前言 順序棧的實現(xiàn) 初始化棧 判斷棧空 判斷棧滿 入(進)棧 出棧 獲取棧頂元素 示例代碼 順序棧的應(yīng)用前景 當(dāng)你學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法時,順序棧(Sequential

    2024年02月08日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包