#include<stdio.h> #include<malloc.h> #define maxnum 10 typedef struct typelist {int data[maxnum]; int num; }typelist; int s_search(int data[],keytype k,int n) {int i; data[n].key=k; i=0; while(data[i].key!=k) i++; if(i<n) {printf("查找成功"); return(i); } else {printf("查找失败"); return(-1); } } int main() { typelist l; int i,n; l.num=0; printf("输入元素个数:"); scanf("%d",&n); for(i=0;i<n;i++) {scanf("%d",&l.data[i]); l.num++; } printf("顺序表的值为:"); for (i = 0; i <l.num; i++) { printf("%d ", l.data[i]); } printf("\n"); s_search(data[1],k,n); return 0; }
时间: 2024-03-25 18:37:52 浏览: 37
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码存在一些问题,具体可以参考下面的分析:
1. 在函数`s_search`中,参数`keytype k`没有定义,应该将其改为`int k`。
2. 在`s_search`函数中,传入的参数`data`是一个一维数组,而在函数体中却使用了`data[n].key=k`,这是错误的,应该改为`data[n]=k`。
3. 在`s_search`函数中,while循环的条件应该是`i<n`,而不是`data[i].key!=k`,因为`data[i]`是一个整数,不是结构体类型。
4. 在`s_search`函数中,查找成功后应该返回的是元素下标`i`,而不是`data[i]`。
5. 在`s_search`函数中,查找失败应该返回`-1`,而不是`0`,因为`0`也可能是元素的下标。
6. 在`main`函数中,调用`s_search`函数时,传入的参数应该是`l.data`而不是`data[1]`,因为`data`是未定义的。
7. 在`main`函数中,调用`s_search`函数时,应该将`n`作为参数传入,而不是`l.num`,因为`s_search`函数中并没有定义`num`这个变量。
下面是修改后的代码:
```
#include <stdio.h>
#include <malloc.h>
#define maxnum 10
typedef struct typelist {
int data[maxnum];
int num;
} typelist;
int s_search(int data[], int k, int n) {
int i = 0;
data[n] = k;
while (data[i] != k)
i++;
if (i < n) {
printf("查找成功,元素下标为:%d\n", i);
return i;
} else {
printf("查找失败\n");
return -1;
}
}
int main() {
typelist l;
int i, n;
l.num = 0;
printf("输入元素个数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &l.data[i]);
l.num++;
}
printf("顺序表的值为:");
for (i = 0; i < l.num; i++) {
printf("%d ", l.data[i]);
}
printf("\n");
s_search(l.data, 5, n);
return 0;
}
```
阅读全文