主题:高手指点:顺序查找算法错在哪里
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef struct
{int *elem;
int length;
}SSTable;
int Search1_Seq(SSTable ST,int key)
{//从前往后查找
int *p,*q,k;
p=ST.elem+1; q=ST.elem+ST.length;k=1;
while(p<=q && *p!=key) {k++;p++;}
if(p<=q) return k;
else return 0;
}
int Search2_Seq(SSTable ST,int key)
{//从后往前查找
int i=ST.length;
ST.elem[0]=key;
while(ST.elem[i--]!=key) ;
return i;
}
main()
{SSTable ST;
int key,i;
printf("请输入顺序表的长度:");
scanf("%d",&ST.length);
ST.elem=(int *)malloc((ST.length+1)*sizeof(int));
printf("请输入顺序表的元素:");
for(i=1;i<=ST.length;i++)
scanf("%d",&ST.elem[i]);
printf("请输出顺序表的元素:");
for(i=1;i<=ST.length;i++)
printf("%3d",ST.elem[i]);
printf("\n请输入要查找的给定值key:");
scanf("%d",&key);
Search1_Seq(ST,key);
//Search2_Seq(ST,key);
if(key) {printf("查找成功!"); printf("该记录在顺序表中的位置是%d",key);}
else printf(" 查找不成功!");
printf("\n");
}
顺序查找算法不知错在哪里?得不到正确的输出结果
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef struct
{int *elem;
int length;
}SSTable;
int Search1_Seq(SSTable ST,int key)
{//从前往后查找
int *p,*q,k;
p=ST.elem+1; q=ST.elem+ST.length;k=1;
while(p<=q && *p!=key) {k++;p++;}
if(p<=q) return k;
else return 0;
}
int Search2_Seq(SSTable ST,int key)
{//从后往前查找
int i=ST.length;
ST.elem[0]=key;
while(ST.elem[i--]!=key) ;
return i;
}
main()
{SSTable ST;
int key,i;
printf("请输入顺序表的长度:");
scanf("%d",&ST.length);
ST.elem=(int *)malloc((ST.length+1)*sizeof(int));
printf("请输入顺序表的元素:");
for(i=1;i<=ST.length;i++)
scanf("%d",&ST.elem[i]);
printf("请输出顺序表的元素:");
for(i=1;i<=ST.length;i++)
printf("%3d",ST.elem[i]);
printf("\n请输入要查找的给定值key:");
scanf("%d",&key);
Search1_Seq(ST,key);
//Search2_Seq(ST,key);
if(key) {printf("查找成功!"); printf("该记录在顺序表中的位置是%d",key);}
else printf(" 查找不成功!");
printf("\n");
}
顺序查找算法不知错在哪里?得不到正确的输出结果