顺序表的按位查找(时间复杂度:O(1))
GetElem(L,i)
:按位查找操作,获取表L中第i个位置的元素的值
静态分配:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| //顺序表的按位查找(静态分配)
#include <stdio.h>
#define MaxSize 10 //定义最大长度
typedef struct{ int data[MaxSize]; //用静态的“数组”存放数据元素 int length; //顺序表的当前长度 }SqList; //顺序表的类型定义
//基本操作:初始化一个顺序表 void InitList(SqList *L){ for(int i=0;i<MaxSize;i++){ L->data[i]=0; //将所有数据元素设置为默认初始值 } L->length=0; //顺序表初始长度为0 }
int GetElem(SqList *L,int i){ return L->data[i-1]; }
int main(){ SqList L; //声明一个顺序表 InitList(&L); //初始化顺序表 //...此处插入几个元素 int num=GetElem(&L, 3); //查找表L中第3个位置的元素的值 return 0; }
|
动态分配:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| //顺序表的按位查找(动态分配)
#include <stdio.h> #include <stdlib.h>
#define InitSize 10 //默认的最大长度
typedef struct{ int *data; //指示动态分配数组的指针 int MaxSize; //顺序表的最大容量 int length; //顺序表的当前长度 }SeqList;
void InitList(SeqList *L){ //用malloc函数申请一片连续的存储空间 L->data=(int *)malloc(InitSize*sizeof(int)); L->length=0; L->MaxSize=InitSize; }
int GetElem(SeqList *L,int i){ return L->data[i-1]; }
int main(){ SeqList L; //声明一个顺序表 InitList(&L); //初始化顺序表 //...往顺序表加入几个元素 int num=GetElem(&L, 3); //查找表L中第3个位置的元素的值
return 0; }
|
顺序表的按值查找(最好O(1),最坏O(n),平均O(n))
LocateElem(L,e)
:按值查找操作,在表L中查找具有给定关键字值的元素

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| //顺序表的按值查找
#include <stdio.h> #include <stdlib.h>
#define InitSize 10 //默认的最大长度
typedef struct{ int *data; //指示动态分配数组的指针 int MaxSize; //顺序表的最大容量 int length; //顺序表的当前长度 }SeqList;
void InitList(SeqList *L){ //用malloc函数申请一片连续的存储空间 L->data=(int *)malloc(InitSize*sizeof(int)); L->length=0; L->MaxSize=InitSize; }
//在顺序表L中查找第一个元素值等于e的元素,并返回其位序 int LocateElem(SeqList *L,int e){ for(int i=0;i<L->length;i++){ if(L->data[i] == e){ return i+1; //数组下标为i的元素值等于e,返回其位序i+1 } } return 0; //退出循环,说明查找失败 }
int main(){ SeqList L; //声明一个顺序表 InitList(&L); //初始化顺序表 //...往顺序表加入几个元素 int num=LocateElem(&L, 3); //查找表L中第3个位置的元素的值
return 0; }
|