• <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 閱讀(565) 評論(1)  編輯 收藏 引用 所屬分類: 數據結構

            評論:
            # re: 簡單的Hash表實現 2013-05-03 15:57 | tb
            這個比較有用吧   回復  更多評論
              
            久久国产精品免费| 成人资源影音先锋久久资源网| 九九99精品久久久久久| 久久综合丝袜日本网| 久久96国产精品久久久| 91精品免费久久久久久久久| 国产高清美女一级a毛片久久w| 亚洲AⅤ优女AV综合久久久| 伊人久久大香线蕉亚洲五月天| 国产成人无码久久久精品一| 久久国产精品一区| 亚洲香蕉网久久综合影视| 91精品国产高清久久久久久国产嫩草 | 狠狠人妻久久久久久综合| 精品国产日韩久久亚洲| 国产亚洲婷婷香蕉久久精品| 午夜视频久久久久一区| 久久精品国产99国产精偷| 久久人妻无码中文字幕| 久久91这里精品国产2020| 久久国产精品77777| 亚洲国产成人久久综合一区77| 国内精品伊人久久久久AV影院| 精品伊人久久久| 亚洲第一永久AV网站久久精品男人的天堂AV | 成人精品一区二区久久久| 久久亚洲私人国产精品| 亚洲欧美精品一区久久中文字幕 | 亚洲香蕉网久久综合影视| 久久精品国产亚洲7777| 亚洲国产精品久久66| 成人免费网站久久久| 日本人妻丰满熟妇久久久久久| 狠狠色丁香久久婷婷综合蜜芽五月| 国产毛片久久久久久国产毛片| 久久国产亚洲精品无码| 色偷偷久久一区二区三区| 国产69精品久久久久9999APGF| 久久夜色精品国产亚洲| 伊人久久无码中文字幕| 亚洲综合精品香蕉久久网|