初阶数据结构(顺序表的实现)

1. 线性表

线性表是(linear list)n个具有相同特性的数据元素的有限队列。线性表是一种在实际广泛应用的的数据结构,常见的线性表:顺序表,链表,栈,队列,字符串。。。

线性表在逻辑结构上是连续的。但在物理结构上不一定连续,线性表在物理上存储时,通常以数组和链表的形式存储。

2. 顺序表

2.1 概念与结构

概念:顺序表是用一段物理地址连续的存储单元一次存储数据元素的线性结构,一般采用与数组类似的存储方式。

顺序表与数组的区别

顺序表的底层是数组,对数组进行封装,实现了增删查改等接口

2.2 分类

2.2.1 静态顺序表

概念:使用定长数组进行存储数据的结构

    //静态顺序表
    typedef int SLDataType;
    #define N 7
    typedef struct SeqList
    {
        SLDataType arr[N];// 定长数组
        int size;        //有效数据个数
    }SL;

2.2.2 动态顺序表

//动态顺序表
typedef int SLDataType;
typedef struct SeqList
{
    SLDataType* arr; //动态数组
    int size;        //有效数据个数
    int capacity;    //空间大小
}SL;

2.3 动态顺序表的实现

// 初始化和销毁
void SLInit(SL* ps);
void SLDestroy(SL* ps);
void SLPrint(SL* ps);
// 扩容
void SLCheckCapacity(SL* ps);
// 头部插⼊删除 / 尾部插⼊删除
void SLPushBack(SL* ps, SLDataType x);
void SLPopBack(SL* ps);
void SLPushFront(SL* ps, SLDataType x);
void SLPopFront(SL* ps);
// 指定位置之前插⼊ / 删除数据
void SLInsert(SL* ps, int pos, SLDataType x);
void SLErase(SL* ps, int pos);
//查找
int SLFind(SL* ps, SLDataType x);

2.3.1 初始化,销毁,打印

// 初始化
void SeqListInit(SL* ps)
{ps->arr = NULL;ps->capacity = ps->size = 0;
}//销毁
void SeqListDestroy(SL* ps)
{if (ps->arr!=NULL)free(ps->arr);ps->arr = NULL;free(ps->capacity & ps->size);ps->capacity = ps->size = 0;
}
//打印
void SeqListPrint(SL* ps)
{for (int i = 0; i < ps->size; i++){printf("%d->", ps->arr[i]);}printf("NULL\n");
}

2.3.2 扩容

void SLcheckCapacity(SL* ps)
{//插入之前判断空间是否足够//三目操作符if (ps->capacity == ps->size){int newcapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;SLDateType* tmp = (SLDateType*)realloc(ps->arr, sizeof(SLDateType) * newcapacity);if (tmp == NULL){printf("realloc fail!\n");exit(1);}ps->arr = tmp;ps->capacity = newcapacity;}
}

2.3.3 头部插⼊删除 / 尾部插⼊删除

//头插
void SeqListPushFront(SL* ps, SLDateType x)
{SLcheckCapacity(ps);for (int i = ps->size;i>0; i--)ps->arr[i] = ps->arr[i - 1];ps->arr[0] = x;ps->size++;
}//头删
void SeqListPopFront(SL* ps)
{assert(ps);assert(ps->size);for (int i = 0; i < ps->size-1; i++)ps->arr[i] = ps->arr[i + 1];ps->size--;
}
//尾删
void SeqListPopBack(SL* ps)
{assert(ps);assert(ps->size);ps->size--;
}
//尾插
void SeqListPushBack(SL* ps, SLDateType x)
{assert(ps);SLcheckCapacity(ps);//检查容量ps->arr[ps->size] = x;ps->size++;
}

2.3.4 指定位置之前插⼊/删除数据

