用C++實現高效數據結構和演算法

一、數據結構與演算法C++實現

C++作為面向對象的編程語言,能夠非常好地支持數據結構和演算法的實現。具體實現方法包括:


    //定義一個單鏈表節點
    struct ListNode {
        int val;
        ListNode *next;
        ListNode(int x) : val(x), next(NULL) {}
    };
    
    //定義一個二叉樹節點
    struct TreeNode {
        int val;
        TreeNode *left;
        TreeNode *right;
        TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    
    //定義一個並查集,給予素數的不相交集合實現,以便路徑壓縮和按秩合併。
    class UnionFind {
    public:
        UnionFind(int N): count(N) {
            parent = new int[N];
            rank = new int[N];
            for (int i = 0; i  rank[rootQ]) {
                parent[rootQ] = rootP;
                rank[rootP] += rank[rootQ];
            } else {
                parent[rootP] = rootQ;
                rank[rootQ] += rank[rootP];
            }
            count--;
        }
    
        int getCount() const {
            return count;
        }
    
        ~UnionFind() {
            delete[] parent;
            delete[] rank;
        }
    private:
        int count;
        int* parent;
        int* rank;
    };

上述數據結構的實現,僅是維度其基本結構,更加常用的是在這些基本結構上進行各種演算法操作。例如使用鏈表實現歸併排序:


    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if (!l1) return l2;
        if (!l2) return l1;
        if (l1->val val) {
            l1->next = mergeTwoLists(l1->next, l2);
            return l1;
        } else {
            l2->next = mergeTwoLists(l1, l2->next);
            return l2;
        }
    }
    
    ListNode* mergeKLists(vector& lists) {
        int n = lists.size();
        if (n == 0) return nullptr;
        while (n > 1) {
            int k = (n + 1) / 2;
            for (int i = 0; i < n / 2; ++i) {
                lists[i] = mergeTwoLists(lists[i], lists[i + k]);
            }
            n = k;
        }
        return lists[0];
    }

二、數據結構與演算法實現

根據不同的場景需求,選擇不同的數據結構與演算法實現,能夠更好地提升程序的運行效率。舉例來說,選取下面幾種演算法實現:

1. 雙指針演算法

常見於數組和鏈表的問題中,使用兩個指針解決問題。


ListNode* removeNthFromEnd(ListNode* head, int n) {
    ListNode* dummy = new ListNode(0);
    dummy->next = head;
    ListNode* fast = dummy;
    ListNode* slow = dummy;
    while (n--) fast = fast->next;  //fast先走n步
    while (fast && fast->next) {
        fast = fast->next;
        slow = slow->next;
    }
    ListNode* tmp = slow->next;
    slow->next = slow->next->next;
    delete tmp;
    return dummy->next;
}

2. 排序演算法

能避免線性查找的單次O(N)時間複雜度,主要有快速排序、歸併排序等。


void swap(int& a, int& b) {
    int tmp = a;
    a = b;
    b = tmp;
}

void quickSort(int arr[], int left, int right) {
    if (left >= right) return;
    int pivot = arr[left];
    int l = left + 1;
    int r = right;
    while (l <= r) {
        if (arr[l]  pivot) {
            swap(arr[l], arr[r]);
            l++;
            r--;
        }
        if (arr[l] >= pivot) l++;
        if (arr[r] <= pivot) r--;
    }
    swap(arr[left], arr[r]);
    quickSort(arr, left, r - 1);
    quickSort(arr, r + 1, right);
}

3. 搜索演算法

能夠優化遍歷的演算法,主要有深度優先搜索、廣度優先搜索等。


void dfs(TreeNode* root, vector& res) {
    if (root == nullptr) return;
    res.push_back(root->val);
    dfs(root->left, res);
    dfs(root->right, res);
}

vector preorderTraversal(TreeNode* root) {
    vector res;
    dfs(root, res);
    return res;
}

三、總結

本文從數據結構與演算法C++實現、數據結構與演算法實現兩個方面,講解了用C++實現高效數據結構和演算法的方法。在實現中,使用到了面向對象編程思想、各種常見的搜索、排序、計算等演算法的實現,減少了多重循環,提高了代碼運行效率。希望能夠對讀者的C++程序設計和演算法實現能有所幫助。

原創文章,作者:BUGV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138087.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BUGV的頭像BUGV
上一篇 2024-10-04 00:18
下一篇 2024-10-04 00:18

相關推薦

  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python實現爬樓梯演算法

    本文介紹使用Python實現爬樓梯演算法,該演算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Harris角點檢測演算法原理與實現

    本文將從多個方面對Harris角點檢測演算法進行詳細的闡述,包括演算法原理、實現步驟、代碼實現等。 一、Harris角點檢測演算法原理 Harris角點檢測演算法是一種經典的計算機視覺演算法…

    編程 2025-04-29
  • 數據結構與演算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與演算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序演算法、字元串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • 瘦臉演算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉演算法 Python 實現的原理和方法,包括該演算法的意義、流程、代碼實現、優化等內容。 一、演算法意義 隨著科技的發展,瘦臉演算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • 神經網路BP演算法原理

    本文將從多個方面對神經網路BP演算法原理進行詳細闡述,並給出完整的代碼示例。 一、BP演算法簡介 BP演算法是一種常用的神經網路訓練演算法,其全稱為反向傳播演算法。BP演算法的基本思想是通過正…

    編程 2025-04-29
  • 數據結構學生成績管理系統

    在現代教育中,學生成績的管理已經成為了一個不可或缺的部分。藉助數據結構,一個高效、可靠的學生成績管理系統可以被輕鬆實現。 一、數據結構的選擇 在構建學生成績管理系統時,選擇合適的數…

    編程 2025-04-29
  • 粒子群演算法Python的介紹和實現

    本文將介紹粒子群演算法的原理和Python實現方法,將從以下幾個方面進行詳細闡述。 一、粒子群演算法的原理 粒子群演算法(Particle Swarm Optimization, PSO…

    編程 2025-04-29
  • Python回歸演算法算例

    本文將從以下幾個方面對Python回歸演算法算例進行詳細闡述。 一、回歸演算法簡介 回歸演算法是數據分析中的一種重要方法,主要用於預測未來或進行趨勢分析,通過對歷史數據的學習和分析,建立…

    編程 2025-04-28

發表回復

登錄後才能評論