主题:关于对线性表的折半法查找问题
#include "stdio.h"
#define AA 20
int ps=0;/* 定义一个全局变量来记录链表的节点的个数*/
typedef struct ls
{int num;
struct ls *next;
}ss;
/*下面是建立一个链表,list()*/
ss *list()
{ ss *h,*r,*s;
r=s=(ss *)malloc(sizeof(struct ls));
printf("inter dat :\n");
scanf("%d",&s->num);
h=s;
while(s->num!=0)
{r->next=s;
r=s;
s=(ss *)malloc(sizeof(struct ls));
scanf("%d",&s->num);
ps++;
}
r->next=NULL;
return h;
}
ss pin(ss *head)/* 建立链表输出函数pin())*/
{ss *p;
p=head;
if(head!=NULL)
do
{printf("%2d\n",p->num);
p=p->next;
}while(p!=NULL);
}
int zheban(ss s[],int n,int x)/*注意这个s[]为要寻找的线性表,而这个n为这个线性表的长度,而这个为要寻找的线性表的元素*/
{ /*前提是,线性表的元素已经按照某种顺序排列好了*/
int low=0,hig=n-1,found=0;/*low执行线性表的下表0,而hig执行链表的最大下表*/
int mid; /*min为这个中间值,即折半值*/
while((low<=hig)&&(!found))/*found为一个标记变量*/
{ mid=(low+hig)/2;
if(x==s[mid].num)
found=1;
else
if(x>s[mid].num)
low=mid+1;
else
hig=mid-1;
}
if(found)
{return (mid);}
else
{return (-1); }
}
main()
{ss *p;int w;
int x;
p=list();
pin(p);
printf("kai shi chazhao shu ju:\n");
scanf("%d",&x);
w=zheban(p,ps,x);
printf("the shu zhi is %d",w);
getch();
}
这个是我写的一个对有序(我输入数值是有序)的进行折半法的查找程序,使用折半法查找,但是,每次都是返回-1,也就是说找不到,,到底是什么回事?ps为我定义的一个全局变量,来记录输入的链表的元素数,请各位帮忙,,,
[/code]