黑边鳍真鲨-绘空事
顺序查找
#include
#define MAXL
10
typedef int KeyType;
typedef struct
{
KeyType key;
}NodeType;
typedef NodeType SeqList[MAXL];
int
SeqSearch(SeqList R,int n,KeyType k)
{
}
int i=0;
while(i
printf(
i++;
}
if(i>=n)
return
-1;
else
{
printf(
return i;
}
void main(){
SeqList R;
int
n=10;
KeyType k;
int a[10],i;
printf(输入数字:n
for(i=0;i
for(i=0;i
R[i].key=a[i];
printf(
printf(输入k:
s
canf(
if((i=SeqSearch(R,n,k))!=-1)
printf(元素%d的位置是%dn
else
printf(不存在n
}
顺序查找方法二:
#include
#include
#define OK 1
#define
ERROR 0
#define N 5 * 数据元素个数 *
typedef int
Status; * Status是函数的类型,其值是函数结果状态代码,如OK等 *
typedef int Boolean; *
Boolean是布尔类型,其值是TRUE或FALSE *
typedef int
KeyType; * 设关键字域为整型 *
typedef struct *
数据元素类型(以教科书图9.1高考成绩为例) *
{
long number;
* 准考证号 *
char name[9]; * 姓名(4个汉字加1个串结束标志) *
int politics; * 政治 *
int Chinese; * 语文
*
int English; * 英语 *
int math; * 数学 *
int physics; * 物理 *
int chemistry; *
化学 *
int biology; * 生物 *
KeyType key;
* 关键字类型应为KeyType,域名应为key,与bo9-1.c中一致 *
}
ElemType;
ElemType r[N]={{179324,何芳芳
{179325,陈红
{179326,陆华
{179327,张平
{179328,赵小怡全局变量 *
#define total key * 定义总分(total)为关键字 *
#define EQ(a,b) ((a)==(b))
#define LT(a,b)
((a)<(b))
#define LQ(a,b) ((a)<=(b))
typedef struct
{
ElemType *elem; *
数据元素存储空间基址,建表时按实际长度分配,0号单元留空 *
int length; *
表长度 *
}SSTable;
Status Creat_Seq(SSTable
*ST,int n)
{ * 操作结果:
构造一个含n个数据元素的静态顺序查找表ST(数据来自全局数组r) *
int i;
(*ST).elem=(ElemType
*)calloc(n+1,sizeof(ElemType)); *
动态生成n个数据元素空间(0号
单元不用) *
if(!(*ST).elem)
return ERROR;
for(i=1;i<=n;i++)
*((*ST).elem+i)=r[i-1]; * 将全局数组r的值依次赋给ST *
(*ST).length=n;
return OK;
}
void Ascend(SSTable *ST)
{ *
重建静态查找表为按关键字非降序排序 *
int i,j,k;
for(i=1;i<(*ST).length;i++)
{
k=i;
(*ST).elem[0]=(*ST).elem[i]; * 待比较值存[0]单元
*
for(j=i+1;j<=(*ST).length;j++)
if LT((*ST).elem[j].key,(*ST).elem[0].key)
{
k=j;
(*ST).elem[0]=(*ST).elem[j];
}
if(k!=i) * 有更小的值则交换 *
{
(*ST).elem[k]=(*ST).elem[i];
(*ST).elem[i]=(*ST).elem[0];
}
}
}
Status Creat_Ord(SSTable *ST,int n)
{ * 操作结果: 构造一个含n个数据元素的静态按关键字非降序查找表ST *
*
数据来自全局数组r *
Status f;
f=Creat_Seq(ST,n);
if(f)
Ascend(ST);
return f;
}
Status Destroy(SSTable
*ST)
{ * 初始条件: 静态查找表ST存在。操作结果: 销毁表ST *
free((*ST).elem);
(*ST).elem=NULL;
(*ST).length=0;
return OK;
}
int
Search_Seq(SSTable ST,KeyType key)
{ *
在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为 *
*
该元素在表中的位置,否则为0。*
int i;
[0].key=key; * 哨兵 *
for(i=;!EQ([i].key,key);--i); * 从后往前找 *
return i; * 找不到时,i为0 *
}
int
Search_Bin(SSTable ST,KeyType key)
{ *
在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为 *
*
该元素在表中的位置,否则为0。*
int low,high,mid;
low=1; * 置区间初值 *
high=;
while(low<=high)
{
mid=(low+high)2;
if EQ(key,[mid].key) * 找到待查元素 *
return mid;
else if LT(key,[mid].key)
high=mid-1; * 继续在前半区间进行查找 *
else
low=mid+1; * 继续在后半区间进行查找 *
}
return 0;
* 顺序表中不存在待查元素 *
}
Status Traverse(SSTable
ST,void(*Visit)(ElemType))
{ * 初始条件:
静态查找表ST存在,Visit()是对元素操作的应用函数 *
* 操作结果:
按顺序对ST的每个元素调用函数Visit()一次且仅一次。 *
*
一旦Visit()失败,则操作失败 *
ElemType *p;
int
i;
p=++; * p指向第一个元素 *
for(i=1;i<=;i++)
Visit(*p++);
return OK;
}
void print(ElemType c) * Traverse()调用的函数 *
{ printf(
h,,s,try,y,);
}
void
main()
{
SSTable st;
int i,s;
for(i=0;i
r[i].total=r
[i].politics+r[i].Chinese+r[i].English+r[i].math+r
[i].physics+r[i].chemistry+r[i].biology;
Creat_Seq(&st,N); * 由全局数组产生静态查找表st *
printf(准考证号 姓名 政治 语文 外语 数学 物理 化学 生物
总分n
Traverse(st,print); * 按顺序输出静态查找表st *
printf(请输入待查找人的总分:
scanf(
i=Search_Seq(st,s); * 顺序查找 *
if(i)
print(*(+i));
else
printf(没找到n
Destroy(&st);
}
进入的英语-comparable
春节英语手抄报-绿色英文
伙计是什么意思-wearable
处境的拼音-什么什么什么意
heat-行的意思
广阔无垠-某一天英文
电灯泡英文-早上好的英语怎么写
kick-骤然
-
上一篇:有放回必有序,无放回可无序
下一篇:中考语文专题复习三记叙文阅读记叙顺序及作用教案