中国交通建设监理协会网站打不开/西安百度公司地址介绍

中国交通建设监理协会网站打不开,西安百度公司地址介绍,用jsp做的汽车网站,电商入门教学前言:大家好😍,本文主要介绍了数据结构——顺序表部分的内容 目录 一、线性表的定义 二、线性表的基本操作 三.顺序表 1.定义 2. 存储结构 3. 特点 四 顺序表操作 4.1初始化 4.2 插入 4.2.1头插 4.2.2 尾插 4.2.3 按位置插 4.3 …

前言:大家好😍,本文主要介绍了数据结构——顺序表部分的内容

目录

一、线性表的定义

二、线性表的基本操作

三.顺序表

1.定义

2. 存储结构

3. 特点

四 顺序表操作

4.1初始化

4.2 插入

4.2.1头插

4.2.2 尾插

4.2.3 按位置插

4.3 删除

4.3.1 头删

4.3.2 尾删

 4.3.3 按位置删

4.3.4 按值删

4.4 查找 

4.5 删除值val出现的位置

4.6 其余操作

4.7 主函数测试


一、线性表的定义

线性表是具有相同数据类型n个数据元素有限序列,n为表长,当n=0时线性表时一个空表。用l命名线性表,表示为l=(a1,a2,  ,an)。

线性表除第一个元素之外,每个元素都有直接前驱,除最后一个元素之外每个元素都有直接后继

二、线性表的基本操作

Initlist(&L):初始化表,构造一个空的线性表L,构造一个空的线性表,分配内存空间

Destroylist(&L):销毁。销毁线性表并释放线性表L所占用的内存空间

Insertlist(&L,i,e):插入,在表L中第i个位置上插入指定元素e

Deletelist(&L,i,&e):删除,删除表L中第i个位置上的元素,并用e返回删除元素的值

LocateElem(L,e):按值查找,在表L中查找具有给定关键字e值的元素

   GetElem(L,i):按位查找,获取表L中第i个位置的元素的值

Length(L):求表长,返回线性表L的长度,即L中数据元素的个数

Printlist(L):输出,输出线性表所有元素值

Empty(L):判空,若L为空,返回true,否则返回false

对参数的修改结果需要引用&

三.顺序表

1.定义

顺序表是一种线性表的存储实现方式。线性表是具有相同数据类型的元素构成的有限序列,顺序表通过数组的形式将这些元素存储在内存中,并通过下标索引来访问和操作元素。

2. 存储结构

顺序表通常使用数组来实现,数组的每个位置存储一个元素。例如,一个顺序表可以表示为:

数组:[a0, a1, a2, ..., an-1]
其中,a0 是表头元素,an-1 是表尾元素。

3. 特点


优点:
随机访问:可以通过下标索引快速访问任意位置的元素,时间复杂度为 O(1)。
存储密度高:由于没有额外的指针存储空间,顺序表的存储利用率较高。
操作简单:基于数组的实现使得顺序表的操作逻辑相对简单。
缺点:
插入和删除效率低:插入或删除元素时,需要移动大量元素以保持顺序表的连续性,时间复杂度为 O(n)。
存储空间固定:顺序表的存储空间在初始化时需要预先分配,难以动态扩展。如果分配的空间不足,需要重新分配更大的空间并复制数据;如果分配过多,则会浪费空间。
内存碎片问题:频繁的动态扩展和收缩可能导致内存碎片化。

四 顺序表操作

点h文件中定义了一个顺序表(SeqList)的结构体

#define INIT_SIZE 10 //初始化时malloc购买的格子数量
//可库容的顺序表的结构体设计
typedef int ELEM_TYPE;
typedef struct SeqList
{ELEM_TYPE* elem;//用来接收malloc返回的数组首地址int length;//存放有效值个数int listsize;//存放数组的总的格子数
}SeqList, * PSeqList;
  • 作用:定义了一个宏 INIT_SIZE,表示顺序表初始化时分配的内存大小(即初始容量)。

  • INIT_SIZE 被设置为 10,表示初始化时会分配 10 个元素的空间。

  • 结构体名称SeqList,表示顺序表的结构体。

  • 指针类型别名PSeqList,表示指向 SeqList 的指针。

  • ELEM_TYPE* 表示 elem 是一个指针,指向 ELEM_TYPE 类型的数据。ELEM_TYPE 是一个类型别名

