完整的有问题的代码:
快乐在明天YY:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
typedef int ElemType;
typedef struct {
ElemType* elem;//整形指针
int TablLen;
}SStable;//动态数组个数
int Search_Seq(SStable ST, ElemType key) {
ST.elem[0] = key;//让零号元素作为哨兵
while (ST.elem[i] != key)
{
--i;
return i;
}
}
}
void ST_Init(SStable& ST, int len) {
ST.TablLen = len + 1;//多申请一个为了哨兵
ST.elem = (ElemType*)malloc(sizeof(ElemType) * ST.TablLen);
int i;
srand(time(NULL));//随机数生成的固定代码
for ( i = 0; i < ST.TablLen; i++)
{
ST.elem[i] = rand() % 100;
}
}
void ST_print(SStable ST) {
for (int i=ST.TablLen-1; i >=0 ;i--)
{
printf("%5d", ST.elem[i]);
}
}
int main() {
SStable ST;
ElemType key;
int pos;
ST_Init(ST, 10);
ST_print(ST);
printf("请输入要搜索的key的值");
scanf("%d", &key);
pos = Search_Seq(ST, key);
if (pos)
{
printf("查找成功 ,位置为 %d\n", pos);
}
else {
printf("查找失败\n");
}
出现问题原因:
在Search_Seq()函数的循环内部使用了return i;
使得不管查找的数为多少,它的输出始终都是数组最后一个的位置
解决方法:
把return i;拿到循环外面
int Search_Seq(SStable ST, ElemType &key) {
ST.elem[0] = key;//让零号元素作为哨兵
int i = ST.TablLen-1;
while (ST.elem[i] != key)
{
--i;
}return i;
}