本文主要介绍顺序表的动态分配,插入,删除,查找操作
一,定义一个顺序表
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;
}
三,动态增加数组长度
//增加动态数组的长度
void IncreaseSize(SeqList &L,int len){
int *p = L.data;
L.data = (int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i = 0;i<L.length;i++){
L.data[i] = p[i];
}
L.MaxSize = L.MaxSize+len;
free(p);
}
四,插入操作
//插入操作
bool ListInsert(SeqList &L, int i, int e){
if(i<1||i>L.length)
return false;
if(L.length>=L.MaxSize)
return false;
for(int j = L.length; j>=i; j--){
L.data[j] = L.data[j-1]; //将第i及以后位置的元素向后移
}
L.data[i-1] = e;
L.length++;
return true;
}
五,删除操作
//删除操作(按位置删除)
bool ListDelete(SeqList &L, int i , int &e){
if(i<1||i>L.length)
return false;
e = L.data[i-1]; //被删除的元素值
for (int j = i; j<L.length; j++)
L.data[j-1] = L.data[j]; //将被删除元素后面的元素向前移
L.length--;
return true;
}
六,按位查找操作
//按位查找
int GetElem(SeqList L,int i){
if(i>0||i<L.length)
return L.data[i-1];
return -1;
}
七,按值查找操作
//按值查找
int LocateElem(SeqList L,int e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e)
return i+1;
}
return -1;
}
完整的代码结构,实现,函数调用流程可下载资源查看