初学线性表:1.数据结构线性表通过插入部分源代码推导删除

初学线性表:
学习了  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; 

}



猜你喜欢

转载自blog.csdn.net/qq_41698081/article/details/79225500