int locateElem(sqlist* L, int e, int(*compare)) { int i = 1; int *p = L->data; while (i <= L->length && !(*compare)(*p++, e)) { ++i; } }完整实现
时间: 2024-01-31 12:02:14 浏览: 78
实现元素比较1
完整实现如下:
```
//顺序表结构体
typedef struct {
int* data; //指向动态分配数组的指针
int length; //顺序表的长度
int maxSize; //顺序表分配的存储容量
}sqlist;
// 初始化顺序表
void initList(sqlist* L, int maxSize) {
L->data = (int*)malloc(maxSize * sizeof(int));
L->length = 0;
L->maxSize = maxSize;
}
//顺序表元素比较函数
int compare(int a, int b) {
if (a < b) {
return -1;
}
else if (a == b) {
return 0;
}
else {
return 1;
}
}
//顺序表查找函数
int locateElem(sqlist* L, int e, int(*compare)(int, int)) {
int i = 1;
int* p = L->data;
while (i <= L->length && compare(*p++, e) != 0) {
++i;
}
if (i <= L->length) {
return i;
}
else {
return 0;
}
}
int main() {
sqlist L;
initList(&L, 100);
//插入元素
for (int i = 1; i <= 10; i++) {
L.data[i - 1] = i;
L.length++;
}
//查找元素
int e = 5;
int pos = locateElem(&L, e, compare);
if (pos == 0) {
printf("元素%d不存在\n", e);
}
else {
printf("元素%d的位置是%d\n", e, pos);
}
system("pause");
return 0;
}
```
以上代码中,通过初始化顺序表函数initList初始化了一个长度为10的顺序表,然后插入了10个元素。在主函数中,调用了查找函数locateElem,并传入了要查找的元素5和比较函数compare。最后输出查找结果。
阅读全文