2.5.1 有序链表类型 bool LocateElem ( OrderedLinkList L, ElemType e, int ( *compare )( ElemType, ElemType ) ) { // 若有序链表L中存在和e相同的数据元素,则当前指针指向第1个 // 和e相同的结点,并返回 TRUE, // 否则当前指针指向第一个大于e 的元素的前驱,并返回FALSE。 L.current = L.head; L.curPos = 0; while ( L.current -> next && compare( e,L.current -> next -> data )> 0 ) { L.current = L.current -> next; // 指针后移,继续查询 L.curPos ++; } |
compare(ElemType,ElemType)函数的定义为:前一个元素"大于"、"等于"或"小于"后一个元素时分别返回1,0或-1。 |
|||
if ( L.current
-> next && compare( e,L.current -> next -> data ) == 0 ) { // 查到和 e 相同元素,当前指针后移 L.current = L.current -> next; L.curPos ++; return TRUE; } else return FALSE; // 当前指针所指后继元素大于 e } // LocateElem |
找到和 e 相同的元素时,当前指针应该指向该结点,所以要移动当前指针到该元素结点,而没有找到时,应该指向"插入位置",所以不需要再移动指针了。 |