说明:
顺序表的查找,分为按照位置查找,返回对应值和按照值查找,返回该值位置、
思路:
- getlist(sqlist &l,int k)为按位查找,返回具体数值。
- locatelist(sqlist &l,int k)按照值,去查找位置。
因为顺序表都是连续存放的,所以方便随机存取,只需遍历找值或者给出位置取数,便可存放值。
代码如下:
#include <stdio.h>
#include <malloc.h>
#define initsize 10
typedef struct //定义一个动态顺序表的结构体,并起别名为sqlist
{
int *data; //因为是动态数组,所以先定一个指针,表示数组,后面malloc动态分配即可
int max;
int length;
}sqlist;
int getlist(sqlist &l,int k)//按位查找,通过位置定值
{
if(k-1<1 || k-1>l.length)
return 0;
else
return l.data[k-1];
}
int locatelist(sqlist &l,int k)//按值查找,然后从头到尾,进行遍历,直到找到为止
{
int i;
for(i=0;i<l.length;i++)
{
if(l.data[i]==k)
return i-1;
}
}
void initlist(sqlist &l)//初始化顺序表操作,并创建动态数组
{
l.data=(int*)malloc(sizeof(int)*initsize);
l.length=0;
l.max=initsize;
}
int main()
{
sqlist l;
initlist(l);
//给顺序表赋初始值
int i;
printf("max=%d\n",l.max);
for(i=0;i<5;i++)
{
l.data[i]=i+1;
l.length++;
printf("%d ",l.data[i]) ;
}
printf("\n按位查找为%d\n",getlist(l,3));
printf("按值查找为%d\n",getlist(l,3));
return 0;
}