// 顺序表在pos位置插入x
void SeqListInsert(SL* ps, int pos, SLDateType x)
{SLcheckCapacity(ps);assert(ps);assert(pos >= 0 && pos <= ps->size);for (int i = ps->size; i > pos; i--)ps->arr[i] = ps->arr[i - 1];ps->arr[pos] = x;ps->size++;
}// 顺序表删除pos位置的值
void SeqListErase(SL* ps, int pos)
{assert(ps);assert(ps->size);for (int i = pos; i<ps->size-1; i++){ps->arr[i] = ps->arr[i + 1];}ps->size--;
}

2.3.5 查找

// 顺序表查找
int SeqListFind(SL* ps, SLDateType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (x == ps->arr[i])return i;}return -1;
}

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

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

相关文章

招采全流程电子化优势及重要功能环节(数智化招采系统)

招投标全流程电子化&#xff0c;是加速招标采购领域数字化转型、创新招标采购交易机制的重要举措。它在构建高效规范、公平竞争、充分开放的大市场环境中起着至关重要的作用。 招采电子化历史沿革 2013年2月&#xff0c;国家发展改革委等八部门发布了《电子招标投标办法》&am…

【git命令大全】

一个练习git命令的平台&#xff1a;Learn Git Branching 1. git status -s --查看仓库状态 2. git add 文件名 --添加需要提交的文件名&#xff08;加路径--参考git status 打印出来的文件路径&#xff09; 3. git stash -u -k --忽略其他文件&#xff0c;把现修改的隐藏…

python杨辉三角的两种书写方式

第一种&#xff08;设置二维列表设置每个元素为0进行替换元素&#xff09; 代码演示&#xff1a; n eval(input("请输入想要的行数")) lst[[0 for j in range(n)] for i in range(n)] # lst2[[0]*n]*n for i in range(n):for j in range(i1):if j0 or ji:lst[i][j…

七款好用的电脑监控软件推荐|电脑屏幕监控软件最新整理!

电脑监控软件在家庭和企业环境中变得越来越重要。它们帮助父母监督孩子的在线活动&#xff0c;也帮助企业确保员工在工作时间内的生产力和数据安全。以下是七款优秀的电脑监控软件推荐&#xff0c;希望能帮助您选择。 固信软件https://www.gooxion.com/ 固信软件 固信软件提供…

极狐GitLab 17.0 重磅发布,100+ DevSecOps功能更新来啦~【七】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

数据库中的数据视图(View):深入理解与应用

引言 编程梦想家&#xff08;大学生版&#xff09;-CSDN博客 在数据库管理中&#xff0c;数据视图&#xff08;View&#xff09;是一个非常重要的概念&#xff0c;它提供了一种虚拟的表结构&#xff0c;其内容由查询定义。数据视图对于简化复杂查询、增强数据安全性以及逻辑数…

Java基础-组件及事件处理(下)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 面板组件 说明 常见组件 JScrollPane常用构造方法 JScrollPane设置面板滚动策略的方法 JScrollPane滚…

为什么广告需要教育视频

教育视频作为一种广告工具越来越受欢迎&#xff0c;因为它们能够有效地传达信息并吸引观众的注意力。以下是需要此类视频的几个关键原因&#xff1a; 提高参与度 互动性&#xff1a;教育视频吸引注意力&#xff0c;让观众长时间参与&#xff0c;并让他们参与学习过程。产品演…

测试用例设计思路与常用方法

作为测试人员&#xff0c;测试用例设计在工作中的占比是很高的&#xff0c;而且是非常重要的一步&#xff0c;测试用例设计的好坏关系到测试执行过程中的场景覆盖是否完全&#xff0c;最后体现到测试质量是否有保障&#xff0c;所以在这一步做好了不仅能够提高测试效率&#xf…

车床编程x轴怎么编程:深入剖析与实用指南

车床编程x轴怎么编程&#xff1a;深入剖析与实用指南 车床编程是数控加工中至关重要的一环&#xff0c;其中X轴的编程更是核心所在。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析车床编程中X轴的编程方法&#xff0c;帮助你更好地掌握这一技能。 四个…

