程式設計珠璣 第十三章 生成乙個隨機整數的有序集合

2021-06-03 23:13:25 字數 1467 閱讀 6346

題目:生成乙個隨機整數的有序集合

1 線性結構

陣列  鍊錶

2 二分搜尋樹

3 位向量

#include using namespace std;

enum ;

class intsetbitvec

private:

int n,hi,*x;

void set(int i)

void clr(int i)

int test(int i)

};intsetbitvec::intsetbitvec(int maxelements, int maxval)

void intsetbitvec::report(int *v)

void intsetbitvec::insert(int t)

set(t);

n++;

}void genset(int m,int maxval)

};class intsetbins

private:

node* rinsert(node* p,int t);

int n,bins,maxval;

node **bin,*sentinel;//sentinel 哨兵

};intsetbins::intsetbins(int maxelement,int pmaxval)

else if (p->val>t)

return p;

}void intsetbins::insert(int t)

void genset(int m,int maxval)

}int _tmain(int argc, _tchar* argv)

5 上面這些資料結構和演算法的平均效能如下

集合表示    初始化     insert      report       總時間       空間

陣列                1               m             m         o(m*m)        m

鍊錶                1               m             m         o(m*m)        2m

二叉樹            1               logm        m       o(mlogm       3m

箱                    m               1              m         o(m)              3m

位相量             n                1               n           o(n)              n/b

將遞迴函式重寫為迭代器版本可以使鍊錶的速度提公升為原來的3倍,但只能使箱提速10%.對於大多數資料結構來說,引入哨兵可以獲得清晰、簡單的**,並縮短執行時間。

第十三章 使用者評論(一)

注意 user模型與comment模型做為1這一側,還需要定義關係 通常我們在多一側定義外來鍵後,選擇在一這一側定義關係 class user usermixin,db.model tablename users comments db.relationship comment backref au...

c primer plus 第十三章課後程式設計6題

include include include define len 40 int main void 開啟檔案並輸入內容 if in fopen name,w null printf 請輸入檔案內容 n while ch getc stdin eof putc ch,in if fclose in...

c primer plus 第十三章課後程式設計7題

a 交替列印倆個檔案的每一行 include include int main int argc,const char ar if fc fopen ar 2 r null 如果第乙個檔案遇到換行符則列印第二個檔案內容,反之一樣 a 交替列印倆個檔案的每一行。利用檔案指標的特性自動遞增的特點 do ...