线性表的顺序存储表示时的插入与删除
来源:互联网 发布:血酬定律知乎 编辑:程序博客网 时间:2024/05/20 15:39
线性表的插入与删除属于算法系列,学数据结构的宝宝们应该知道这点,首先说一下算法的位置与c语言中数组位置的记作方法一样,都是从0开始,比如说线性表中第i个数据元素,那么它的位置是L.elem[i-1]。这个没什么难度,因为计算机的宝宝们都学习过数组,二者是一样的。
下面讨论一下线性表的插入和删除两种操作在顺序存储表示时的实现方法。
插入元素时将该元素插入到第i-1个元素和第i个元素之间,插入时,只有移动元素的位置才能表示出这种关系,所以在插入元素时,第i个元素后面的元素的地址会发生变化,代码如下。
Ststus ListInsert_Sq(SqList&L,int i,ElemType e){//在顺序表L的第i个元素之前插入元素e//i的和法值为1<=i<=L.length+1if(i<1||i>L.iength+1) return ERROR;//i的值超出了范围,不合法if(L.length>=L.listsize){newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTNCREMENT)*sizeof(ElemType));//插入元素时要考虑到原来的内存是否够用,这个if就是内存已满,那么就要分配新的内存空间if(!newbase)exit(OVERFLOW);//如果分配空间失败那么返回超出范围L.elem=newbase; //此时分配成功,L处于新分配的内存中L.listsize+=LISTINCREMENT; //在原有内存上增加了LISTINCREMENT个数据元素的空间}q=&(L.elem[i-1]);//q为被插入的数据元素for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p; //p为该线性表最后一个元素,当p>=q时,从p到q的元素依次后移,将上一个元素的基地址传递给相邻的下一元素*q=e; //将q的基地址赋给e++L.length; //该线性表长度加一return OK;}注释我已经标注的很清楚啦,过程就不多说啦。
删除操作与插入操作类似,并且比插入操作简单,简单的原因在于,删除时,不用考虑内存 问题,因为此时内存一定够用啦,所以就少了判断内存分配的语句。
Status ListDelete_Sq(SqList&L,int i,ElemType&e){//在线性表L中删除第i个元素,并用e返回其值if(i<1||i>(L.length)) return ERROR; //i的值超出范围p=&(L.elem[i-1]); //p为被删除的值e=*p; //将p的地址赋给eq=L.elem+L.length-1; //q为表尾元素for(++p;p<=q;++p)*(p-1)=*p //删除元素后为节省内存空间将第i个元素之后的所有元素向左移,补充空位--L.length; //线性表的长度减一return OK;}今天就写到这里啦,明天继续,天气凉啦,小伙伴们注意加衣服哦。
阅读全文
0 0
- 线性表的顺序存储表示时的插入与删除
- 线性表的输入输出插入删除查找(顺序表示)
- C语言实现顺序线性表的表示、插入、删除
- 数据结构之线性表的顺序存储结构(数组)的插入与删除
- 线性表的顺序存储结构及该结构的插入与删除
- 线性表的链式存储的插入与删除操作
- 顺序存储结构的插入与删除
- 顺序存储结构的插入与删除
- 顺序存储结构的插入与删除
- 线性表的顺序表示与实现
- 线性表的顺序表示与实现
- 线性表的顺序表示与实现
- 线性表的顺序表示与实现
- 【数据结构】线性表的顺序表示和实现,实现插入和删除算法,并且实现顺序表的合并
- 顺序存储---链表的插入与删除。
- 线性表的顺序存储结构的表示和实现
- 数据结构:线性表(顺序存储)顺序表类(实现顺序表的创建,输出,插入,删除功能)
- 线性表顺序存储结构插入和删除的实现 java
- 浅谈NGUI和UGUI的区别
- (M)Backtracking:131. Palindrome Partitioning
- 2018前端校招总结
- hdu 1269 迷宫城堡(强连通分量)
- 在MATLAB中的图例标注及实例说明
- 线性表的顺序存储表示时的插入与删除
- Java:匿名内部类和Lambda表达式
- LeetCode-189:Rotate Array (数组的循环移位)
- Jackson 解析json的一些用法
- 第10章 32 位 Intel 微处理器编程架构
- new和malloc的区别
- centos 7 上配置mysql 开机启动详解
- 二叉树简单实现
- 连续总结第八天