資料結構之查詢

2021-09-11 02:43:59 字數 1734 閱讀 7807

1,順序查詢:

時間複雜度:(1+…n)/n=(n+1)/2

int sequencesearch(int a, int value, int n)

else

} delete temp;

return -1;

}int main()

; int key=100;

int index=fibonaccisearch(a,sizeof(a)/sizeof(int),key);

cout<5,分塊查詢

分塊:塊中數字無序,但是整個塊間要有序,前乙個塊的最大值必須比後乙個塊的最小值小

演算法描述:首先確定在那個塊中,其次在塊中查詢關鍵字。

#include struct number//結構體,定義每個分塊中的資料結構,且每個分塊的資料結構能相同

number_table[4];//結構體中這個分號一定要有。

int block(int key,int a)

int main()

//這個迴圈剛開始沒寫。

for(i=1;i<=2;i++)//i的上限表示分組情況,但有個疑問為什麼上限為2的時候依舊正確呢

printf("please enter the number that you want:\n");

scanf("%d",&istars);

j=block(istars,a);

if(j==0)

printf("failed\n");

else

printf("success. the number on %d\n",j);

}

6,索引查詢

索引表的型別可定義如下:

struct indexitem

;typedef struct indexitem indexlist[ilmsize];//ilmsize為事先定義的整型常量,大於等於索引項數m

主表的型別可定義如下:

typedef struct elemtype mainlist[maxsize];//maxsize為事先定義的整型常量,大於等於主表中元素的個數n
注意:在索引表中的每個索引項對應多條記錄,則稱為稀疏索引,若每個索引項唯一對應一條記錄,則稱為稠密索引。

索引查詢演算法:

1,首先根據給定的索引值k1,在索引表上查詢出索引值等於k1的索引項,以確定對應子表在主表中的開始位置和長度,然後再根據給定的關鍵字k2,在對應的子表中查詢出關鍵字等於k2的元素。

2,設陣列a是具有mainlist型別的乙個主表,陣列b是具有indexlist型別的在主表a上建立的乙個索引表,m為索引表b的實際長度,即所含的索引項的個數,k1和k2分別為給定,帶查詢的索引值和關鍵字,並假定每個子表採用順序儲存,則索引查詢的平均查詢長度為:

asl= (1+m)/2 + (1+s)/2 = 1 + (m+s)/2

索引查詢演算法為:

//利用主表a和大小為 m 的索引表b索引查詢索引值為k1,關鍵字為k2的記錄

int indsch(mainlist a, indexlist b, int m, indexkeytype k1, keytype k2)

if (j < b[i].start + b[i].length)

return j; //查詢成功

else

return -1; //查詢失敗

}

資料結構之查詢

date 08 07 11 descript 折半查詢,插入跟刪除演算法 public class binaryinsertex extends seqlist public binaryinsertex int n public void create catch exception ex pub...

資料結構之查詢

一 靜態查詢 有序表查詢 平均查詢長度 特點 1 折半查詢 log n 1 1 只是適用於有序表,且限於順序儲存結構 線性鍊錶無法進行折半查詢。2 斐波那契查詢 o logn 平均效能比折半好,但最壞效能比折半差 分割時只需進行加減運算,適用於關鍵字均勻分布的表 對錶長較大的順序表,其效能比折半好 ...

資料結構之查詢

1.折半查詢只能用於有序資料,且是順序儲存結構 實質是用了陣列的下標的折半 2.折半查詢效率是比較高的,但折半查詢必須是順序儲存結構,為了能讓鏈式儲存結構也能用這樣的模式,就引出了平衡二叉樹,他的效率在順序查詢和折半查詢之間 3.b 樹主要用於檔案資料儲存,也就是外存,因為外存的訪問速度慢,為減少訪...