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 樹主要用於檔案資料儲存,也就是外存,因為外存的訪問速度慢,為減少訪...