定义
顺序表是用一组地址连续的存储单元依次存储线性表中的数据源元素,从而使得逻辑相邻的两个元素在物理位置上也相邻。特点是表中元素的逻辑顺序与其物理顺序相同
顺序表上基本操作的实现
结构体定义
#define MaxSize 100//定义一个整形常量
typedef struct
{
ElemType data[MaxSize];//存放线性表中的元素
int length;//存放线性表的长度
}Sqlist;//顺序表类型
建立顺序表
void CreatList(Sqlist *&L,ElemType a[],int n)//由a中的n个元素建立顺序表
{
int i = 0 , k = 0;//k表示L中的元素个数,初始值为0
L = (Sqlist * )malloc(sizeof(Sqlist));//分配存放线性表的空间
while(i < n){ //i扫描数组a的元素
L -> data[k] = a[i];//将元素a[i]存放到L中
k++;
i++;
}
L -> length = k;//设置L的长度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 n = 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;//参数i错误时返回false
e = L->data[i-1];//取元素值
return true;//成功找到返回true
}
按元素查找
int LocateElem(Sqlist *L,ElemType)
{
int i = 0;
while(i < L->length && L->data[i] != e)
i++
if(i >= L->length)
return 0;
else
return i+1;
}
插入数据元素
bool ListInsert(Sqlist *&L,int i,ElemType e)
{
int j;
if(i < 1 || i > L->length+1)
return false;//参数i错误时返回false
i--;//将顺序表的逻辑序号转化为物理序号
for(j = L->length ; j > i ; j--)
L->data[j] = L->data[j-1];//将data[i]及后面的元素后移一个位置
L->data[i] = e;//插入元素e
L->length++;//顺序表长度增1
return true;//成功插入返回true
}
删除数据元素
bool ListInsert(Sqlist *&L,int i,ElemType e)
{
int j;
if(i < 1 || i > L->length)
return false;//参数i错误时返回false
i--;//将顺序表的逻辑序号转化为物理序号
for(j = L->length-1 ; j > i ; j--)
L->data[j] = L->data[j+1];//将data[i]之后的元素前移一个位置
L->length--;//顺序表长度减1
return true;//成功插入返回true
}