线性表的顺序存储结构
用一组地址连续的存储单元,依次存放线性表中的数据元素(线性表的起始地址s称作线性表的基地址)
顺序存储结构的实现
用结构来整合
分配空间 :
——静态:数组
——动态:指针
**
线性表顺序存储结构上基本操作的实现
**
1.初始化
Status List_lnit(SqListPtr L)
{
Status s = success;
L->list_size = LIST_INIT_SIZE;
L->length = 0;
L->elem = (ElemType*)malloc(sizeof(ElemType)*L->list_size);
if(L->elem == NULL)
s = fatal;
return s;
}
2.查找
(1)按位置
Status List_Retrival(SqListPtr L, int pos, ElemType *elem)
{
Status s = range_error;
if(L){
if((pos-1) >= 0 && (pos-1) < L->length){
*elem = L->elem[pos-1];
s = success;
}
}
else
s = fatal;
return s;
}
(2)按值
Status List_Locate(SqListPtr L, ElemType elem, int *pos)
{
Status s = range_error;
if(L){
for(int i = 0; i < L->length; ++i){
if(L->elem[i] == elem){
*pos = i+1;
s = success;
break;
}
}
}
else s = fatal;
return s;
}
3.插入元素
步骤:
(1)检查插入位置是否合法,如果合法则继续,否则退出
(2)判断表是否已占满,因为是事先分配空间,可能存在所分配存储空间全部被占用的情况,此时也不能实现插入
(3)若前面检查通过则数据元素依次向后移动一个位置,为避免覆盖原数据,应从最后一个向前依次移动
(4)新数据元素放到恰当位置
(5)表长加1
Status List_Insert(SqListPtr L, int pos, ElemType elem)
{
Status s = range_error;
if((pos-1) >= 0 && (pos-1) <= L->length){
if(L && L->length < L->list_size){
for(int i = L->length-1;i >= pos-1;--i){
L->elem[i+1] = L->elem[i];
}
L->elem[pos-1] = elem;
L->length++;
s = success;
}
}
else s = fail;
return s;
}
4.删除元素
步骤:
(1)检查删除位置是否合法
(2)若检查通过,数据元素依次向前移动一个位置
(3)表长减1
Status List_delete(SqListPtr L, int pos)
{
Status s = range_error;
if((pos-1) >= 0 && (pos-1) < L->length){
if(L && L->length > 0){
for(int i = pos; i <L->length; ++i){
L->elem[i-1] = L->elem[i];
L->length--;
s = success;
}
}
}
else s = fail;
return s;
}