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

顺序表的常见算法

初始化线性表

参数用引用

Status InitList_Sq(SqList &L) //传入一个顺序表L
{L.elem = new ElemType[MAXSIZE]; //为该顺序表的基地址分配空间if(!L.elem) exit(OVERFLOW); //分配失败L.length = 0; //由于初始化的是一个空表,所以将其长度设置为0
return OK;
}

参数用的是引用型,对实参进行操作就是对形参进行操作

InitList_Sq是线性表名字,是顺序存储的,所以是Sq(sequence)

返回的状态值是Status

参数用指针

Status InitList_Sq(SqList *L) //传入一个顺序表L
{L->elem = new ElemType[MAXSIZE]; //为该顺序表的基地址分配空间if(!L->elem) exit(OVERFLOW); //分配失败L->length = 0; //由于初始化的是一个空表,所以将其长度设置为0
return OK;
}

 销毁线性表

void DestroyList_Sq(SqList &L) //传入一个顺序表L
{if (L.elem) //若该顺序表的基地址空间不为空delete[] L.elem; //则释放存储空间(因为线性表的顺序存储是用的数组,所以在delete后加上一个中括号)
}

清空线性表

void ClearList_Sq(SqList &L)
{L.length = 0; //将线性表的长度置为0
}

求线性表的长度(只读访问)

因为只读访问,实际上并不需要修改线性表,所以这个线性表SqList L,不需要使用引用型,即不需要+"&"这个符号

int GetLength_Sq(SqList L)
{return (L.length);
}

判断顺序表是否为空

int IsEmpty_Sq(SqList L)
{if (L.length == 0)return 1;elsereturn 0;
}

 

取值(根据位置i查找)

int GetElem_Sq(SqList L, int i, ElemType &e) //为什么这里要用&
{
//判断i值(不是索引)是否合理,若不合理,返回ERROR
if(i < 1 || i > L.length)
return ERROR;e = L.elem[i-1]; //第i-1的单元存储着第i个数据。例:第1个位置的元素,实际上对应的是索引位置上的第0个元素return OK;
}
//使用:
int value = 0;
if (GetElem_Sq(L, 2, value) == OK) {
// 成功获取到值,可以在下面的代码中编辑 value 的逻辑
}

查找(根据值为e查找)

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

 

顺序表的插入

Status ListInsert_Sq(SqList &L, int i, ElemType e)
{
//判断插入位置i是否合法if(i < 1 || i > L.length + 1) return ERROR;
//判断顺序表的存储空间是否已满
if(L.length == MAXSIZE) return ERROR;
//将第n至第i位的元素依次向后移动一个位置,空出第i个位置
for(int j = L.length - 1; j >= i - 1; j--)L.elem[j + 1] = L.elem[j];
//将要插入的新元素e放入第i个位置L.elem[i - 1]=e;
//表长加1,插入成功返回OK
++L.length;
return OK;
}

给个例子加强理解

 

顺序表的删除(删除的原理跟插入挺相似的,就是一个向前移动一个向后移动的问题)

Status ListDelete_Sq(SqList &L, int i)
{//判断删除位置i是否合法if(i < 1 || i > L.length) return ERROR;//将第i+1至第n位的元素依次向前移动一个位置for (int j = i; j <= L.length - 1; j++)L.elem[j - 1] = L.elem[j];//表长减1,删除成功返回OK--L.length;return OK;
}

 

http://www.lryc.cn/news/576613.html

相关文章:

  • FPGA设计的时序分析概要
  • 鸿蒙 Grid 与 GridItem 深度解析:二维网格布局解决方案
  • 【 Linux 输入子系统】
  • python的医疗废弃物收运管理系统
  • 【力扣 中等 C】79. 单词搜索
  • Webpack 核心与基础使用
  • 数据结构之——顺序栈与链式栈
  • 个人日记本小程序开发方案(使用IntelliJ IDEA)
  • ORB-SLAM + D435i提取相机位姿 + ROS发布
  • 现代串口通讯UI框架性能对比
  • 容器安全——AI教你学Docker
  • 机器学习——线性回归
  • 【数据标注师】3D标注
  • 使用Calibre对GDS进行数据遍历
  • Note2.4 机器学习:Batch Normalization Introduction
  • 【go】初学者入门环境配置,GOPATH,GOROOT,GOCACHE,以及GoLand使用配置注意
  • LNA设计
  • 【安卓Sensor框架-1】SensorService 的启动流程
  • iOS 使用 SceneKit 实现全景图
  • MCPA2APPT:基于 A2A+MCP+ADK 的多智能体流式并发高质量 PPT 智能生成系统
  • 微处理原理与应用篇---STM32寄存器控制GPIO
  • Unity2D 街机风太空射击游戏 学习记录 #16 道具父类提取 旋涡道具
  • FPGA内部资源介绍
  • Python爬虫实战:研究sanitize库相关技术
  • 笔记07:网表的输出与导入
  • SQL关键字三分钟入门:RANK() —— 窗口函数
  • Java AI 新纪元:Spring AI 与 Spring AI Alibaba 的崛起
  • JavaScript正则表达式之正向先行断言(Positive Lookahead)深度解析
  • 第8章-财务数据
  • 某音Web端消息体ProtoBuf结构解析