//顺序查找,找不到返回0 int Search_Seq(SSTable &ST, int key) { //--------补充代码--Start------ //--------补充代码--End------- }
时间: 2023-11-23 22:07:38 浏览: 200
以下是顺序查找的代码实现,如果找到了目标元素,返回其在表中的位置,否则返回0:
```c++
int Search_Seq(SSTable &ST, int key)
{
ST.elem[0].key = key; // 将哨兵设为待查找的元素,简化查找过程
int i;
for (i = ST.length; ST.elem[i].key != key; --i); // 从后往前查找
return i; // 返回目标元素在表中的位置,如果找不到则返回0
}
```
相关问题
#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; typedef struct { int key; //关键字域 }Elemtype; typedef struct { Elemtype R[1000]; int length; }SSTable; int Search_Seq(SSTable ST, int key) { int i; ST.R[0].key = key; for (i = ST.length; ST.R[i].key != key; --i); //从后往前找 return i; } int Search_Bin(SSTable ST, int Key) {//在有序表ST中折半查找其关键字等于key的数据元素。若能找到,则函数值为该元素在表中的位置,否则为0 int low, high,mid;//,length; low = 1; high = ST.length; /*high = ST, length;*/ printf("HELLO"); while (low <= high) { printf("HELLO"); mid = (low + high) / 2; if (Key == ST.R[mid].key) return mid; else if (Key < ST.R[mid].key) high = mid - 1; else low = mid + 1; printf("HELLO"); } //while return 0; } int main() { int n,i,Key; SSTable ST; cout<<"请选择确定需要存入表中的元素个数:\n"; cin >> n; ST.length = n; for (i = 1; i <= n; i++) { cin >> ST.R[i].key; } cout << "请输入Key:"; cin >> Key; printf("顺序查找结果:%d", Search_Seq(ST, Key)); printf("中序查找结果:%d",Search_Bin(ST,Key)); /*cout << "顺序查找,在此顺序表下标为" << Search_Seq(ST, Key) << "处的元素内找到与key相同的元素\n"; cout << "中序查找,在此顺序表下标为" << Search_Bin(ST, Key) << "处的元素内找到与Key相同的元素\n";*/ return 0; }我这个代码有错误找不到,可以帮我找出来吗
在你的代码中,有两个问题:
1. 在头文件`#include<iostream>`中,`i`和`Key`没有定义类型,会报错。应该在定义时加上类型,比如`int i, Key;`。
2. 在二分查找函数`Search_Bin`中,当`Key`不在表中时,需要返回一个特殊值表示未找到,比如-1。而你的代码中,当未找到时返回的是0,与表中下标为0的元素混淆了。可以将`return 0;`替换为`return -1;`。
修改后的代码如下:
```cpp
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct {
int key; //关键字域
}Elemtype;
typedef struct {
Elemtype R[1000];
int length;
}SSTable;
int Search_Seq(SSTable ST, int key) {
int i;
ST.R[0].key = key;
for (i = ST.length; ST.R[i].key != key; --i); //从后往前找
return i;
}
int Search_Bin(SSTable ST, int Key) { //在有序表ST中折半查找其关键字等于key的数据元素。若能找到,则函数值为该元素在表中的位置,否则为-1
int low, high,mid;//,length;
low = 1;
high = ST.length; //high = ST, length;
while (low <= high)
{
mid = (low + high) / 2;
if (Key == ST.R[mid].key) return mid;
else if (Key < ST.R[mid].key) high = mid - 1;
else low = mid + 1;
} //while
return -1;
}
int main() {
int n, i, Key;
SSTable ST;
cout << "请选择确定需要存入表中的元素个数:\n";
cin >> n;
ST.length = n;
for (i = 1; i <= n; i++)
{
cin >> ST.R[i].key;
}
cout << "请输入Key:";
cin >> Key;
printf("顺序查找结果:%d\n", Search_Seq(ST, Key));
printf("中序查找结果:%d\n", Search_Bin(ST, Key));
return 0;
}
```
修改后的代码已经可以正常运行,可以进行编译和测试。
解释一下这段代码typedef struct { int key; int otherinfo; }ElemType; typedef struct { ElemType *R; int length; }SSTable; int search_seq(SSTable ST,int key) { int length scanf("%d",&ST.length); for(i=ST.length;i>=1;i--) { if(ST.R[i].key==key) return i; } }
这段代码定义了一个基于数组的顺序表类型SSTable,其中每个元素是一个结构体ElemType,包含一个key和一个otherinfo。search_seq函数是为了实现顺序查找,传入一个SSTable类型的顺序表ST和要查找的关键字key,返回key在ST中第一次出现的位置,如果查找失败则返回0。
具体的实现过程是:首先从用户输入中获取顺序表的长度ST.length,然后从ST的最后一个元素开始依次向前查找,如果找到了与key相等的元素,则返回该元素的位置i。如果整个顺序表遍历完毕仍然没有找到key,则返回0表示查找失败。
需要注意的是,在实际应用中,可能需要对顺序表中的元素按照关键字排序,这样能够提高查找效率。此时需要在插入元素的时候,保持顺序表中元素的非递减顺序。这样,查找时就可以使用折半查找等更高效的算法了。
阅读全文