查詢表:由同一類資料元素構成的集合。(線性表、數表、雜湊表)
關鍵字:是資料元素中某個資料項的值,用它可以表示乙個資料元素。(主關鍵字:唯一地標識;次關鍵字:不唯一地標識)
查詢:根據制定的某個值,在查詢表中確定乙個其關鍵字等於給定的這個值的資料元素
動態/靜態查詢:查表的同時改表成為動態查詢,反之為靜態查詢
平均查詢長度:asl=∑pici (i=1,2,3,…,n),pi 為查詢表中第i個資料元素的概率,ci為找到第i個資料元素時已經比較過的次數。
(1)順序查詢
(2)二分查詢(折半查詢)
(3)分塊查詢
從表的一端開始,依次將記錄的關鍵字與給定的值進行比較。
順序查詢既適用於順序儲存結構(陣列),又適用於鏈式儲存結構(鍊錶),以下介紹順序儲存結構:
資料元素的型別:
1 typedef structelemtype
1 typedef struct**:sstable;
1改進:把待查關鍵字key存入表頭(「哨兵」),從後向前逐個比較,可免去查詢過程中每一步都要檢測是否查詢完畢,加快速度。intlocateelem(sqlist l,elemtype e)
2
1順序查詢的效能分析:空間複雜度:乙個輔助空間。intsearch_seq( sstable st , keytype key )
時間複雜度:
1) 查詢成功時的平均查詢長度 設表中各記錄查詢概率相等 asls(n)=(1+2+ ... +n)/n =(n+1)/2
2)查詢不成功時的平均查詢長度 aslf =n+1
例:找「21」:
若k==r[mid].key,查詢成功
若k若k>r[mid].key,則low=mid+1
**:(迭代)
1*需要特別注意的是迴圈執行的條件是:low<=high,而不是low,因為low=high時,還要比較最後乙個元素。intsearch_bin(sstable st,keytype key)
9return
0; //
表中不存在待查元素
10 }
**:(遞迴)
1二分查詢的效能分析——判定樹int search_bin (sstable st, keytype key, int low, int
high)
2
若所有結點的空指標域設定為乙個指向乙個方形結點的指標,稱方形結點為判定樹的外部結點;對應的,圓形結點為內部結點。
查詢成功時的平均查詢長度:asl=1/11*(1*1+2×2+4×3+4*4 )=33/11=3
查詢成功時比較次數:為該結點在判定樹上的層次數,不超過樹的深度 d = [log2n] + 1 查詢不成功的過程就是走了一條從根結點到外部結點的路徑d或d-1。
二分查詢的效能分析:
查詢過程:每次將待查記錄所在區間縮小一半,比順序查詢效率高,時間複雜度o(log2 n)
適用條件:採用順序儲存結構的有序表,不宜用於鏈式結構
分塊有序,即分成若干子表,要求每個子表中的數值都比後一塊中數值小(但子表內部未必有序)。 然後將各子表中的最大關鍵字構成乙個索引表,表中還要包含每個子表的起始位址(即頭指標)。
① 對索引表使用折半查詢法(因為索引表是有序表);
② 確定了待查關鍵字所在的子表後,在子表內採用順序查詢法(因為各子表內部是無序表);
查詢效率:asl=lb+lw(lb:對索引表查詢的asl;lw:對塊內查詢的asl)
分塊查詢的效能分析:
優點:插入和刪除比較容易,無需進行大量移動。
缺點:要增加乙個索引表的儲存空間並對初始索引表進行排序運算。
適用情況:如果線性表既要快速查詢又經常動態變化,則可採用分塊查詢。
資料結構與演算法 三 線性表基礎
2.1 線性表的定義和基本操作 線性表是有序且有限的 2.1.2 存在乙個唯一的被稱為 第乙個 的資料元素 2.2.2 存在乙個唯一的被稱為 最後乙個 的資料元素 2.2.3 除了第乙個元素外,每個元素均有唯一乙個直接前驅 2.2.4 除了最後乙個元素外,每個元素均有唯一乙個直接後繼。線性表 lin...
資料結構與演算法筆記(三)線性表
是乙個由n的資料元素的有限序列,最常見的是鏈式表達也叫做線性鍊錶 鍊錶。再鍊錶中儲存的資料元素叫做節點,乙個節點儲存就是一條資料記錄。每個資料節點包括2部分,第乙個是資料值,第二個是指向下乙個節點的指標。在鍊錶的最前面,通常有乙個頭指標來指向第乙個節點,對鍊錶的最後乙個節點,沒有下乙個節點,它的指標...
資料結構與演算法(三) 線性表一
線性表 list 由零個或多個資料元素組成的有限序列 資料型別 是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱 例如在c語言中按照取值不同,資料型別可以分為兩類 原子型別 不可以再分解的基本型別,例如整型,浮點型,字元型 結構型別 由若干個型別組合而成,是可以再分解的,例如整型陣列 抽象...