c
#include <stdio.h>
#include <stdlib.h>
#define maxSize 10
typedef struct {
int data[maxSize];
int length;
}SqList;
void initList(SqList &L) {
for(int i=0;i<L.length;i++)
L.data[i]=0;
L.length=0;
}
int main() {
SqList L;
initList(L);
getElem(L,2);
}
c
// 按位查找:查第i个元素的值,下标就是i-1
// 由于顺序表具体随机存取的特点,因此可以直接读取
int getElem(SqList L,int i) {
if(i<0 || i>L.length+1) {
printf("输出的位序不合法\n");
} else {
printf("%d\t第i个的值\n",L.data[i-1]);
return L.data[i-1];
}
}
// 分析按位查找的时间复杂度,他都没有循环,一次找到,O(n)=O(1)
c
// 按值查找:给一个值,查位序
int locateElem(SqList L,int e) {
for(int i=0;i<L.length;i++) {
if(L.data[i] == e) {
return i+1; // 位序
}
}
return 0; // 退出循环,说明没找到
}
// 分析按值查找的时间复杂度
// 1、若要查的值在表头,循环1次,O(n)=1
// 2、若要查的值在表尾,循环n次,O(n)=n
// 3、若要查的值在除表头和表尾的任意一个地方,它们被找到的概率都是1/n
// 平均循环次数=循环总次数*概率=(1+2+3+...+n)*(1/n)=(n(n+1)/2)*(1/n)=(n+1)/2
// 时间复杂度O(n)=n