Status LocateElemP(LinkList L, ElemType e, Position *q, int(*compare)(ElemType, ElemType)) { /* 若升序链表L中存在与e满足判定函数compare()取值为0的元素,则q指示L中 */ /* 第一个值为e的结点的位置,并返回TRUE;否则q指示第一个与e满足判定函数 */ /* compare()取值>0的元素的前驱的位置。并返回FALSE。(用于一元多项式) */ Link p = L.head, pp; do { pp = p; p = p->next; } while (p && (compare(p->data, e)<0)); /* 没到表尾且p->data.expn<e.expn */ if (!p || compare(p->data, e)>0) /* 到表尾或compare(p->data,e)>0 */ { *q = pp; return FALSE; } else /* 找到 */ {/* 没到表尾且p->data.expn=e.expn */ *q = p; return TRUE; } }
时间: 2024-04-20 08:25:38 浏览: 70
JavaScript实现链表插入排序和链表归并排序
这段代码是用于在升序链表中查找满足特定条件的元素。
函数`LocateElemP`接受一个升序链表`L`,要查找的元素`e`,一个指向位置的指针`q`,以及一个用于比较两个元素大小的函数指针`compare`作为参数,并返回一个状态值。
代码中使用指针`p`初始化为链表的头节点,然后通过一个循环遍历链表,在每次循环中,将指针`pp`指向当前节点`p`,然后将指针`p`指向下一个节点。循环的条件是:没有到达链表尾部并且当前节点的数据域与要查找的元素满足判定函数`compare`的取值小于0。
如果循环结束后,指针`p`为空或者当前节点的数据域与要查找的元素满足判定函数`compare`的取值大于0,则表示没有找到满足条件的元素。此时,将指针`q`指向指针`pp`所指向的位置,并返回FALSE。
如果循环结束后,当前节点的数据域与要查找的元素满足判定函数`compare`的取值等于0,则表示找到了符合条件的元素。此时,将指针`q`指向指针`p`所指向的位置,并返回TRUE。
需要注意的是,函数中使用的判定函数`compare`应满足以下规则:
- 若`compare(a, b) < 0`,表示`a`小于`b`
- 若`compare(a, b) = 0`,表示`a`等于`b`
- 若`compare(a, b) > 0`,表示`a`大于`b`
阅读全文