回 帖 发 新 帖 刷新版面

主题:高手指点:顺序查找算法错在哪里

#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");
}
顺序查找算法不知错在哪里?得不到正确的输出结果

回复列表 (共1个回复)

沙发

main函数里给你改了一下,你的调用函数时出错了


main()
{
 SSTable ST;
 int key,i,position;/* position是存放要查找的给定值key的位置的 */
 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);
 position=Search1_Seq(ST,key);
 /* Search2_Seq(ST,key); */
 if(position) {printf("查找成功!"); printf("该记录在顺序表中的位置是%d",position);}
 else printf(" 查找不成功!");
 printf("\n");
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册