順序查詢
順序查詢又叫線性查詢,是最基本的查詢技術,它的查詢過程是:從表中第乙個記錄開始,逐個進行記錄的關鍵字和給定值比較,若某個記錄的關鍵字和給定值相等,則查詢成功,找到所查的記錄;如果知道最後乙個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查詢不成功。
順序查詢演算法實現**如下:
/*順序查詢,a為陣列,n為要查詢的陣列個數,key為要查詢的關鍵字*/
int sequential_search(int *a,int n,int key)
return 0;
}
**很簡單,就是在陣列a中檢視有沒有關鍵字(key),當你需要查詢複雜表結構的記錄時,只需要把陣列a與關鍵字key定義成你需要的表結構和資料型別即可。
這裡並不夠完美,因為每次迴圈時都需要對i是否越界做判斷,事實上,還可以有更好一點的辦法,設定乙個哨兵,可以解決不需要每次讓i與n做判斷,實現**如下:
int sequential_search(int *a,int n,int key)
return i;
}
此時**是從尾部開始查詢,由於a[0]=key,也就是說,如果a[i]中有key則返回i,查詢成功。否則一定在最終的a[0]處等於key,此時返回0,即說明a[1]~a[n]中沒有關鍵字key,查詢失敗。
折半查詢
折半查詢(binary search)技術,又稱為二分查詢。它的前提線性表中的記錄必須是關鍵碼有序,線性表必須採用順序儲存。折半查詢的基本思想是:在有序表中,取中間記錄作為比較物件,若給定值與中間記錄的關鍵字相等,則查詢成功;若給定值小於中間記錄的關鍵字,則在中間記錄的左半區繼續查詢;若給定值大於中間記錄的關鍵字,則在中間記錄的右半區繼續查詢,不斷重複上面過程,知道查詢成功,或所有查詢區域無記錄,查詢失敗為止。實現**如下:
int sequential_search(int *a,int n,int key)
return 0;
}
二叉排序樹(binary sort tree),又稱為二叉查詢樹,它或者是一顆空樹,或者具有下列性質的二叉樹。
若它的左子樹不為空,則左子樹所有結點的值均小於它的根結點的值。
若它的右子樹不為空,則右子樹上所有結點的值均不大於根結點的值。
它的左,右子樹也分別為二叉樹。
二叉樹的結構:
typedef struct bitnode
bitnode , *bitree;
二叉排序樹的查詢實現過程**如下:
/**遞迴查詢二叉樹t中是否存在key,
指標f指向t的雙親,其初始呼叫值為null
若查詢成功,則指標p指向資料元素結點,並返回true,
否則指標p指向查詢路徑上訪問的最後乙個結點並返回false
*/status searchbst(bitree t ,int key, bitree f, bitree *p)
else if(key == t->data)
else if(key < t->data)
return searchbst(t->lchild,key,t,p);
else return searchbst(t->rchild,key,t,p);
}
二叉排序樹的插入操作
**如下:
/**當二叉排序樹t中不存在關鍵字等於key的資料元素時,
插入key並返回true,否則返回false
*/status insertbst(bitree *t,int key)
else if(key < p->data)
p->lchild = s;
else
p->rchild = s;
return true;
} else
return false;
}
二叉樹的刪除操作:
對二叉樹結點的刪除分三種情況:
葉子結點
僅有左或右子樹
左右子樹都有的結點。
我們來看**,下面這個演算法是遞迴方式對二叉樹排序樹t查詢key,查詢到並刪除**:
/**若二叉樹t中存在關鍵字等於key的資料元素時,則刪除該資料元素結點,
並返回true,否則返回false
*/status deletebst(bitree *t,int key)
}status delete(bitree *p)
else if((*p)->lchild == null)
else
(*p)->data = s->data;
if(q!=*p)
q->rchild = s->lchild;
else
q->lchild = s->lchild;
free(s);
} return true;
}
查詢 二叉排序樹
動態查詢表 表結構本身是在查詢過程中動態生成的,即對於給定值key,若表中存在其關鍵值等於key的記錄,則查詢成功返回,否則插入關鍵字等於key的記錄。二叉排序樹或者是一顆空樹,或者是具有下列性質的二叉樹 1 若他的左子樹不為空,則左子樹上所有結點的值均小於它的根結點的值。2 若它的右子樹不空,則右...
Codeup二叉查詢樹 二叉排序樹
輸入一系列整數,建立二叉排序數,並進行前序,中序,後序遍歷。輸入第一行包括乙個整數n 1 n 100 接下來的一行包括n個整數。可能有多組測試資料,對於每組資料,將題目所給資料建立乙個二叉排序樹,並對二叉排序樹進行前序 中序和後序遍歷。每種遍歷結果輸出一行。每行最後乙個資料之後有乙個空格。12 2 ...
二叉排序樹 二叉搜尋樹 二叉查詢樹
特點 結構體定義struct node 建樹 建二叉排序樹 void create node root,int t else if t root data create root lc,t else create root rc,t 前序遍歷 層序 字典序 int flag int pre 1001...