可擴散列–可擴散列標頭檔C語言

來源:互聯網
上載者:User

  我真夠鬱悶,這麼久沒有更新部落格.罪過,罪過...

  寫這個可擴散列,我寫出來的這個完全是個模型,限制較多,局限性也很強,大概32:1.呵呵.不過,儘管如此,拿來練手或者之前沒有寫過這個東西的朋友看到的話,還是很有協助的.

  大概介紹下吧,不詳談了.本來想吹一頓的,無奈寫到現在,感覺很垃圾.於是不好意思大吹特吹了.

  資料類型,無符號8位整數.對255以上的資料無效,想弄成負數要做的改動並不多.無奈不想再多耽擱了.

  支援,初始化,插入,尋找,刪除,遍曆,清空.還算齊全的功能.

  介紹到這裡吧,主要是啊,完全就是在書上看到的兩頁而已,自己寫出來,很了不起了啊.沒人指導我,網上也沒這個東西,哎,我還真是個天才.

  雖然,工作很難落實,很難照著我的想法前進,無奈,該做的還是要做下去.辦法也還是要繼續想,加油吧.不然怎麼辦呢.

  現在心情反而平靜了,代碼沒做太多的最佳化.貼出來.

/*extendible_hashing.h-- 可擴散列標頭檔*/<br />#define NO 0<br />#define YES 1<br />#define M 4<br />#define LENTH 8</p><p>/*資料類型定義*/</p><p>typedef unsigned char Item ;/*資料*/<br />typedef struct unit<br />{<br />Item * array ;/*資料數組*/<br />char sub ;/*使用中表元的數量*/<br />} Unit ;/*資料單元*/<br />typedef struct subdirectories<br />{<br />Unit * point ;/*指向資料單元的指標*/<br />char point_to_itself ;/*標記是否指向的其本身的資料空間*/<br />char byte_index ;/*位索引值*/<br />} Subdirectories ;/*子目錄*/<br />typedef struct table<br />{<br />Subdirectories * directory ;/*目錄(子目錄數組)*/<br />char directory_size ;/*目錄大小*/<br />char index_digit ;/*索引位元*/<br />char item_digit ;/*資料位元數*/<br />char array_size ;/*資料數組大小*/<br />} * Table ;</p><p>/*說明:由於手裡沒有這種資料類型的模型, 算是自己根據要求創造*/<br />/*將資料類型限制為char類型.有符號8位二進位,這樣利於操作*/</p><p>/*介面函式宣告*/</p><p>/*操作:根據二個輸入資料產生一個數值並返回*/<br />/*操作前:pitem 指向指定資料, constant 是被移位的數值*/<br />/*操作後:產生一個數值並返回*/<br />int Hash (const Item * const pitem, const char constant) ;</p><p>/*操作:建立並初始化一個可擴散列表*/<br />/*操作前:ptable 指向一個可擴散列表*/<br />/*操作後:如果記憶體配置成功, 建立該可擴散列表, 目錄大小初始化為4, 索引位元初始化為2, 資料數組大小初始化為4, 返回1; 否則返回0*/<br />int InitializeTable (Table * const ptable) ;</p><p>/*操作:向可擴散列表中添加一個元素*/<br />/*操作前:ptable 指向一個已初始化的可擴散列表, pitem 指向指定的資料*/<br />/*操作後:如果未重複添加, 如果記憶體配置成功, 將指定的資料添加到可擴散列表中, 返回1; 否則返回0*/<br />int Insert (const Table * const ptable, const Item * const pitem) ;</p><p>/*操作:尋找並返回可擴散列表中的一個指定資料*/<br />/*操作前:ptable 指向一個已初始化的可擴散列表, pitem 指向指定的資料*/<br />/*操作後:如果找到, 返回1; 否則返回0*/<br />int Find (const Table * const ptable, const Item * const pitem) ;</p><p>/*操作:從可擴散列表目錄的低索引向高索引依次將一個函數作用於point指標指向其自身資料空間的的子目錄*/<br />/*操作前:ptable 指向一個已初始化的可擴散列表, pfun 指向一個沒有傳回值, 接受一個Subdirectories型別參數的函數*/<br />/*操作後:從可擴散列表目錄的低索引向高索引依次將一個函數作用於point指標指向其自身資料空間的的子目錄*/<br />void Traversal (const Table * const ptable, void (* pfun) (const Subdirectories subdirectories)) ;</p><p>/*操作:從可擴散列表中刪除一個指定資料*/<br />/*操作前:ptable 指向一個已初始化的可擴散列表, pitem 是準備刪除的資料*/<br />/*操作後:如果找到該資料, 將該資料從可擴散列表中刪除, 返回1; 否則返回0*/<br />int Delete (const Table * const ptable, const Item * const pitem) ;</p><p>/*操作:清空可擴散列表佔用的記憶體空間*/<br />/*操作前:pteble 指向一個已初始化的可擴散列表*/<br />/*操作後:該可擴散列表佔用的記憶體空間被釋放*/<br />void Release (const Table * const ptable) ;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.