Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Hash_table

  1. #1
    Ngày gia nhập
    11 2016
    Bài viết
    14

    Mặc định Hash_table

    #include <iostream>
    #include <string>
    #include <vector>
    using std::string;


    int HashTableSize = 8;
    const int a = 3;


    int SimpleStringHash(const string& key, int range)
    {
    int hash = 0;
    for (int i = 0; i < key.length(); i++)
    {
    hash = (hash * a + key[i]) % range;
    }
    return hash;

    }


    class CHashTable {
    public:
    CHashTable();
    ~CHashTable();


    bool Has(const string& key) const;

    bool Add(const string& key);

    bool Remove(const string& key);


    private:
    struct CHashTableNode {
    string Key;
    CHashTableNode* Next;
    explicit CHashTableNode(const string& key) : Key(key), Next(nullptr) {}
    };

    int count = 0;
    void reHash(int HashTableSize);
    std::vector<CHashTableNode*> table;
    };

    CHashTable::CHashTable() :
    table(HashTableSize, nullptr)
    {
    }

    CHashTable::~CHashTable()
    {
    for (int i = 0; i < static_cast<int>(table.size()); ++i) {
    for (CHashTableNode* node = table[i]; node != nullptr {
    CHashTableNode* next = node->Next;
    delete node;
    node = next;
    }
    }
    }

    void CHashTable::reHash(int HashTableSize)
    {
    HashTableSize = HashTableSize * 2;
    std::vector<CHashTableNode*> newTable(HashTableSize, 0);
    std::swap(newTable, table);
    for (int i = 0; i < newTable.size(); i++)
    {
    table[i] = newTable[i];
    }
    }

    bool CHashTable::Has(const string& key) const
    {
    int hash = SimpleStringHash(key, table.size());
    for (CHashTableNode* node = table[hash]; node != nullptr; node = node->Next) {
    if (node->Key == key) {
    return true;
    }
    }
    return false;
    }

    bool CHashTable::Add(const string& key)
    {
    if (count / HashTableSize >= 0.75)
    reHash(HashTableSize);
    int hash = SimpleStringHash(key, table.size());
    for (CHashTableNode* node = table[hash]; node != nullptr; node = node->Next) {
    if (node->Key == key) {
    return false;
    }
    }

    CHashTableNode* newNode = new CHashTableNode(key);
    newNode->Next = table[hash];
    table[hash] = newNode;
    count++;
    return true;
    }

    bool CHashTable::Remove(const string& key)
    {
    int hash = SimpleStringHash(key, table.size());
    if (table[hash] == nullptr) {
    return false;
    }
    CHashTableNode* node = table[hash];
    if (node->Key == key) {

    table[hash] = node->Next;
    delete node;
    count--;
    return true;
    }
    for (CHashTableNode* nodeNext = node->Next; nodeNext != nullptr; node = nodeNext, nodeNext = nodeNext->Next) {
    if (nodeNext->Key == key) {
    node->Next = nodeNext->Next;
    delete nodeNext;
    count--;
    return true;
    }
    }
    return false;
    }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    09 2016
    Bài viết
    1,009

    Lộn chuồng, đây là dot.NET

    Định dạng cho dễ đọc - bb code, ... trong c# không hấp thụ được code c plus plus

    Phọt mô xa 2016
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn