初学线性表:
学习了 1.LISTInsert(*L,i,e): 在线性表L中的第i个位置插入新元素e;
2.-LISTDelete(*e,i,*e):删除线性表L中第i个位置元素,并用e返回其值
今天通过进一步学 更深入了解 1 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) //当i不在范围内时,i<1是由于 线性表与数组不同,前者从1开始,后者则是从0开始
{
return ERROR;
}
if(i<=L->length) //若插入的位置不在表尾
{
for(k=L->length-1; k>= i-1; k--;)
{
L->date[k+1]=L->data[k];
}
}
L->data[i-1]=e; //此时是数组,数组脚标从0开始,所以长度要减1
L->length++; //插入了一个元素所以要线性表长度要+1
return OK;
}
由此推导出线性表删除思路如下:
-如果删除位置不合理,抛出异常;
-如果线性表长度大于等于数组长度,则抛出异常;
-从最后一个元素开始向前遍历到第i个位置,分别将他们向前移动一个位置;
-将位置i处的元素删除;
-线性表长度-1;
Status ListInsert(SqList*L, int i, ElemType * e)
{
int k;
if(L->length == 0)
return ERROR;
if(i<1 || i>L->length) //当i不在范围内时,i<1是由于 线性表与数组不同,前者从1开始,后者则是从0开始
{
return ERROR;
}
*e=L->data[i-1];
if(i<=L->length) //若删除的位置不在表尾
{
for(k=L->length-1; k> i-1; k--;)
{
L->date[k-1]=L->data[k];
}
}
L->data[i-1]=e; //此时是数组,数组脚标从0开始,所以长度要减1
L->length--; //插入了一个元素所以要线性表长度要-1
return OK;
}