当前位置: 首页 > news >正文

数据结构_2.2、顺序表插入删除查找

1、线性表的顺序存储表示定义:

线性表:是具有相同数据类型的n (n≥0)个数据元素的有限序列

顺序表:用顺序存储的方式实现线性表

顺序存储:把逻辑上相邻的元素存储在物理 位置上也相邻的存储单元中,元素之间的关 系由存储单元的邻接关系来体现。

ElemType :就是你的顺序表中存放的数据元素类型

2、顺序表的存储结构

2.1、顺序表的实现——静态分配

给各个数据元素分配连续的存储空间,大小为 MaxSize*sizeof(ElemType)

#include <stdio.h>
#define MaxSize 10 //定义最大长度typedef struct {int data[MaxSize]; //用静态的“数组”存放数据元素int length; //顺序表的当前长度
} SqList;// 初始化顺序表
void InitList(SqList &L) {L.length = 0; // 顺序表初始化长度为0
}int main(){SqList L; //声明一个顺序表InitList(L); //初始化顺序表//尝试 “违规 ” 打印整个 data 数组
//	printf("data[%d]=%d\n", L.data);for(int i=0;i<MaxSize;i++)printf("data[%d]=%d\n", i, L.data[i]);return 0;
}

2.2、顺序表的实现——动态分配

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10 //定义最大长度typedef struct {int *data; //指示动态分配数组的指针int length;//顺序表的当前长度int MaxSize; //顺序表的最大容量
} SqList;void InitList(SqList &L){
//用 malloc 函数申请一片连续的存储空间
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}//增加动态数组的长度
void IncreaseSize(SqList &L,int len){int *p=L.data;L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));for(int i=0; i<L.length; i++){L.data[i]=p[i];//顺序表最大长度增加 len,时间开销大}L.MaxSize=L.MaxSize+len;free(p);//释放原来的内存空间}int main(){SqList L; //声明一个顺序表InitList(L); //初始化顺序表IncreaseSize(L,5);free(L.data);return 0;
}

3、顺序表中基本操作的实现

3.1、初始化

  • 顺序表的初始化操作就是构造个空的顺序表。
  • 为顺序表L动态分配个预定义大小的数组空间,使 elem 指向这段空间的基地址。
  • 将表的当前长度设为0。
  • 动态分配线性表的存储区域可以更有效地利用系统的资源 当不需要该线性表时 可以使用 销毁操作及时释放占用的存储空间。

【算法描述】

//构造一个空的顺序表L
Status Initlist(SqList &L){L.elem=new Elemrype [MAXSIZE];//为顺序表分配一个大小为 MAXSI2E的数组空间if(!L.elem)exit(OVERFLON);//存储分配失败退出L.length=0;//空表长度为 0return OK;
}

3.2、取值

  • 取值操作是根据指定的位置序号i, 获取顺序表中第i个数据元素的值。
  • 由于顺序存储结构具有随机存取的特点 可以直接通过数组下标定位得到,elem[-1]单元存储第i个数据元素。
  • 顺序表取值算法的时间复杂度为0(1)。
Status GetElem(SqList L,int i, ElemType &e)
{if {i<ll li>L.length) return ERROR; //判断i值是否合理,若不合理, 返回 ERRORe=L.elem[i-1]; //elem[i-1] 单元存储第i个数据元素return OK;
}i

3.3、查找

  • 查找操作是根据指定的元素值e, 查找顺序表中第1个与e相等的元素。若查找成功,则返回该元素在表中的位置序号;若查找失败,则返回0。

  • 从第一个元素起,依次和 e相比较,若找到与 e相等的元素 L.elem[i], 则查找成功,返回该元素的序号 i+1

  • 若查遍整个顺序表都没有找到,则查找失败, 返回0。

  • 顺序表按值查找算法的平均时间复杂度为 O(n)

int LocateELem(SqList L,ElemType e){//在顺序表工中查找值为e的数据元素,返回其序号for(i=0; i<L.length; i++)if(L.elem[i]==e)return i+l;  //查找成功,返回序号 i+1
return 0;            //查找失败,返回 0}

3.4、插入

顺序表的插入算法步骤:

顺序表插入算法的平均时间复杂度为 O(n)

Status Listinsert(SqList &L, int i, ElemType e)
{//在顺序表 L 中第 i 个位置之前插入新的元素 e, i值的合法范围是 1<=i<=L.length+lif ((i < l) || (i > L.length + l)) return ERROR;                       //i值不合法if (L.length == MAXSIZE) return ERROR;                       //当前存储空间已满for (j = L.length - 1; j >= i - 1; j--)L.elem[j + l] = L.elem[j];              //插入位置及之后的元素后移L.elem[i - l] = e;                          //将新元素e放入第l个位置++L.length;                                 //表长加1return OK;}

3.5、删除

顺序表的删除算法步骤

  • 判断删除位置 i 是否合法(合法值为 1 ≤ i ≤n), 若不合法则返回 ERROR。

  • 将第 i个至第n个的元素依次向前移动一个位置 (i = n时无需移动)

  • 表长减 1

  • 顺序表删除算法的平均时间复杂度为O(n)。

Status ListDelete(SqList &l int i)
{//在顺序表工中删除第i个元素,i.值的合法范闱是1≤i≤L.length
if((i<1)|l(i>L.length)) //i值不合法return ERROR;
for(j=i;j<-L.length-l;j++)L.elem[j-1]=L.elem[j];//被删除元素之后的元素前移
--L.length;//表长减 1
return OK;
}
http://www.lryc.cn/news/453039.html

相关文章:

  • 嵌入式C语言自我修养:编译链接
  • Mac制作Linux操作系统启动盘
  • PHP语言发展历程
  • Notepad++ 之 AndroidLogger插件
  • 开源2+1链动模式AI智能名片O2O商城小程序源码:线下店立体连接的超强助力器
  • 我为什么决定关闭ChatGPT的记忆功能?
  • 如何使用ssm实现中学生课后服务的信息管理与推荐+vue
  • 【分别为微服务云原生】9分钟ActiveMQ延时消息队列:定时任务的革命与Quartz的较量
  • 泛型编程--模板【C++提升】(特化、类属、参数包的展开、static、模板机制、重载......你想知道的全都有)
  • 安卓使用memtester进行内存压力测试
  • Dave Cheney: Go语言之禅
  • SpringMVC源码-AbstractUrlHandlerMapping处理器映射器将实现Controller接口的方式定义的路径存储进去
  • 满填充透明背景二维码生成
  • Python | Leetcode Python题解之第452题用最少数量的箭引爆气球
  • 代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作删除二叉搜索树中的节点修剪二叉搜索树
  • 使用Apifox创建接口文档,部署第一个简单的基于Vue+Axios的前端项目
  • TCP的第三次握手没有回复,会出现哪些问题现象
  • 【工具】arxiv_latex_cleaner 去除latex注释
  • macOS开发环境配置与应用开发
  • 15分钟学 Python :编程工具 Idea 和 vscode 中配置 Python ( 补充 )
  • MyBatis 如何实现延迟加载?深度探讨 MyBatis 的延迟加载:如何优化数据访问效率
  • springboot系列--web相关知识探索三
  • AI冲击下的编程职业未来:你缺的不是技术,而是跨学科思维!
  • 是否是 2 的幂次方
  • 音视频入门
  • C++随心记 续一
  • 消息中间件:RabbitMQ
  • sql-labs:42~65
  • KaTeX.js渲染数学公式
  • 算法训练营打卡Day19