快排 約瑟夫環,雜湊表

2021-10-10 02:19:37 字數 2872 閱讀 8506

五、圖

expected primary-expression before 『[』 token

剛剛的乙個結構體定義時候出現的錯誤

比如剛剛寫的**是醬嬸兒的

typedef

struct studentstu[

1010];

for(i=

1;i<=n;i++

)

是指缺少申明,需要申明變數

修正:

typedef

struct studentstudent;

student stu[

1010];

for(i=

1;i<=n;i++

)

敲了幾遍終於沒問題了。。。。直接上源**

#include

intswap

(int a,

int low,

int high)

//寫乙個交換函式

intpartition

(int a,

int low,

int high)

//核心排序

swap

(a,low,high)

;//當小於基準值時交換

while

(a[low]

<=base && low

//從左往右

swap

(a,low,high)

;//交換

}return low;

//返回下標(用於二分

}int

quicksort

(int a,

int low,

int high)

}int

main()

quicksort

(a,0

,n-1);

for(j=

0;j)return0;

}

呼叫三個函式,分別是:swap(交換) partition(二分)←核心 quicksort(實現遞迴)

借用約瑟夫環複習了一下結構體指標。

貼上****

//n個小孩手拉手,從1報數,第m個人出列,再繼續從1報數,直到剩最後乙個人為止,輸出是幾號

#include

#include

typedef

struct linklink;

link *

creatlist

(int n)

tail->next=

null

;//別忘把最後乙個結點的next域置為空

return head;

//返回頭結點,該鍊錶建立完成

}void

deletelist

(link *p,

int x)

if(p!=

null)}

intmain()

if(i==n)

}printf

("%d\n"

,p->next->pos)

;//p的這個時候在頭結點位置

free

(p);

}return0;

}

(我覺得這個我還得多敲幾遍…

在記錄的儲存位置和它的關鍵字之間建立乙個確定的相應關係f。使得每乙個關鍵字key相應乙個儲存位置f(key)。雜湊技術既是一種儲存方法,也是一種查詢方法。

雜湊技術適合求解問題是查詢與給定值相等的記錄。查詢速度快。

雜湊技術不適合範圍查詢,不適合查詢相同關鍵字的記錄,不適合獲取記錄的排序,最值。

關關鍵字相應的記錄儲存位置稱為雜湊位址。

重點:需要解決衝突:關鍵字key1不等於key2。但f(key1)=f(key2)。

個人理解就是一堆資料,每個資料都取乙個和資料相關的名字,方便查詢,時間複雜度降為o(1)。但有衝突點,可能會有兩個或多個資料的名字一樣,即儲存位置有衝突,重點著手於如何處理衝突。

a.直接定址法

f(key)=a x key+b(a、b為常數)

適合查詢錶小且連續。

b.數字分析法

適合關鍵字位數多且若干位分布均勻的資料。

c.平方折中法

1234,平方1522756。抽取中間227作為雜湊位址。

不知道關鍵字分布,且位數不是非常大。

d.摺疊法

從左到右切割成位數相等的幾部分,這幾部分疊加求和,並按雜湊表表長,取後幾位作為雜湊位址。

不知道關鍵字分布,位數多。

e.除留餘數法

f(key)=key mod p(p<=m)

p選取不好容易產生衝突。

通常p為<=m(最好接近m)的最小質數或者不包括小於20質因子的合數。

f.隨機數法

f(key)=random(key),random隨機函式

當關鍵字為字串,轉化為某種數字來對待。比方ascll碼或者unicode碼等。

適合關鍵字長度不等的資料。

其實我覺得上面摘的這些除了湊字數沒啥太多用處…實際應用的時候根據所給資料咋方便咋來

a.開放定址法

意思是一旦衝突,尋找下乙個空的雜湊位址

b.鏈位址法

將全部關鍵字為同義詞的記錄儲存在乙個單鏈表(同義詞字表)中。

雜湊表中僅僅儲存全部同義詞字表的頭指標。

c. 公共溢位區法

把衝突的關鍵字統一都放到一塊去儲存起來,也就是溢位表。雜湊計算後,先基本表比較。不等,到溢位表進行順序查詢。

迴圈鍊錶(約瑟夫環)

約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。要通過輸入n,m,k三個正整數,來求出列的序列。這個問題採用的是典型的...

鍊錶實現約瑟夫環

約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依 此規律重複下去,直到圓桌周圍的人全部出列。實現 include using namespace ...

快排及鍊錶排序

void quicksort vector int vec,int low,int high swap vec low vec mid 保證交換到頭部的元素比樞紐元小 quicksort vec,low,mid 1 quicksort vec,mid 1,high 呼叫 quicksort num,...