#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define MAX 31
typedef struct
{int*k;
int*elem;
char*aa;
int length;
}SSTable;
int lw_Search(SSTable ST,int key)
{
int i;
ST.elem[0]=key;
for(i=ST.length;ST.elem[i]!=ST.elem[0];--i);
return i;
}
int lw_Search2(SSTable ST,int n,int key)
{
int low=1;int high=ST.length;int mid,a=0;
while(low<=high)
{
mid=(low+high)/2;
printf("第%d次查找:在[%d,%d]中找到元素
ST[%d]: %d\n",++a,low,high,mid,ST.k[mid]);
if(ST.k[mid]==key)
return mid;
else if(ST.k[mid]>key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
int lw_bubble(SSTable ST,int n)
{int i,j,temp;int*a;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(ST.k[i]>ST.k[j])
{
temp=ST.k[i];
ST.k[i]=ST.k[j];
ST.k[j]=temp;
}
}
int lw_prit(SSTable ST,int n)
{
int i;int*a;
for(i=1;i<n;i++)
printf("%-8d",ST.k[i]);
printf("\n");
}
char lw_Search3(SSTable ST,char key)
{
int i;
ST.aa[0]=key;
for(i=ST.length;ST.aa[i]!=ST.aa[0];--i);
return i;
}
char lw_Search4(SSTable ST,int n,char key) {
int low=1;int high=ST.length;int mid,a=0;
while(low<=high)
{
mid=(low+high)/2;
printf("第%d次查找:在[%d,%d]中找到元素ST[%d]: %c\n",++a,low,high,mid,ST.k[mid]);
if(ST.k[mid]==key)
return mid;
else if(ST.k[mid]>key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
char lw_bubble2(SSTable ST,int n)
{int i,j;char temp;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(ST.k[i]>ST.k[j])
{
temp=ST.k[i];
ST.k[i]=ST.k[j];
ST.k[j]=temp;
}
}
char lw_prit2(SSTable ST,int n)
{
int i;
for(i=1;i<n;i++)
printf("%5c",ST.k[i]);
printf("\n");
}
void main()
{
int i,j,n=5,min,t;
int*m;
SSTable ST;
int key,flag,w;
char num,r;
SSTable name;//[]={'l','i','w','e','i'},w;
printf("------以下是顺序查找10电信(2)班同学的学号------\n");
printf("请输入10电信(2)班的人数: ");
scanf("%d",&ST.length);
ST.elem=(int*)malloc(10*sizeof(int*)(ST.length));
ST.k=(int*)malloc(10*sizeof(int*)(ST.length));
for(i=1;i<=ST.length;i++)
{printf("请输入第%d个同学的学号: ",i);
scanf("%d",&ST.elem[i]);
}
for(i=1;i<=ST.length;i++)
{printf("%-8d",ST.elem[i]);
ST.k[i]=ST.elem[i];
}
printf("\n请输入要查找的学号: ");
scanf("%d",&key);
//ST.elem[0]=key;
flag=0;
flag=lw_Search(ST,key);
if(flag)
printf("亲,找到了要查找的学号%d的位置为: %d",key,flag);
else
printf("没有找到我要查找的学号%d的位置: ",key);
getch();
printf("\n");
printf("\n------以下是折半查找10电信(2)班同学的学号------\n"); for(i=1;i<=ST.length;i++)
lw_bubble(ST,i);
lw_prit(ST,i);
printf("请输入要查找的学号: ");
scanf("%d",&key);
if((i=lw_Search2(ST,ST.length,key))!=0)
printf("学号为%d的位置是: %d ",key,i);
else
printf("\n学号为%d的位置不在表中: ",key);
printf("\n");
printf("\n------以下是顺序查找10电信(2)班同学的名字------\n");
printf("请输入10电信(2)班的人数: ");
scanf("%d",&ST.length);
ST.aa=(char*)malloc(10*sizeof(char*)(ST.length));
ST.k=(char*)malloc(sizeof(char*)(ST.length));
for(i=1;i<=ST.length;i++)
{printf("请输入第%d个同学的名字: ",i);
scanf("%s",&ST.aa[i]);
}
for(i=1;i<=ST.length;i++)
{printf("%7c",ST.aa[i]);
ST.k[i]=ST.aa[i];
}
printf("\n请输入要查找的名字: ");
scanf("%s",&key);
//ST.elem[0]=key;
flag=NULL;
flag=lw_Search3(ST,key);
if(flag)
printf("亲,找到了要查找的名字%c的位置为: %d ",key,flag);
else
printf("没有找到我要查找的名字%c的位置: ",key);
getch();
printf("\n");
printf("\n------以下是折半查找10电信(2)班同学的名字------\n");
for(i=1;i<=ST.length;i++)
lw_bubble2(ST,i);
lw_prit2(ST,i);
printf("请输入要查找的名字: ");
scanf("%s",&r);
if((i=lw_Search4(ST,ST.length,r))!=0)
printf("亲,找到了要查找的名字%c的位置为: %d ",r,i);
else
printf("\n没有找到我要查找的名字%c的位置: ",r);
printf("\n");
}。