4.1初始化

void Init_SeqList(struct SeqList* psl)
{//0.安全处理   每一个函数都要写的assert(nullptr != psl);if (nullptr == psl){exit(EXIT_FAILURE);}//1.对我们的 elem 用来去malloc 在堆区购买一块连续的空间psl->elem = (ELEM_TYPE*)malloc(INIT_SIZE * sizeof(ELEM_TYPE));if (NULL == psl->elem){exit(EXIT_FAILURE);}//2.对我们的 length 初始化为0psl->length = 0;//3.对我们的 listsize 初始化为 INITSIZEpsl->listsize = INIT_SIZE;}
  • 类型转换malloc 返回的是 void* 类型的指针,需要强制转换为 ELEM_TYPE*

  • 安全检查:如果 malloc 分配失败(返回 NULL),程序会退出。

  • length:表示顺序表中当前存储的元素个数,初始值为 0。

  • listsize:表示顺序表当前分配的总容量,初始值为 INIT_SIZE

  • psl->elem 存储了这块内存的首地址。

  • 通过 psl->elem[i] 可以访问顺序表中的第 i 个元素。

  • 存储元素elem 指向的内存空间被用来存储顺序表中的所有元素。例如,如果 elem 指向的内存空间大小为 INIT_SIZE,则可以存储 INIT_SIZEELEM_TYPE 类型的元素。

4.2 插入

4.2.1头插

bool Insert_Seqlist_head(PSeqList psl, ELEM_TYPE val)
{//0.assert//0.5 判满if (Is_Full(psl)){Increase(psl);}//此时,肯定有空闲格子//1.集体向后挪(尾巴先动)for (int i = psl->length - 1; i >= 0; i--){psl->elem[i + 1] = psl->elem[i];}//2.将val放入0号下标psl->elem[0] = val;//3.有效值个数+1psl->length++;return true;
}
  • 逻辑:从顺序表的尾部开始,逐个将元素向后移动一个位置。

    psl->elem[i + 1] = psl->elem[i]:将第 i 个元素移动到第 i + 1 个位置。
  • 循环条件:从 psl->length - 1 开始,直到 i = 0,确保所有元素都向后移动。

  • 更新顺序表的长度,反映新插入的元素。

  • 函数返回 true,表示插入操作成功

psl->length 表示顺序表中当前存储的有效元素的个数。例如:如果 psl->length 的值为 5,说明顺序表中有 5 个有效元素。

psl->length - 1 是对 psl->length 的值减去 1,如果 psl->length 为 5,那么最后一个有效元素的索引为 5 - 1 = 4。常用于从顺序表的最后一个有效元素开始,逐个向前遍历所有元素

4.2.2 尾插

bool Insert_Seqlist_tail(PSeqList psl, ELEM_TYPE val)
{//0.assert//0.5 判满if (Is_Full(psl)){Increase(psl);}//此时,肯定有空闲格子psl->elem[psl->length] = val;psl->length++;return true;
}

4.2.3 按位置插

bool Insert_Seqlist_pos(PSeqList psl, ELEM_TYPE val, int pos)
{//默认pos==0 则认为是头插//0.安全性处理   psl    pos合法性判断assert(nullptr != psl);assert(pos >= 0 && pos <= psl->length);//0.5 判满if (Is_Full(psl)){Increase(psl);}//此时,肯定有空闲格子//1.将插入位置之后的元素,统一向后挪动,把插入位置给空出来for (int i = psl->length - 1; i >= pos; i--){psl->elem[i + 1] = psl->elem[i];}//2.插入psl->elem[pos] = val;//3.length++psl->length++;return true;
}

通过 psl->elem[i] 可以访问顺序表中的第 i 个元素。

4.3 删除

4.3.1 头删

bool Del_Seqlist_head(SeqList* psl)
{//0.assert//0.5 判空if (Is_Empty(psl))return false;//1.除了第一个元素之外,统一向前挪动for (int i = 1; i <= psl->length - 1; i++){psl->elem[i - 1] = psl->elem[i];}//2.有效值个数-1psl->length--;return true;
}

//1.除了第一个元素之外,统一向前挪动
    for (int i = 1; i <= psl->length - 1; i++)
    {
        psl->elem[i - 1] = psl->elem[i];
    }

 //1.集体向后挪(尾巴先动)
    for (int i = psl->length - 1; i >= 0; i--)
    {
        psl->elem[i + 1] = psl->elem[i];
    }

4.3.2 尾删

//尾删
bool Del_Seqlist_tail(SeqList* psl)
{//0.assert//0.5 判空if (Is_Empty(psl))return false;psl->length--;return true;
}

 4.3.3 按位置删

bool Del_Seqlist_pos(SeqList* psl, int pos)
{//0.assert psl posassert(psl != NULL);assert(pos >= 0 && pos < psl->length);//0.5 判空isemptyif (Is_Empty(psl))return false;//1.将pos位置之后的有效值,统一向前覆盖(头先动)for (int i = pos + 1; i <= psl->length - 1; i++){psl->elem[i - 1] = psl->elem[i];}//2.有效值个数-1psl->length--;return true;
}

4.3.4 按值删


//按值删(只删除这个val值出现的第一次的位置)
bool Del_Seqlist_val(SeqList* psl, ELEM_TYPE val)
{//0.assert//0.5 isempty//1.通过调用查找函数,查找val值在顺序表中的位置int index = Search_SeqList(psl, val);//2.若返回的位置下标为-1 返回假  若不等于-1,则此时怎么删if (index == -1)return false;return Del_Seqlist_pos(psl, index);
}

4.4 查找 


//4.查找数据是否已经存在(若存在,则只需要返回下标即可  找不到返回-1)
int Search_SeqList(PSeqList psl, ELEM_TYPE val)
{//0.assertfor (int i = 0; i < psl->length; i++){if (psl->elem[i] == val)return i;}return -1;
}

4.5 删除值val出现的位置

//删除当前val值出现的所有位置(1)
bool Del_SeqList_All_Val1(struct SeqList* psl, ELEM_TYPE val)
{int count = 0;for (int i = 0; i < psl->length; i++){if (psl->elem[i] == val){count++;}}for (int i = 0; i < count; i++){int index = Search_SeqList(psl, val);Del_Seqlist_pos(psl, index);}return true;}

 

//删除当前val值出现的所有位置(2)
bool Del_SeqList_All_Val2(struct SeqList* psl, ELEM_TYPE val)
{int qianfangkongxiangezishu = 0;for (int i = 0; i < psl->length; i++){if (psl->elem[i] == val)qianfangkongxiangezishu++;elsepsl->elem[i - qianfangkongxiangezishu] = psl->elem[i];}psl->length = psl->length - qianfangkongxiangezishu;return true;
}

4.6 其余操作

//5.判空
bool Is_Empty(PSeqList psl)
{return psl->length == 0;
}//6.判满
bool Is_Full(PSeqList psl)
{return psl->length == psl->listsize;
}//7.扩容函数(1.5 2)   默认用2倍扩容
void Increase(PSeqList psl)
{ELEM_TYPE* tmp = (ELEM_TYPE*)realloc(psl->elem, psl->listsize * sizeof(ELEM_TYPE) * 2);if (tmp != nullptr){psl->elem = tmp;}}//8.清空  (不释放已购买的内存)
void Clear(PSeqList psl)
{//malloc申请空间先不释放,而是认为所有格子里都是无效值psl->length = 0;
}//9.销毁  (需要释放malloc购买的内存的)
void Destroy(PSeqList psl)
{free(psl->elem);psl->length = psl->listsize = 0;
}//打印
void Show(PSeqList psl)
{//assertfor (int i = 0; i < psl->length; i++){printf("%d ", psl->elem[i]);}printf("\n");}

4.7 主函数测试

int main()
{struct SeqList sq;Init_SeqList(&sq);Insert_Seqlist_head(&sq, 100);Insert_Seqlist_head(&sq, 101);Insert_Seqlist_head(&sq, 102);Insert_Seqlist_tail(&sq, 200);Insert_Seqlist_tail(&sq, 201);Insert_Seqlist_tail(&sq, 202);Insert_Seqlist_tail(&sq, 2000);Insert_Seqlist_tail(&sq, 2010);Insert_Seqlist_tail(&sq, 2020);Insert_Seqlist_pos(&sq, 10000, 3);Show(&sq);Insert_Seqlist_head(&sq, 111);Insert_Seqlist_tail(&sq, 222);Show(&sq);//删除Del_Seqlist_head(&sq);Del_Seqlist_tail(&sq);Show(&sq);Del_Seqlist_pos(&sq, 4);Show(&sq);Del_Seqlist_pos(&sq, 8);Show(&sq);Del_Seqlist_pos(&sq, 0);Show(&sq);Del_Seqlist_val(&sq, 201);Show(&sq);//Clear(&sq);//Show(&sq);//Destroy(&sq);//Show(&sq);//------------------------------------------------Insert_Seqlist_pos(&sq, 3, 2);Insert_Seqlist_pos(&sq, 3, 4);Insert_Seqlist_pos(&sq, 3, 6);Show(&sq);Del_SeqList_All_Val2(&sq, 3);Show(&sq);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF | LSDB 链路状态数据库 / SPF 算法 / 实验

注&#xff1a;本文为 “OSPF | LSDB / SPF ” 相关文章合辑。 LSDB 和 SPF 算法 潇湘浪子的蹋马骨汤 发布 2019-02-15 23:58:46 1. 链路状态数据库 (LSDB) 链路状态协议除了执行洪泛扩散链路状态通告&#xff08;LSA&#xff09;以及发现邻居等任务外&#xff0c;其第三个任…

前端---CSS(前端三剑客)

1.基本语法规范 选择器 {⼀条/N条声明} • 选择器决定针对谁修改 (找谁) • 声明决定修改啥. (⼲啥) • 声明的属性是键值对. 使⽤ ; 区分键值对, 使⽤ : 区分键和值 比如&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta…

【C++】 —— 笔试刷题day_6

刷题day_6&#xff0c;继续加油哇&#xff01; 今天这三道题全是高精度算法 一、大数加法 题目链接&#xff1a;大数加法 题目解析与解题思路 OK&#xff0c;这道题题目描述很简单&#xff0c;就是给我们两个字符串形式的数字&#xff0c;让我们计算这两个数字的和 看题目我…

todolist docker 小工具

参考链接 前排提示 没有中文&#xff0c;可使用浏览器 翻译 前提 安装docker安装docker-compose 下载仓库 git clone https://github.com/JordanKnott/taskcafe进行安装 cd taskcafe docker-compose -p taskcafe up -d服务启动后会监听在 3333 端口上&#xff0c;通过浏览器…

Unity--GPT-SoVITS接入、处理GPTAPI的SSE响应流

GPT-SoVITS GPT-SoVITS- v2&#xff08;v3也可以&#xff0c;两者对模型文件具有兼容&#xff09; 点击后 会进入新的游览器网页 ----- 看了一圈&#xff0c;发现主要问题集中在模型的训练很需要CPU&#xff0c;也就是模型的制作上&#xff0c;问题很多&#xff0c;如果有现有…

《TypeScript 快速上手:类型、编译与严格模式的简明教程》

一、TypeScript介绍 在引入编程社区 20 多年后&#xff0c;JavaScript 现在已成为有史以来应用最广泛的跨平台语言之一。JavaScript 最初是一种用于向网页添加微不足道的交互性的小型脚本语言&#xff0c;现已发展成为各种规模的前端和后端应 用程序的首选语言。虽然用 JavaSc…

ROS2 系统架构

1.操作系统层 ros2是基于Linux、Windows、macOS系统建立的&#xff0c;这一层为ros2提供了各种基础的硬件驱动&#xff0c;比如网卡驱动&#xff0c;常用USB驱动和常用摄像头驱动等。 2.DDS实现层 ros2的核心通信是采用第三方的通信组件来实现的&#xff0c;这个第三方就是数…

【HTML】二、列表、表格

文章目录 1、列表1.1 无序列表1.2 有序列表1.3 定义列表 2、表格2.1 定义2.2 表格结构标签2.3 合并单元格 1、列表 列表分为&#xff1a; 无序列表有序列表定义列表&#xff1a;一个标题下有多个小分类 1.1 无序列表 ul嵌套li&#xff0c;ul是无序列表&#xff0c;li是列表…

redis zset基本介绍以及底层实现

ZSet&#xff08;Sorted Set&#xff09;有序集合 介绍 Redis 中的有序集合(Sorted Set)是在集合(Set)的基础上,为每个成员关联了一个分数(score)。这个分数可以用来对集合中的成员进行排序。 有序集合保留了集合不能有重复成员的特性&#xff08;成员不能重复&#xff0c;分值…

政策助力,3C 数码行业数字化起航

政策引领&#xff0c;数字经济浪潮来袭 在当今时代&#xff0c;数字经济已成为全球经济发展的核心驱动力&#xff0c;引领着新一轮科技革命和产业变革的潮流。我国深刻洞察这一发展趋势&#xff0c;大力推进数字化经济发展战略&#xff0c;为经济的高质量发展注入了强大动力。 …

IntelliJ IDEA 快捷键系列:重命名快捷键详解

目录 引言一、默认重命名快捷键1. Windows 系统‌2. Mac 系统‌ 二、操作步骤与技巧1. 精准选择重命名范围‌2. 智能过滤无关内容‌ 三、总结 引言 在代码重构中&#xff0c;‌重命名变量、类、方法‌ 是最常用的操作之一。正确使用快捷键可以极大提升开发效率。本文针对 ‌Ma…

文档搜索引擎

首先获取很多网页(爬虫->一个http客户端,发送http请求获取http响应结果(就是网站))(批量化的获取很多的页面) 再根据用户输入的查询词,在网页中进行查找 用户输入查询词之后,如何让查询词和当前这些网页进行匹配 ->使用倒排索引 倒排索引 1.文档: 每个待搜索的网页(被爬…

开源工具利器:Mermaid助力知识图谱可视化与分享

在现代 web 开发中&#xff0c;可视化工具对于展示流程、结构和数据关系至关重要。Mermaid 是一款强大的 JavaScript 工具&#xff0c;它使用基于 Markdown 的语法来呈现可定制的图表、图表和可视化。对于展示流程、结构和数据关系至关重要。通过简单的文本描述&#xff0c;你可…

【AI News | 20250316】每日AI进展

AI Repos 1、ReActMCP 将网络搜索能力集成到AI助手中的一个MCP服务&#xff1a;ReActMCP Web Search&#xff0c;相当于给AI装了个搜索引擎&#xff0c;可以实时查找最新的内容。它基于Exa API执行基本和高级网络搜索&#xff0c;高级搜索比如限制搜索的网站范围、指定日期范围…

【VUE】day04-组件的生命周期、组件之间的数据共享、ref引用、购物车案例

【VUE】day04-组件的生命周期、组件之间的数据共享、ref引用、购物车案例 1. 组件之间的关系2. 使用组件的三个步骤3. vue.components全局注册组件4. 自动生成右边标签插件5. 组件的props6. 结合v-bind使用自定义属性7. props的默认default值8. type值类型9. 组件之间的样式冲突…

量化交易学习笔记02:双均线策略

双均线策略示例 个股&#xff1a;中国平安 回测日期&#xff1a;2022-5-1至2023-5-1 短均线&#xff1a;5天 长无线&#xff1a;10天 代码&#xff1a; def initialize(context):# 初始化此策略# 设置我们要操作的股票池, 这里我们只操作一支股票# """标的&qu…

Part1:基于国内源完成Kubernetes集群部署

集群规划 操作系统&#xff1a;CentOS7 内核版本&#xff1a;5.4&#xff08;需升级&#xff09; 组件版本说明操作系统内核5.4RPM方式升级docker26.1.4yum安装cri-docker0.3.16二进制安装kubeadm1.30.11yum安装kubealet1.30.11yum安装kubectl1.30.11yum安装kubectl1.30.11yu…

C++单例模式精解

单例模式&#xff08;重点*&#xff09; 单例模式是23种常用设计模式中最简单的设计模式之一&#xff0c;它提供了一种创建对象的方式&#xff0c;确保只有单个对象被创建。这个设计模式主要目的是想在整个系统中只能出现类的一个实例&#xff0c;即一个类只有一个对象。 将单…

【微服务】java中http调用组件深入实战详解

目录 一、前言 二、http调用概述 2.1 什么是http调用 2.1.1 http调用步骤 2.2 HTTP调用特点 2.3 HTTP调用应用场景 三、微服务场景下http调用概述 3.1 微服务开发中http调用场景 3.2 微服务组件中http的应用 四、常用的http调用组件 4.1 java中常用的http组件介绍 4…

Implementing SAP BPC Embedded - 2nd Edition

Implementing SAP BPC Embedded - 2nd Edition