首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 學院實戰:Boost 容器、線性表與哈希表手寫實現

     編輯:關於C++

一、Boost 库安裝與 array 示例

Boost 是 C++ 準標準庫,安裝後可直接使用 boost::array 等固定大小容器:

#include 
#include 
using namespace std;

int main() {
    boost::array arr = {1,2,3,4,5,6,7,8,9,10};
    for (auto it = arr.begin(); it != arr.end(); ++it)
        cout << *it << endl;
    return 0;
}

二、線性表順序存儲:手寫動態數組 MyVector

1. 設計要點

  • 模板類 myvector 封裝動態數組。
  • 成員:T* p(數據指針)、n(容量)、realn(實際大小)。
  • 實現 push_back、find、change、del、insert、operator[]、show 等接口。
  • 擴容策略:每次 +1 分配新內存、拷貝、釋放舊內存(教學簡化,實際常用倍增)。

2. 關鍵實現片段

template 
void myvector::push_back(T val) {
    if (!p) { p = new T; *p = val; realn = n = 1; }
    else {
        T* tmp = new T[n + 1];
        copy(p, p + n, tmp);
        tmp[n] = val;
        delete[] p; p = tmp;
        ++realn; ++n;
    }
}

3. 測試主程序

演示 int、double、char 實例化,以及巢狀向量 myvector*> 用法。

三、線性表鏈式存儲:單向鏈表 List

1. 節點與鏈表類

template  class Node { public: T t; Node* pNext; };
template  class List {
    Node* pHead;
    // add, show, find, change, getnum, deletet, sort, deletesame, clear, rev, insert, merge
};

2. 核心操作

  • add:尾插法。
  • sort:冒泡排序交換節點數據(教學演示,實際應用合併排序)。
  • deletesame:有序鏈表去重。
  • rev:迭代反轉鏈表。
  • merge:尾部連接另一鏈表。

3. 測試用例

包含去重、排序、反轉、插入、合併、清空等完整驗證流程。

四、哈希存儲:開放定址法簡易實現

  • hashnode 存儲 key、value、cn(查找次數)。
  • Hash 類:固定大小 10,哈希函數 key % n。
  • init 批量構建,find 直接定位,isin 驗證键值對。
  • 注:未處理衝突,僅作教學演示。

五、總結

本文從庫使用到手寫容器,涵蓋順序表、鏈表、哈希表三大基礎結構的 C++ 模板實現,適合數據結構入門鞏固。代碼雖簡略但結構清晰,可作為進一步優化(擴容策略、迭代器、衝突處理、智能指針管理)的基礎框架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved