位資料結構實現

2022-08-05 10:36:16 字數 1229 閱讀 6103

#include

2:
3:

#define n 10000000

4:

#define bitsperword 32

5:

#define shift 5

6:

#define mask 0x1f

7:
8:

int arr[1+n/bitsperword];

9:

/*

10:

整個程式的思想就是:

11:

1.每個整數有32位,那麼它就可以表示32個數,分別對應每bit位為1.

12:

2.然後把10000000個數分為1+n/bitsperword組(相當於有這麼多個桶),每組包含接近32個數。

13:

上面的解釋可能仍不到位,那我們來看具體的函式:

14:

對於set函式,我們可以這樣理解,

15:

arr[i>>shift] |= (1<<(i&mask))可以轉化為

16:

arr[i/32] = arr[i/32] | (1<<(i%32))

17:

i%32必然處於區間[0, 31],那麼1<<(i%32)就是將bit位1向前移動(i%32)位,然後和arr[i/32]相或,因而arr[i/32]的第(i%32)位就為1.

18:

對於test函式,就是上面過程的反過程了。它是用來判斷i個這個數是否存在,即arr[i/32]的相應bit位是否為1.

19:

最後,就做排序了,

20:

for (int i = 0; i < n; i++)

21:

由於[0, n)已經是從小到大排序好的,那麼我們只需判斷每個數是否存在,若存在,就輸出,所以輸出結果也就是排序的了。

22:

23:

*/

24:
25:

void setbit(int i)

26:
29:

void clearbit(int i)

30:
33:
34:

int testbit(int i)

35:

資料結構實現

一 二分法查詢 二分法查詢其實就是折半查詢,一種效率較高的查詢方法。針對有序陣列來查詢的。主要思想是 設查詢的陣列期間為array low,high 1 確定該期間的中間位置k 2 將查詢的值t與array k 比較。若相等,查詢成功返回此位置 否則確定新的查詢區域,繼續二分查詢。區域確定如下 a....

資料結構(一)遞迴 中位數

1 從鍵盤輸入求2的n次方 編寫程式,求2的n次方 mod 5 n為正整數,由使用者輸入,對應每個輸入,輸出乙個整數,求2的n次方 mod 5 的結果 includeusing namespace std int main return count int main struct index of ...

資料結構 實現棧

include include include define node len sizeof node 1 pstack ptop pstack pbottom都指向節點 typedef struct node pnode,node typedef struct stack pstack,stack...