改进算法: int seq search2 (Se List a, keytype k) ∥设置了监视哨的顺序表査找,査找关键字值等于指定 值k的记录, ∥若查找成功,返回记录存放位置的下标值,否则返回0 I-n, a(0. key=k; while(ai. key =k) return(i); 西加大学数学与信息学院 网囧
ᬍ䖯ㅫ⊩˖ int seq_search2 (Se_List aˈkeytype k) { //䆒㕂њⲥ㾚઼ⱘ乎ᑣ㸼ᶹᡒˈᶹᡒ݇䬂ᄫؐㄝѢᣛᅮ ؐkⱘ䆄ᔩˈ //㢹ᶹᡒ៤ࡳˈ䖨ಲ䆄ᔩᄬᬒԡ㕂ⱘϟᷛؐˈ৺߭䖨ಲ0 i=n ; a[0].key=k ; while ( a[i].key != k) i--; return ( i ) ; }
3.链表的顺序查找 链表的顺序查找是指将查找表作为线性表并以链 式存储结构存储,用顺序查找方法查找与指定关键字 值相等的记录。 链表的类型定义如下所示 typedef struct node i keytype key;/点的关键字类型 anytype otheritem;结点的其他成分 struct node *nex;∥指向链表结点的指针 iLink Node, Link 西加大学数学与信息学院 网囧
3. 䫒㸼ⱘ乎ᑣᶹᡒ 䫒㸼ⱘ乎ᑣᶹᡒᰃᣛᇚᶹᡒ㸼Ў㒓ᗻ㸼ᑊҹ䫒 ᓣᄬټ㒧ᵘᄬټ⫼ˈ乎ᑣᶹᡒᮍ⊩ᶹᡒϢᣛᅮ݇䬂ᄫ ؐⳌㄝⱘ䆄ᔩDŽ 䫒㸼ⱘ㉏ൟᅮНབϟ᠔⼎˖ typedef struct node { keytype key; //㒧⚍ⱘ݇䬂ᄫ㉏ൟ anytype otheritem; //㒧⚍ⱘ݊Ҫ៤ߚ struct node *next; //ᣛ䫒㸼㒧⚍ⱘᣛ䩜 }Link_Node,*Link;
将查找表中的数据元素用这种结构的结点表示, 并以指向头结点的指针标识。 对链表实现顺寻查找就是在有头结点的链式查找 表中查找关键字值等于给定值的记录,若查找成功, 返回指向相应结点的指针,否则返回空指针。 西加大学数学与信息学院 网囧
ᇚᶹᡒ㸼Ёⱘ᭄ܗ㋴⫼䖭⾡㒧ᵘⱘ㒧⚍㸼⼎ˈ ᑊҹᣛ༈㒧⚍ⱘᣛ䩜ᷛ䆚DŽ ᇍ䫒㸼ᅲ⦄乎ᇏᶹᡒህᰃ᳝༈㒧⚍ⱘ䫒ᓣᶹᡒ 㸼Ёᶹᡒ݇䬂ᄫؐㄝѢ㒭ᅮؐⱘ䆄ᔩˈ㢹ᶹᡒ៤ࡳˈ 䖨ಲᣛⳌᑨ㒧⚍ⱘᣛ䩜ˈ৺߭䖨ಲぎᣛ䩜DŽ
Link node * link search(Link h, keytype k) Jink为带头结点链表的头指针,查找关键字值等 于k的记录, ∥找成功,返回指向找到的结点的指针,查找失 败返回空指针 p=h->next; while((p =NULL)&&(p-key!=k)p=p->next return ps 顺序查找算法简单,对表的结构无任何要求;但 是执行效率较低,尤其当n较大时,不宜采用这种查找 方法。 西加大学数学与信息学院 网囧
Link_Node *link_search (Link h , keytype k) {//linkЎᏺ༈㒧⚍䫒㸼ⱘ༈ᣛ䩜ˈᶹᡒ݇䬂ᄫؐㄝ Ѣkⱘ䆄ᔩˈ //ᶹᡒ៤ࡳˈ䖨ಲᣛᡒࠄⱘ㒧⚍ⱘᣛ䩜ˈᶹᡒ༅ 䋹䖨ಲぎᣛ䩜 p=h->next; while ((p!=NULL) && (p->key!=k)) p=p->next; return p; } 乎ᑣᶹᡒㅫ⊩ㅔऩˈᇍ㸼ⱘ㒧ᵘ᮴ӏԩ㽕∖˗Ԛ ᰃᠻ㸠ᬜ⥛䕗Ԣˈᇸ݊ᔧn䕗ᯊˈϡᅰ䞛⫼䖭⾡ᶹᡒ ᮍ⊩DŽ
7.2.2折半查找 1.折半查找的基本思想 折半查找要求查找表用顺序存储结构存放且各数 据元素按关键字有序(升序或隆序)排列,也就是说 折半查找只适用于对有序顺序表进行查找 西加大学数学与信息学院 网囧
7.2.2 ᡬञᶹᡒ 1. ᡬञᶹᡒⱘᴀᗱᛇ ᡬञᶹᡒ㽕∖ᶹᡒ㸼⫼乎ᑣᄬټ㒧ᵘᄬᬒϨ᭄ ܗ㋴ᣝ݇䬂ᄫ᳝ᑣ˄छᑣ䱚ᑣ˅ᥦ߫ˈгህᰃ䇈 ᡬञᶹᡒা䗖⫼Ѣᇍ᳝ᑣ乎ᑣ㸼䖯㸠ᶹᡒDŽ