1. 获得元素操作
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
/*Status是函数的类型,其值是函数结果状态码,如OK等*/
/*初始条件:顺序线性表L已存在,1<=i<=ListLength(L)*/
/*操作结果:用e返回L中第i个数据元素的值*/
Status GetElem(SqList L, int i, ElemType *e){
if(L.length==0 || i<1 ||i>L.length)return ERROR;
*e = L.data[i-1];
return OK;
}
2. 插入操作
插入算法思路:
插入位置不合理,抛出异常;
如果线性表长度大于这个数组长度,则抛出异常或动态增加容量;
从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
将要插入元素填入第i处;
表长加1。
实现代码如下:
Status ListInsert(SqList *L. int i, ElemType e){
int k;
if(L->length == MAXSIZE) return ERROR; /*顺序线性表已满*/
if (i<1 || i>L->length+1) return ERROR; /*当 i 不在范围内时*/
if(i<= L->length) /*若插入数据位置不在表尾*/
{
for(k=L->length-1; k>=i-1; k--) /*将要插入的位置后数据元素向后移动一位*/
L->data[k+1] = L->data[k];
}
L->data[i-1] = e; /*将新元素插入*/
L->length++;
return OK;
}
3. 删除操作
算法思路:
如果删除位置不合理,抛出异常;
取出删除元素;
从删除元素开始遍历到最后一个元素,分别将它们都向前移动一个位置;
表长减1。
实现代码如下:
/*初始条件:顺序线性表L已存在,1<= i <= ListLength(L) */
/*操作结果:删除L的第 i 个数据元素,并用 e 返回其值,L的长度减 1*/
Status ListDelete(SqList *L, int i, ElemType *e){
int k;
if (L->length == 0) return ERROR; /*线性表为空*/
if(i<1 || i>L->length) return ERROR; /*删除位置不正确*/
*e = L->data[i-1];
if(i<L->length) /*如果删除不是最后位置*/
{
for(k=i; k<L->length; k++)
L->data[k-1] = L->data[k];
}
L->length--;
return OK;
}
时间复杂度分析:
存取数据时间复杂度为O(1);
插入或删除 时间复杂度为O(n);