查找表的存储结构查找表是一种非常灵活的数据 结构,对于不同的存储结构,其查找方法不同。为了 提高查找速度,有时会采用一些特殊的存储结构。本 章将介绍以线性结构、树型结构及哈希表结构为存储 结构的各种査找算法。 查找算法的时间效率查找过程的主要操作是关键 字的比较,所以通常以“平均比较次数”来衡量査找算 法的时间效率。 西加大学数学与信息学院 网囧
ᶹᡒ㸼ⱘᄬټ㒧ᵘ ᶹᡒ㸼ᰃϔ⾡䴲ᐌ♉⌏ⱘ᭄ 㒧ᵘˈᇍѢϡৠⱘᄬټ㒧ᵘˈ݊ᶹᡒᮍ⊩ϡৠDŽЎњ ᦤ催ᶹᡒ䗳ᑺˈ᳝ᯊӮ䞛⫼ϔѯ⡍⅞ⱘᄬټ㒧ᵘDŽᴀ ゴᇚҟ㒡ҹ㒓ᗻ㒧ᵘǃᷥൟ㒧ᵘঞજᏠ㸼㒧ᵘЎᄬټ 㒧ᵘⱘ⾡ᶹᡒㅫ⊩DŽ ᶹᡒㅫ⊩ⱘᯊ䯈ᬜ⥛ ᶹᡒ䖛ⱘЏ㽕᪡ᰃ݇䬂 ᄫⱘ↨䕗ˈ᠔ҹ䗮ᐌҹ³ᑇഛ↨䕗᭄´ᴹ㸵䞣ᶹᡒㅫ ⊩ⱘᯊ䯈ᬜ⥛DŽ
72静态查找 正如本章第一节所述:静态查找是指在静态查找 表上进行的查找操作,在查找表中查找满足条件的数 据元素的存储位置或各种属性。本节将讨论以线性结 构表示的静态查找表及相应的査找算法。 西加大学数学与信息学院 网囧
7.2 䴭ᗕᶹᡒ ℷབᴀゴϔ㡖᠔䗄˖䴭ᗕᶹᡒᰃᣛ䴭ᗕᶹᡒ 㸼Ϟ䖯㸠ⱘᶹᡒ᪡ˈᶹᡒ㸼Ёᶹᡒ⒵䎇ᴵӊⱘ᭄ ܗ㋴ⱘᄬټԡ㕂⾡ሲᗻDŽᴀ㡖ᇚ䅼䆎ҹ㒓ᗻ㒧 ᵘ㸼⼎ⱘ䴭ᗕᶹᡒ㸼ঞⳌᑨⱘᶹᡒㅫ⊩DŽ
7.2.1顺序查找 1.顺序查找的基本思想 顺序查找是一种最简单的查找方法。其基本思想 是将查找表作为一个线性表,可以是顺序表,也可以 是链表,依次用查找条件中给定的值与查找表中数据 元素的关键字值进行比较,若某个记录的关键字值与 给定值相等,则查找成功,返回该记录的存储位置, 反之,若直到最后一个记录,其关键字值与给定值均 不相等,则查找失败,返回查找失败标志。 西加大学数学与信息学院 网囧
7.2.1 乎ᑣᶹᡒ 1. 乎ᑣᶹᡒⱘᴀᗱᛇ 乎ᑣᶹᡒᰃϔ⾡᳔ㅔऩⱘᶹᡒᮍ⊩DŽ݊ᴀᗱᛇ ᰃᇚᶹᡒ㸼ЎϔϾ㒓ᗻ㸼ˈৃҹᰃ乎ᑣ㸼ˈгৃҹ ᰃ䫒㸼ˈձ⫼ᶹᡒᴵӊЁ㒭ᅮⱘؐϢᶹᡒ㸼Ё᭄ ܗ㋴ⱘ݇䬂ᄫؐ䖯㸠↨䕗ˈ㢹ᶤϾ䆄ᔩⱘ݇䬂ᄫؐϢ 㒭ᅮؐⳌㄝˈ߭ᶹᡒ៤ࡳˈ䖨ಲ䆹䆄ᔩⱘᄬټԡ㕂ˈ ডПˈ㢹Ⳉࠄৢ᳔ϔϾ䆄ᔩˈ݊݇䬂ᄫؐϢ㒭ᅮؐഛ ϡⳌㄝˈ߭ᶹᡒ༅䋹ˈ䖨ಲᶹᡒ༅䋹ᷛᖫDŽ
2.顺序表的顺序查找 下面是顺序表的类型定义: # define maX num100/用于定义表的长度 typedef struct elemtype keytype key anytype otheritem; ISe listMaX NUMI se item; 假设在查找表中,数据元素个数为n (n< MAX NUM),并分别存放在数组的下标变量 a[lan]中。 西加大学数学与信息学院 网囧
2. 乎ᑣ㸼ⱘ乎ᑣᶹᡒ ϟ䴶ᰃ乎ᑣ㸼ⱘ㉏ൟᅮН˖ #define MAX_NUM 100 //⫼ѢᅮН㸼ⱘ䭓ᑺ typedef struct elemtype{ keytype key; anytype otheritem; }Se_List[MAX_NUM],Se_Item; ؛䆒ᶹᡒ㸼Ёˈ᭄ܗ㋴Ͼ᭄Ўn ˄n<MAX_NUM˅ˈᑊ߿ߚᄬᬒ᭄㒘ⱘϟᷛব䞣 a[1]~a[n]ЁDŽ
下面我们给出顺序查找的完整算法。 int seq search( Se List a, keytype k) 在顺序表中查找关键字值等于k的记录, ∥若查找成功,返回该记录的位置下标序号,否则返回0 while (i<=n & ai key =k)i++ if(i K <=n)retrun l else return 0 西加大学数学与信息学院 网囧
ϟ䴶៥Ӏ㒭ߎ乎ᑣᶹᡒⱘᅠᭈㅫ⊩DŽ int seq_search (Se_List aˈkeytype k) {//乎ᑣ㸼Ёᶹᡒ݇䬂ᄫؐㄝѢkⱘ䆄ᔩˈ //㢹ᶹᡒ៤ࡳˈ䖨ಲ䆹䆄ᔩⱘԡ㕂ϟᷛᑣোˈ৺߭䖨ಲ0 i=1; while (i<=n && a[i].key != k) i++; if (i<=n) retrun i; else return 0; }