Ⅰ )算法思想:
在表的一端设置一个称为“监视哨”的附加单元,存放要查找元素的关键字,从表的另一端开始查找,如果在“监视哨”找到要查找元素的关键字,返回失败信息,否则,返回相应下标。
Ⅱ)性能分析:
假设列表长度为n,那么查找到第i 个元素时,需要进行n-i+1次比较。
ASL = 1/n∑(n-i+1) = (n+1)/2
Ⅲ)源代码:
#include<stdio.h> #define MaxSize 20 //线性表长度 typedef struct { int key; }RecordType; typedef struct { int length; RecordType r[MaxSize + 1]; }RecordList; int SeqSearch(RecordList l, int key) { int i; l.r[0].key = key; //将要查找的值赋给监视哨 i = l.length; while (l.r[i].key != key) { i--; } return i; //当l.r[i].key == key时返回下标 } int main() { RecordList L = { 6, 0, 12, 15, 20, 25, 45, 50 }; printf("%d\n", SeqSearch(L, 20)); //输出元素20所在的下标 return 0; }