一片存储空间的中的数据既可能是有序的、也可能是无序的,有序可以是升序、降序、分块升序等等
对于无序存放的数组只能通过顺序查找的方法找到想要的数据
顺序查找就是从数据空间的一端到另一端,逐个数据进行比对,直至找到想要的数据
按照这种说法,最终可能出现两种情况:①找到元素,②找不到,超出边界
这样每次需要判断两个条件,对于顺序表,可以设置一个哨兵,即将数组的首(或尾)空间空出来,平时不存放数据,查找的时候用来存放需要查找的数据,这样就不需要再频繁判断是否超出查找边界,减少查找时间
对于链表,如果数据量极大,也可以创建一个哨兵节点以节省时间,若数据量较小,则会延长查找时间
无哨兵顺序表顺序查找:
int orderFind(int iX, int *aiArray, int iSize)
{
int iLoc;
for (iLoc = iSize - 1; aiArray[iLoc] != iX && iLoc > 0; iLoc--);
return iLoc;
}
有哨兵顺序表顺序查找:
int orderFind(int iX, int *aiArray, int iSize)
{
int iLoc;
aiArray[0] = iX;
for (iLoc = iSize - 1; aiArray[iLoc] != iX; iLoc--);
return iLoc;
}
链表顺序查找:
PT_List orderFind(int iX, PT_List ptHead)
{
PT_List ptLoc = ptHead->ptNext;
while (ptLoc && ptLoc->iData != iX)
ptLoc = ptLoc->ptNext;
return ptLoc;
}