数据结构顺序表代码实现
首先顺序表存储容量有两种分配方式
第一张静态分配
typedef int ElemType; //给int类型取别名
#define MaxSize 50 //定义最大长度
typedef struct{
ElemType data[MaxSize]; // 存放线性表当中元素的最大容量
int length; //存放线性表的长度
}SqList;
第二种动态分配
#define InitSize 100
typedef struct{
ElemType *data; //定义一个动态分配数组指针
int MaxSize,length; //数组的最大容量和当前的长度
}SqList;
//动态分配c语句为
//L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
//c++语句为
//L.data = new ElemType[InitSize];
现在我们来创建一个顺序表
//数组元素a[0.....n-1]创建顺序表l
void CreateList(SqList *&L,ElemType a[],int n ) //由a中的n个元素创建线性表
{
int i = 0,k = 0; //k表示线性表l中元素的个数,初始值为0
L = (SqList*) malloc(sizeof(SqList)); //分配存放线性表的空间
while(i<n){
L->data[k] = a[i]; //将元素a[i]存放到l中
k++;
i++;
}
L->length = k;
}
初始化线性表
void InitList(SqList *& L)
{
L = (SqList*) malloc(sizeof(SqList)); //分配线性表的存放空间
L ->length = 0; //置空线性表的长度为0
}
销毁线性表
//销毁线性表
void DestroyList(SqList *& L){
free(L); //释放l所指的空间
}
判断线性表是否为空表
//判断线性表是否为空表
bool ListEmpty(SqList *L){
return (L->length ==0);
}
求线性表的长度
//求线性表的长度
int ListLength(SqList *L){
return (L->length);
}
输出线性表
//输出线性表
void DispList(SqList *L){
for (int i = 0; i < L->length; i++) {
printf("%d",L->data[i]);
printf("\n");
}
}
求线性表中某个元素的值
bool GetElem(SqList *L,int i ,ElemType &e){
if(i<1 || i>L->length)
return false;
e = L ->data[i-1];// 取到元素的值
return true;
}
按元素值查找
//按元素值查找
int LocateElem(SqList *L,ElemType e){
int i = 0;
while(i<L->length&&L->data[i]!=e)
i++;
if(i>=L->length) //未找到时 返回0
return 0;
else
return i+1; //注意这里的i指到数组下标 找到之后要返回位序故i+1
}
在第i个位置插入元素
//插入数据元素
bool ListInsert(SqList *&L,int i,ElemType e){
int j;
if(i<1 || i>L->length+1)
return false;
i--;//将位序转化为数组下标
for (j = L->length;j>i;j--) {
L->data[j] = L->data[j-1]; //第i个元素及第i元素以后的元素依次向后移动一位
}
L->data[i] = e;
L->length++;
return true;
}
删除第i个位置的元素
//删除数据元素
bool ListDelete(SqList *&L,int i ,ElemType &e)
{
int j;
if(i<1 ||i>L->length)
return false;
i--; //将位序转化为数组下标
e = L->data[i];
for (int j = i; j < L->length-1 ; j++) {
L->data[j] =L->data[j+1]; //将data[i]之后的元素向前移动一个位置
}
L->length--;
return true;
}