聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

第07话:线性表的查找操作

2012-12-04 12:00 浏览: 1055404 次 我要评论(0 条) 字号:


  • 前面线性表ADT说到了一个功能——查找:有时我们想知道,某个小朋友,比如麦兜是否是班里的小朋友,老师会告诉我说,不是,麦兜在春田花花幼儿园里,不在我们幼儿园。这种査找某个元素是否存在的操作很常用。那么今天我们就来实现一下查找的功能。
  • 如何设计查找功能的函数呢。首先参数,我们需要传入线性表L,仅仅查找的话是不需要对表进行变化的,所以用值传递就行。然后就是传入需要查找元素的位置 i,最后还需要一个参数 *e,这个需要用地址传递,因为要保存函数的查找结构。所以函数设计如下:

/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
/* 操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */
Status GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0 || i<1 || i>L.length)
return ERROR;
*e=L.data[i-1];

return OK;
}

调用如下:


SqList L;
ElemType e;
int pos;

printf("你要查找第几个元素? ");
scanf("%d",&pos);
GetElem(L,pos,&e);
printf("第%d个元素的值为:%dn",pos,e);
  • 查找蛮简单的嘛,就是 *e=L.data[i-1]; 把线性表数据数组的第 i 个,也就是下标 i - 1 的元素赋值给 *e; 只是要注意,保存数据的 e 需要地址传值。
  • 还没完噢。还有一个查找需求,就是知道一个数值,查找这个值是否在表中。函数原型大概这样吧。int locateElem(L,e); //查找线性表中是否有e,如果有返回它的位置(从1开始),否则返回0表示失败。

我们提供线性表,还有需要查找的数值,然后遍历线性表,如果发现 L.data[i]==e,那就跳出循环,再返回跳出循环时的 i 值就行。


/* 初始条件:顺序线性表L已存在 */
/* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */
/* 若这样的数据元素不存在,则返回值为0 */
int LocateElem(SqList L,ElemType e)
{
int i;
if (L.length==0)
return 0;
for(i=0;i < L.length;i++)
{
if (L.data[i]==e)
break;
}
if(i>=L.length)
return 0;

return i+1;
}
  • 线性表的查找大概就这两种类型啦,今天的任务完成。


网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复