数据结构复习之线性表(顺序表查找)

顺序表的按位查找
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];
}
GetElem(L,i)按位查找操作。获取表L中第i个位置的元素的值。
动态分配:
#define InitSize 10
//顺序表的初始长度
typedef struct{
ElemType *data;
//指示动态分配数组的指针
int MaxSize;
//顺序表的最大容量
int length;
//顺序表的当前长度
} SeqList;
//顺序表的类型定义(动态分配方式)
动态分配
ElemType GetElem(SeqList L, int i){
return L.data[i-1];
}   
ElemType *data   //和访问普通数组的方法一样

按位查找时间复杂度
ElemType *data
ElemType GetElem(SeqList L, int i){
return L.data[i-1];
}
时间复杂度:O(1)   
👉👉👉 由于顺序表的各个数据元素在内存中连续存放, 因此可以根据起始地址和数据元素大小立即找到 第 i 个元素——“随机存取”特性。
顺序表的按值查找
#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; //退出循环,说明查找失败
}

LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。
//在顺序表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;
//退出循环,说明查找失败
}
Tips
《数据结构》考研初试中,手写代码可以直接用“ == ”,无论 ElemType 是基本数据类型还是
结构类型。
按值查找的时间复杂度
//在顺序表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;
//退出循环,说明查找失败
}
最好情况:目标元素在表头
循环 1 次; 最好时间复杂度 = O(1)
最坏情况:目标元素在表尾
循环 n 次; 最坏时间复杂度 = O(n);
平均情况:假设目标元素出现在任何一个位置的概率相同,都是 1/n
目标元素在第 1 位,循环 1 次;在第 2 位,循环 2 次; …… ;在第 n 位,循环 n
平均循环次数 = 1
= 1⋅ 1/n + 2 ⋅ 1/n + 3 ⋅ 1/n+ …… + n ⋅ 1/n = n(n+1)/2 ⋅1/n=(n+1)/2
平均时间复杂度 = O(n)
关注最 深层循环语句的执 型 次数与问 题规模 n 的关系
问题规模 n = L.length (表长)
总结一下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值