定义一个静态顺序表结构体
#define MaxSize 50;//定义顺序表最大长度
typedef struct{
ElemType data[MaxSize];//顺序表的元素
int length;//顺序表的当前长度
}sqList;
初始化静态链表
void InitList(sqList &L){
for(i=0;i<MaxSize;i++)
L.data[i]=0;
L.length=0;
}
定义一个动态顺序表结构体(注意malloc函数需要调用stdlib头文件)
#define InitSize 100;//表长度初始定义
typedef struct{
ElemType *data;//指针动态分配数组指针
int MaxSzie,length;//最大容量和当前元素个数
}sqList;
初始化动态顺序表
void InitList(sqList &L){
L.data=(sqList*)malloc(InitSize*sizeof(sqList));
L.length=0;
L.MaxSize=InitSize;
}
增加数组长度
void IncreaseSize(sqList &L,int len){
sqList *p=L.data;//或者sqList p;p.data=L.data;
L.data=(int *)malloc((MaxSize+len)*sizeof(int));
for(i=0;i<L.length;i++)
{L.data[i]=p[i];//或者L.data[i]=p.data[i]}
MaxSize=InitSize+len;
free(p);
}
顺序表插入一个元素
bool ListInsert(SqList &L,int i ,int e){
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for(int j=L.length;j>=i;j--)//先移动元素后进行插入
L.data[j]=L.data[j-1];
L.data[i-1]=e;
length++;
}
时间复杂度O(n/2)
删除顺序表中的一个元素
bool ListDelet(SqList &L,int &x,int i){
if(L.length==0)
return false;
if(i<1||i>L.length)
return false;
x=L.data[i-1];
for(int j=i;j<L.length;j++)//先进行删除在让i位置以后的元素向前移
L.data[j-1]=L.data[j];
L.length--;
return true;
}
时间复杂度O((n-1)/2)
顺序表的按位查找
ElemType GetElem(SqList L,int i){
return L.data[i-1];
}
顺序表按值查找
int LocateElem(SqList L,ElemType e){
for(i=0;i<L.length;i++)
if(L.data[i]==e)
return L.data[i-1];
return 0;
}
平均时间复杂度O((n+1)/2)