• <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ù)  更多評論
              
            久久精品99无色码中文字幕| 亚洲AV无一区二区三区久久| 99re这里只有精品热久久| 久久亚洲电影| 深夜久久AAAAA级毛片免费看| 一本色道久久88加勒比—综合| 1000部精品久久久久久久久| 99久久精品免费看国产一区二区三区 | 欧美激情精品久久久久久| 精品久久久久中文字幕一区| 99久久免费只有精品国产| 久久香蕉一级毛片| 亚洲综合精品香蕉久久网97| 91精品国产高清久久久久久国产嫩草| 91视频国产91久久久| 天天久久狠狠色综合| 久久男人中文字幕资源站| 色99久久久久高潮综合影院 | 日本精品久久久中文字幕| 中文字幕一区二区三区久久网站 | 久久WWW免费人成一看片| 亚洲伊人久久精品影院| 久久99国内精品自在现线| 伊人久久综合热线大杳蕉下载| 久久久WWW成人免费精品| 午夜精品久久久久久久无码| 久久久久久夜精品精品免费啦| 国产亚洲欧美成人久久片| 理论片午午伦夜理片久久 | AV无码久久久久不卡蜜桃| 成人精品一区二区久久久| 久久笫一福利免费导航 | 一本大道久久香蕉成人网| 久久久久久久久无码精品亚洲日韩| 秋霞久久国产精品电影院| 亚洲午夜福利精品久久| 国产午夜久久影院| 久久精品国产久精国产一老狼| 久久久久久a亚洲欧洲aⅴ| 久久婷婷是五月综合色狠狠| 日本道色综合久久影院|