顺序表插入和删除(数据结构与算法) |
您所在的位置:网站首页 › 顺序表的实现步骤 › 顺序表插入和删除(数据结构与算法) |
二、顺序表插入和删除(数据结构)
1. 顺序表的基本操作----插入
顺序表是一种数据结构,其元素在内存中连续存储,并且可以使用下标直接访问每个元素。在顺序表中插入或删除元素时,需要移动后续元素的位置以保持顺序表的有序性。对于在下标位置i处插入值为x的元素,需要将下标为i~n-1的所有元素向右移动一个位置,然后将x插入到位置i的元素中。对于删除操作,需要将下标为i+1~n-1的所有元素向左移动一个位置,然后将下标为n-1的元素置空。需要注意的是,当动态扩展顺序表时,需要重新分配内存空间,因为当前内存空间可能已经被占满了。同时,为了减少多次扩充内存空间的开销,可以考虑一次性分配更大的内存空间。
![]() 可以给代码加入反馈,判断插入操作是否满足当前条件,并给出反馈: bool ListInsert(SqList &L, int i, int e) { if (i = MaxSize) //当前存储空间已满,不能插入 return false; for (int j = L.length; j > i; j--) //将第i个元素及之后的元素后移一位 L.data[j] = L.data[j-1]; L.data[i - 1] = e; //在位置i处放入e L.length++; //添加一个元素,长度加 1 return true; //好的算法,应该具有“健壮性” 能处理异常情况,并给使用者反馈如下图:顺序表长度已满,不能再插入数据元素。 插入操作的时间复杂度:最好、最坏、平均
注意位序、数组下标的关系,并从前面的元素依次移动,思考如果参数没有引用会怎么样? 加入引用,是为了确保将ListDelete()函数与main函数中的操作的相同数据类型如变量e,L在同一内存空间中,所对应的是同一份数据,而不是其中一方的复制体。 bool ListDelete(SqList &L, int i, int &e) //使用&e,则其与main函数中变量e在内存当中对应的是同一份数据。 { if (i L.length) //判断i的范围是否有效 return false; e = L.data[i - 1]; //将被删除的元素赋值给e for(int j = i; j |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |