修改代码:status InitSqlist(Sqlist &L){ L.elem = (Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype)); if(! L.elem) return error; L.length = 0; L.listsize = LIST_INIT_SIZE; return ok; } void PrintSqlist(Sqlist &L){ for(int i=0;i<L.length;i++) printf(" %2d ",L.elem[i]); printf("\n"); } void Get(Sqlist &L,int n) { int i; for(i=1 ; i<n ;i++) { scanf("%d",&(L.elem[i].key)); L.length++; } } int Search(Sqlist L, keyType key) { L.elem[0].key = key; int i; int count; for(i = L.length; !EQ(L.elem[i].key,key); i--) { count++; } return count; } int main() { int n,i; int key,count; Sqlist L; InitSqlist(L); printf("请输入顺序表的长度(顺序查找)\n"); scanf("%d",&n); printf("请输入一批数据\n"); Get(L,i); printf("以下为输入的顺序表(顺序查找)\n"); PrintSqlist(L); printf("请输入你想查找的元素(顺序查找)\n"); scanf("%d",&key); count = Search(L,key); if(count == 0) { printf("查找失败%d",&key); } else { printf("关键字 %d 的位置是 %d,查找次数是 %d\n", key, n - count + 1, count); } return 0; }
时间: 2023-12-08 08:03:24 浏览: 116
修改后的代码如下:
```
status InitSqlist(Sqlist &L){
L.elem = (Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));
if(! L.elem)
return ERROR;
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
void PrintSqlist(Sqlist L){
for(int i=0;i<L.length;i++)
printf(" %2d ",L.elem[i].key);
printf("\n");
}
void Get(Sqlist &L,int n) {
for(int i=1; i<=n; i++)
{
scanf("%d",&(L.elem[i].key));
L.length++;
}
}
int Search(Sqlist L, keyType key) {
int i = L.length-1;
int count = 0;
while(i>=0 && L.elem[i].key!=key){
i--;
count++;
}
if(i<0){
return 0;
}else{
count++;
return count;
}
}
int main() {
int n,key,count;
Sqlist L;
InitSqlist(L);
printf("请输入顺序表的长度(顺序查找)\n");
scanf("%d",&n);
printf("请输入一批数据\n");
Get(L,n);
printf("以下为输入的顺序表(顺序查找)\n");
PrintSqlist(L);
printf("请输入你想查找的元素(顺序查找)\n");
scanf("%d",&key);
count = Search(L,key);
if(count == 0)
{
printf("查找失败%d",key);
}
else
{
printf("关键字 %d 的位置是 %d,查找次数是 %d\n", key, L.length-count+1, count);
}
return 0;
}
```
修改说明:
1. Get 函数中的循环条件应该是 `i<=n` 而不是 `i<n`,这样才能正确读入 n 个元素。
2. Search 函数中的循环条件应该是 `i>=0` 而不是 `!EQ(L.elem[i].key,key)`,这样才能正确查找到元素。
3. 在找到元素时,应该返回查找次数 count,而不是 n-count+1。因为 n 是输入的长度,可能大于实际存储的元素个数,而实际存储的元素个数是 L.length。
阅读全文