1. 程式人生 > >c語言數據結構學習心得——查找

c語言數據結構學習心得——查找

找到 折半查找 binary 所有結點 color 比較 排序樹 col 元素

順序查找(線性查找)

主要用於在線性表中的查找

int Search1(int a[],int n,int key){
   for(int i=1;i<=n;i++){             //註意從1開始
      if(a[i]==key)return i;          //查找成功
   }
   return 0;                          //查找失敗
}
int Search2(int a[],int n,int key){
   int i=n;
   a[0]=key;                   //設置“哨兵”
while(a[i]==key){ //若不是找的元素 i--; //從前往後查找 } return i; //查找失敗也返回0 }

折半查找

僅適用於有序的順序表

算法思路:首先將給定值key與表中中間位置的元素的關鍵字比較,若相等,則查找成功,返回該元素的存儲位置;若不等,則所需查找的元素只能在中間的元素以外的前半部分或後半部分中。然後在縮小的範圍內繼續進行同樣的查找,如此重復知道找到為止,或者確定表中元素無所需的查找元素,則失效,返回失敗信息。

分塊查找(索引順序查找)

1.確定待查找值在哪個塊(折半查找)

2.在確定的塊中查找待查找值(順序查找)

二叉排序樹(Binary Search Tree 二叉搜索樹)

或是一棵空樹,或是具有以下性質的二叉樹

1.若左子樹不空,則左子樹上所有結點值均小於其根結點的值

2.若右子樹不空,則右子樹上所有結點值均小於其根結點的值

3.左右子樹也是一棵二叉排序樹

二叉排序樹的目的不是為了排序,是為了提高查找(有序)和插入刪除(樹型結構)關鍵字的速度。

typedef struct BiTNode{              //二叉排序樹結點結構
   int data;                         //
結點數據 struct BiTNode *lchild,*rchild; //指向該結點左右孩子的指針 }BiTNode,*BiTree

一.二叉排序樹查找關鍵字代碼

遞歸代碼:

BiTNode *BST_Search(BiTNode *t,ElemType key){
   if(t==NULL)return NULL;                                   //若樹為空則為空值
   else{
       if(t->key==key)return t;
       else if(key<t->key)return BST_Search(t->lchild,key);
       else if(key>t->key)return BST_Search(t->rchild,key);
}
}

非遞歸代碼

BiTNode *BST_Search(BiTNode *t,ElemType key){
   BitNode *p=t;

c語言數據結構學習心得——查找