顺序表的基本操作:按位查找、按值查找
顺序表的按位查找
GetElem(L, i) :按位查找,获取表L中第 i 个位置元素的值
#define MaxSize 10 //定义最大长度
typedef struct{
ElemType data[MaxSize]; //用静态的“数组”存放数据元素 静态分配
int length; //顺序表的当前长度
}SqList; //顺序表的类型定义(静态分配方式)
ElemType GetElem(SqList L, int i){
return L.data[i-1];
}
顺序表的按位查找---------动态分配
#define InitSize 10 //顺序表初始长度
typedef struct{
ElemType *data; //指示动态分配数组的指针
int MaxSize; //顺序表的最大容器
int length; //顺序表的当前长度
}SeqList; //顺序表的类I型那个定义(动态分配方式)
ElemType GetElem(SeqList L, int i){
return L.data[i-1];
}
ElemType *data;
//如果一个ElemType占6B, 即sizeof(ElemType) == 6, 指针data指向的地址为2000
如果换一个类型的指针,指向同一个地址,int *p; 一个int占4B
能够实现随机存储的基础就在于顺序表中所有的数据元素在内存里都是连续存放的,并且这些数据元素的数据类型相同,也就是说每个数据元素所占的内存空间一样大。所以我们只需要知道一个顺序表的起始地址,每个数据元素的大小,就可以立即找到第 i 个元素的位置。
顺序表的按值查找
LocateElem(L, e); 按值查找操作,在表L中查找具有给定关键字值的元素。
#define InitSize 10 //顺序表初始长度
typedef struct{
ElemType * data; //指示动态分配数组的指针
int MaxSize; //顺序表的最大容量
int length; //顺序表的当前长度
}SeqList; //顺序表的类型定义(动态分配方式)
//在顺序表L中查找第一个元素值等于e的元素,并返回其位序。
int LocateElem(SeqList L, ElemType e){
for (int i = 0; i < L.length; i++)
if (L.data[i] == e) //判断元素是否等于查找元素
return i+1; //数组下标为i的元素值等于e, 返回其位序 i + 1
return 0; //推出循环,说明查找失败
}
- 刚开始 i = 0, length = 6; 第一个数据元素data[0]为6,和9不相等。if条件不满足, 进行 i++操作,i 由0----->1.第二轮循环依然不相等,i 变为2,第三轮找到9,返回位序 i + 1, 即返回3。
另外要注意,如果是两个结构类型查找,不能进行上述if条件的判断,需要进行运算符重载。