数据清洗:现代数据分析师的必备技能

在数据驱动的时代&#xff0c;数据分析师作为连接数据与洞察的桥梁&#xff0c;扮演着至关重要的角色。而数据清洗&#xff0c;作为数据分析流程中的首要任务&#xff0c;更是现代数据分析师不可或缺的一项核心技能。本文将从数据清洗的重要性、技能要求、实践方法以及其对数据…

Windows中安装部署MinIo文件系统,在Spring Boot中引入MinIo依赖实现上传文件到MinIo文件系统中

minio安装部署可以看这篇教程&#xff1a;https://blog.csdn.net/qq_43108153/article/details/134016896 创建桶 将私有设置成公开 导入依赖 <!-- minio --> <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId>…

【Unity】RPG2D龙城纷争(十)战斗系统之角色战斗

更新日期:2024年7月10日。 项目源码:第五章发布(正式开始游戏逻辑的章节) 索引 简介一、战斗逻辑公式1.回合制逻辑2.二反机制3.命中率计算公式4.暴击率计算公式5.伤害计算公式6.治疗计算公式二、角色自身总属性三、角色战斗1.角色攻击另一角色2.角色治疗另一角色3.播放攻击…

前端字体商用问题

如果字体被用于商业用途而未经版权所有者的许可,可能会构成著作权侵权。根据《中华人民共和国著作权法》的相关规定,这种侵权行为可能会产生以下后果: 民事责任:侵权者可能需要承担停止侵害、消除影响、赔礼道歉、赔偿损失等民事责任。这可能包括支付版权所有者因其侵…

element的下拉框封装

<!-- 仓位 --> <template><el-selectclearable:value"value || []"class"ele-fluid":filterable"true"placeholder"仓位"input"updateValue"><el-optionv-for"item in data":key"item.…

煤矿前行的指南(防回水防回气装置)

孙悟空等唐僧500年&#xff0c;白素贞等许仙1000年&#xff0c;易小川等玉濑2000年&#xff0c;夜华等白浅三生三世&#xff0c;苏州信科宣防回水防回气装置在等你&#xff0c;只要你来&#xff0c; 一年四季我都在。 150防回水防回气介绍 包括&#xff1a;锥筒体、过滤芯、中…

【后端开发实习】用Nodejs操作mongodb结合Mongoose实现数据库操作

用Nodejs操作mongodb结合Schema实现数据库操作 Mongoose创建Schema定义Schema对象并映射到数据库Model的使用创建文档内容删除文档内容修改文档内容查询文档内容 Document的使用创建并保存将文档对象转换为JSON对象 模块化数据库连接模型初始化 项目部署路由定义后端操作定义启…

如何评价《沧浪之水》这本书?

1、我一辈子的经验就是不要做瞎子&#xff0c;要把事情看清楚&#xff0c;也不能做聋子&#xff0c;该听到的信息要听到&#xff0c;但是要做哑巴&#xff0c;看到了听到了心中有数就行了&#xff0c;可千万别张口说什么。 2、说是人人平等&#xff0c;那是安慰小人物的神话&am…

基于MATLAB的PEF湍流风场生成器模拟与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MATLAB的PEF湍流风场生成器模拟与仿真。PEF&#xff08;Primitive Equations Formulation&#xff09;湍流风场模型&#xff0c;是大气科学和气象学中用来描述大气流动和气…

使用django-haystack+whoosh实现全文搜索

前言 好像是上个星期在写代码的时候遇到了一些问题&#xff0c;这个问题似乎我之前也遇到过&#xff0c;印象中好像也写博客进行记录了的&#xff0c;于是就想在我的博客系统中“查找”&#xff08;表示很无奈居然没有搜索功能&#x1f979;&#x1f979;&#xff09;&#xff…