• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-91  評論-137  文章-0  trackbacks-0
              1 #include <iostream>
              2 
              3 template <typename _Type>
              4 class HashTable
              5 {
              6 public:
              7     HashTable(int Length)
              8     {
              9         Element = new _Type[Length];
             10         for(int i=0;i<Length;i++)
             11             Element[i] = -1;
             12         this->Length = Length;
             13         Count = 0;
             14     }
             15     
             16     ~HashTable()
             17     {
             18         delete[] Element;
             19     }
             20     
             21     // Hash函數(shù)
             22     virtual int Hash(_Type Data)
             23     {
             24         return Data % Length;
             25     }
             26     
             27     // 再散列法
             28     virtual int ReHash(int Index,int Count)
             29     {
             30         return (Index + Count) % Length;
             31     }
             32     
             33     // 查找某個元素是否在表中
             34     virtual bool SerachHash(_Type Data,int& Index)
             35     {
             36         Index = Hash(Data);
             37         int Count = 0;
             38         while(Element[Index] != -1 && Element[Index] != Data)
             39             Index = ReHash(Index,++Count);
             40         return Data == Element[Index] ? true : false;
             41     }
             42     
             43     virtual int SerachHash(_Type Data)
             44     {
             45         int Index = 0;
             46         if(SerachHash(Data,Index)) return Index;
             47         else return -1;
             48     }
             49     
             50     // 插入元素
             51     bool InsertHash(_Type Data)
             52     {
             53         int Index = 0;
             54         if(Count < Length && !SerachHash(Data,Index))
             55         {
             56             Element[Index] = Data;
             57             Count++;
             58             return true;
             59         }
             60         return false;
             61     }
             62     
             63     // 設(shè)置Hash表長度
             64     void SetLength(int Length)
             65     {
             66         delete[] Element;
             67         Element = new _Type[Length];
             68         for(int i=0;i<Length;i++)
             69             Element[i] = -1;
             70         this->Length = Length;
             71     }
             72     
             73     // 刪除某個元素
             74     void Remove(_Type Data)
             75     {
             76         int Index = SerachHash(Data);
             77         if(Index != -1)
             78         {
             79             Element[Index] = -1;
             80             Count--;
             81         }
             82     }
             83     
             84     // 刪除所有元素
             85     void RemoveAll()
             86     {
             87         for(int i=0;i<Length;i++)
             88             Element[i] = -1;
             89         Count = 0;
             90     }
             91     
             92     void Print()
             93     {
             94         for(int i=0;i<Length;i++)
             95             printf("%d ",Element[i]);
             96         printf("\n");
             97     }
             98 protected:
             99     _Type* Element;        // Hash表
            100     int Length;                // Hash表大小
            101     int Count;                // Hash表當(dāng)前大小
            102 };
            103 
            104 void main()
            105 {
            106     HashTable<int> H(10);
            107     printf("Hash Length(10) Test:\n");
            108     int Array[6= {49,38,65,97,13,49};
            109     for(int i=0;i<6;i++)
            110         printf("%d\n",H.InsertHash(Array[i]));
            111     H.Print();
            112     printf("Find(97):%d\n",H.SerachHash(97));
            113     printf("Find(49):%d\n",H.SerachHash(49));
            114     H.RemoveAll();
            115     H.SetLength(30);
            116     printf("Hash Length(30) Test:\n");
            117     for(int i=0;i<6;i++)
            118         printf("%d\n",H.InsertHash(Array[i]));
            119     H.Print();
            120     printf("Find(97):%d\n",H.SerachHash(97));
            121     printf("Find(49):%d\n",H.SerachHash(49));
            122     system("pause");
            123 }


            運(yùn)行結(jié)果:


            由上圖可知給定的Hash表長度越長越不容易產(chǎn)生沖突,性能也就越高.

            posted on 2010-08-10 23:37 lwch 閱讀(559) 評論(1)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)

            評論:
            # re: 簡單的Hash表實(shí)現(xiàn) 2013-05-03 15:57 | tb
            這個比較有用吧   回復(fù)  更多評論
              
            久久久久亚洲?V成人无码| 99久久免费国产精品特黄| 精品久久人妻av中文字幕| 99久久国语露脸精品国产| 亚洲精品高清国产一久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 国产精品gz久久久| 久久亚洲精品成人av无码网站| 久久久久久免费一区二区三区| 欧美性大战久久久久久| 久久精品国产亚洲精品2020| 国产精品伊人久久伊人电影| 99久久国产综合精品女同图片| 久久免费视频观看| 亚洲精品无码久久久久sm| 狠狠人妻久久久久久综合| 99久久香蕉国产线看观香| 99久久婷婷国产综合精品草原| 国产亚洲精久久久久久无码77777| 99国内精品久久久久久久 | 久久AV无码精品人妻糸列| 久久亚洲AV成人无码国产| 久久国产AVJUST麻豆| 欧美综合天天夜夜久久| 久久亚洲美女精品国产精品| 狠狠色丁香久久婷婷综合蜜芽五月| 免费观看久久精彩视频| 国产精品99精品久久免费| 日韩乱码人妻无码中文字幕久久 | 久久精品国产亚洲av高清漫画| 久久久久久毛片免费看| 一本伊大人香蕉久久网手机| 久久久久久久久无码精品亚洲日韩 | 国产精品久久久久久搜索| 亚洲精品乱码久久久久66| 亚洲国产美女精品久久久久∴| 97精品国产97久久久久久免费 | 亚洲嫩草影院久久精品| 国产精品久久久久久久久鸭| 久久精品国产亚洲AV高清热| 国产精品久久久久国产A级|