• <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函數
             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     // 設置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表當前大小
            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 }


            運行結果:


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

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

            評論:
            # re: 簡單的Hash表實現 2013-05-03 15:57 | tb
            這個比較有用吧   回復  更多評論
              
            麻豆成人久久精品二区三区免费 | 久久久久成人精品无码中文字幕| 日本五月天婷久久网站| 色婷婷综合久久久中文字幕| 欧美亚洲色综久久精品国产| 久久青草国产手机看片福利盒子 | 国产成人久久精品二区三区| 色狠狠久久AV五月综合| 欧美精品一本久久男人的天堂| 青青国产成人久久91网| 久久久久se色偷偷亚洲精品av| 伊人久久精品线影院| 久久香蕉超碰97国产精品| 欧美精品一本久久男人的天堂| 久久久久青草线蕉综合超碰| a高清免费毛片久久| 久久久www免费人成精品| 久久夜色精品国产亚洲| 国产aⅴ激情无码久久| 精品国产乱码久久久久软件| 久久精品嫩草影院| 国产精品99久久久久久人| 中文字幕精品无码久久久久久3D日动漫| 91亚洲国产成人久久精品| 久久免费看黄a级毛片| 久久国产视频99电影| 国产精品无码久久四虎| 蜜臀久久99精品久久久久久小说| 国产精品美女久久福利网站| 久久国产成人午夜AV影院| 开心久久婷婷综合中文字幕| 久久夜色精品国产www| 97精品国产97久久久久久免费| 九九精品99久久久香蕉| 久久国产精品-久久精品| 无码人妻久久一区二区三区免费丨| 亚洲午夜无码久久久久| 亚洲伊人久久精品影院| 久久久久亚洲av无码专区| 久久久一本精品99久久精品88| 亚洲中文字幕无码久久综合网|