关于顺序查找代码执行时的问题——Search_Seq()查找代码无法执行循环的问题

完整的有问题的代码: 

快乐在明天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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值