对于顺序表的学习

一.顺序表的概念

顺序表(Sequential List)是一种基于数组实现的线性数据结构,它可以用来存储一组有序的元素。顺序表是最常见的线性表之一,其特点是元素在内存中是连续存储的。顺序表中的每个元素都可以通过索引直接访问,因此它提供了高效的随机访问功能。

二.顺序表的结构

三.顺序表的实现

我们有两种方式来实现顺序表,但是最常用的肯定是动态申请的所以在这里只给出静态的形式不给出详细函数,我们来详细说一说动态的实现

1.静态(固定大小)

定义

typedefintSLDataType;#defineN1000//静态顺序表(开多了浪费,开少了不够用)structSeqList{SLDataType a[N];intsize;};

2.动态(按需申请)(详细讲)

定义

typedefintSLDataType;#defineINIT_CAPACITY4//动态顺序表 -- 按需申请typedefstructSeqList{SLDataType*a;intsize;//有效数据个数intcapacity;//空间容量}SL;

增删查改的各接口

voidSeqInit(SL*ps);voidSeqDestory(SL*ps);voidSeqPrint(SL*ps);voidSLCheckCapacity(SL*ps);voidSeqPushBack(SL*ps,SLDataType x);voidSeqPopBack(SL*ps);voidSeqPushFront(SL*ps,SLDataType x);voidSeqPopFront(SL*ps);voidSLInsert(SL*ps,intpos,SLDataType x);voidSLErase(SL*ps,intpos);intSLfind(SL*ps,SLDataType x);
2.1初始化

初始化给定一定的容量

voidSeqInit(SL*ps){//assert(ps);ps->a=(SLDataType*)malloc(sizeof(SLDataType)*INIT_CAPACITY);if(ps->a==NULL){perror("malloc fail");return;}ps->size=0;ps->capacity=INIT_CAPACITY;}
2.2销毁
voidSeqDestory(SL*ps){assert(ps);free(ps->a);ps->a==NULL;ps->capacity=ps->size=0;}
2.3打印
voidSeqPrint(SL*ps){assert(ps);for(inti=0;i<ps->size;i++){printf("%d\n",ps->a[i]);}}
2.4检查容量

当容量不够时将容量扩大为原来的2倍最合适,不会太大也不会太小

voidSLCheckCapacity(SL*ps){assert(ps);if(ps->size==ps->capacity){SLDataType*tmp=(SLDataType*)realloc(ps->a,sizeof(SLDataType)*ps->capacity*2);if(tmp==NULL){perror("realloc fail");return;}ps->a=tmp;ps->capacity*=2;}}
2.5尾插尾删
voidSeqPushBack(SL*ps,SLDataType x){assert(ps);// SLCheckCapacity(ps);// ps->a[ps->size++] = x;SLInsert(ps,ps->size,x);}voidSeqPopBack(SL*ps){assert(ps);//assert(ps->size > 0);if(ps->size==0){return;}ps->size--;}
2.6头插头删
voidSeqPushFront(SL*ps,SLDataType x){// assert(ps);// SLCheckCapacity(ps);// int end = ps->size - 1;// while(end >= 0)// {// ps->a[end+1] = ps->a[end];// --end;// }// ps->a[0] = x;// ps->size++;SLInsert(ps,0,x);}voidSeqPopFront(SL*ps){assert(ps);intbegin=1;while(begin<ps->a[begin]){ps->a[begin-1]=ps->a[begin];++begin;}ps->size--;}
2.7查找
intSLfind(SL*ps,SLDataType x){assert(ps);for(inti=0;i<ps->size;i++){if(ps->a[i]==x){return1;}}}
2.8任意位置插删

这里基于查找函数来实现

voidSLInsert(SL*ps,intpos,SLDataType x){assert(ps);assert(pos>=0&&pos<=ps->size);SLCheckCapacity(ps);intend=ps->size-1;while(end>=pos){ps->a[end+1]=ps->a[end];--end;}ps->a[pos]=x;ps->size++;}voidSLErase(SL*ps,intpos){assert(ps);assert(pos>=0&&pos<ps->size);intbegin=pos+1;while(begin<ps->size){ps->a[begin-1]=ps->a[begin];++begin;}ps->size--;}

四.总结比较

或许大家对于顺序表还有疑问,明明链表更加的好用但是为什么还要学习顺序表。
最后我来总结一下链表和顺序表的优缺点

顺序表的优缺点

  • 优点
    • 支持快速随机访问,时间复杂度 O(1)。
    • 结构简单,实现容易。
    • 内存使用较为高效,没有额外的指针开销。
  • 缺点
    • 插入和删除操作效率低,尤其是中间位置的插入和删除需要 O(n) 时间。
    • 扩展时需要 O(n) 的时间来重新分配和复制数组。
    • 需要预设容量,如果容量不足需要扩展,可能浪费空间。

链表的优缺点

  • 优点
    • 动态分配内存,能够有效利用内存空间。
    • 插入和删除操作非常高效,特别是在头部和中间位置,时间复杂度 O(1)。
    • 可以在任何位置进行插入和删除,操作灵活。
  • 缺点
    • 不支持快速的随机访问,需要 O(n) 时间逐个访问节点。
    • 每个节点除了存储数据外,还需要存储指针,因此内存开销较大。
    • 实现相对复杂,尤其是在指针管理方面容易出错。

8.适用场景

  • 顺序表适用场景
    • 当需要频繁进行随机访问时,顺序表是一个很好的选择。
    • 元素个数相对固定或不经常改变,或者修改主要发生在末尾时,顺序表的表现非常好。
    • 适合存储大量静态数据,如查找表、缓存等。
  • 链表适用场景
    • 当需要频繁插入和删除元素时,链表表现优异,特别是在需要在中间位置插入或删除时。
    • 元素的数量动态变化较大,不确定的场景下,链表更具优势。
    • 适用于实现栈、队列等需要频繁插入和删除的应用场景。

这篇文章之前忘记发了现在补上,并且添加了和链表的比较方便大家更好的理解二者之间的区别
有不足之处希望大家可以指出来,我们一起学习一起进步。

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

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

相关文章

AI骨骼检测部署教程:Windows/Linux/macOS全平台兼容

AI骨骼检测部署教程&#xff1a;Windows/Linux/macOS全平台兼容 1. 学习目标与技术背景 随着AI在视觉领域的深入发展&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;已成为智能健身、动作捕捉、虚拟试衣等场景的核心技术。其中&#xff0c;Google推出…

亲测HY-MT1.5-1.8B:边缘设备翻译效果超预期

亲测HY-MT1.5-1.8B&#xff1a;边缘设备翻译效果超预期 1. 引言&#xff1a;边缘智能时代下的轻量级翻译需求 在全球化与移动互联深度融合的今天&#xff0c;实时、低延迟的语言翻译已成为智能硬件、车载系统、离线终端等边缘场景的核心能力。然而&#xff0c;传统大模型依赖…

避坑指南:HY-MT1.5-1.8B边缘部署常见问题全解

避坑指南&#xff1a;HY-MT1.5-1.8B边缘部署常见问题全解 1. 引言 随着AI模型向端侧迁移的趋势日益明显&#xff0c;轻量级翻译模型在离线场景、低延迟需求和隐私保护等方面展现出巨大潜力。腾讯开源的混元翻译模型 HY-MT1.5-1.8B 凭借其18亿参数规模下媲美大模型的翻译质量与…

AI人脸隐私卫士企业应用:合规性数据处理方案

AI人脸隐私卫士企业应用&#xff1a;合规性数据处理方案 1. 引言&#xff1a;AI驱动下的企业数据合规新挑战 随着人工智能技术的普及&#xff0c;人脸识别已广泛应用于安防、考勤、客户行为分析等企业场景。然而&#xff0c;随之而来的个人隐私泄露风险也日益凸显。近年来&am…

百度网盘极速下载方案:技术原理与实战指南

百度网盘极速下载方案&#xff1a;技术原理与实战指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 百度网盘下载工具作为突破限速的终极解决方案&#xff0c;为技术开发者提…

AI人脸隐私卫士参数调优:动态模糊光斑的配置

AI人脸隐私卫士参数调优&#xff1a;动态模糊光斑的配置 1. 引言&#xff1a;智能打码背后的技术挑战 在社交媒体、公共展示和数据共享日益频繁的今天&#xff0c;人脸隐私泄露风险已成为不可忽视的安全隐患。传统手动打码方式效率低下&#xff0c;难以应对多人合照、远距离拍…

Web 网站如何用 XinServer 做会员系统?

Web 网站如何用 XinServer 做会员系统&#xff1f; 最近有个做前端的朋友找我吐槽&#xff0c;说接了个外包小项目&#xff0c;要做一个带会员系统的官网。前端页面他刷刷刷两天就搞定了&#xff0c;结果卡在后端和数据库上。光是设计用户表、写注册登录接口、搞权限控制&#…

从0到1:用HY-MT1.5-1.8B实现实时语音翻译

从0到1&#xff1a;用HY-MT1.5-1.8B实现实时语音翻译 1. 引言 在全球化交流日益频繁的今天&#xff0c;实时、准确的多语言互译已成为智能设备、会议系统、在线教育等场景的核心需求。传统云翻译服务虽功能成熟&#xff0c;但存在网络延迟高、隐私泄露风险、离线不可用等问题…

利用AXI DMA实现千兆以太网数据直传

打通高速数据动脉&#xff1a;AXI DMA如何让千兆以太网“零拷贝”飞起来你有没有遇到过这样的场景&#xff1f;FPGA系统接上千兆网口&#xff0c;满心期待地抓取视频流或传感器数据&#xff0c;结果刚到几百兆速率就开始丢包。调试发现CPU占用率飙到90%以上&#xff0c;几乎被中…

AI人脸隐私卫士能否用于证件照?身份证照片脱敏实践

AI人脸隐私卫士能否用于证件照&#xff1f;身份证照片脱敏实践 1. 引言&#xff1a;证件照脱敏的现实需求与技术挑战 在数字化办公、在线身份认证日益普及的今天&#xff0c;身份证、护照等证件照片频繁出现在各类平台提交流程中。尽管出于验证需要&#xff0c;部分信息必须保…

边缘设备部署实战:树莓派运行AI人脸隐私卫士教程

边缘设备部署实战&#xff1a;树莓派运行AI人脸隐私卫士教程 1. 引言 随着智能摄像头、家庭监控和社交分享的普及&#xff0c;个人图像中的人脸隐私泄露风险日益突出。尤其是在多人合照、街拍或公共监控场景中&#xff0c;未经脱敏的照片一旦外泄&#xff0c;可能带来身份盗用…

HY-MT1.5-1.8B vs 商业翻译API:实测对比报告

HY-MT1.5-1.8B vs 商业翻译API&#xff1a;实测对比报告 1. 引言 在全球化加速的背景下&#xff0c;高质量、低延迟的机器翻译能力已成为智能应用的核心基础设施。无论是跨境电商、跨国协作&#xff0c;还是内容本地化与实时通信&#xff0c;用户对翻译服务的需求正从“能用”…

Infineon TC3xx平台下AUTOSAR OS时间触发模式操作指南

在英飞凌 TC3xx 上玩转 AUTOSAR 时间触发调度&#xff1a;从原理到实战的深度实践你有没有遇到过这样的场景&#xff1f;ECU 控制任务总是“差那么一点点”准时&#xff0c;PID 调节抖动明显&#xff0c;CAN 报文发送时序偶尔错位……调试几天也找不到根因。最终发现&#xff0…

智能隐私保护实战:处理万人合照的技术挑战

智能隐私保护实战&#xff1a;处理万人合照的技术挑战 1. 引言&#xff1a;AI 人脸隐私卫士 - 智能自动打码 在社交媒体、公共宣传和新闻报道中&#xff0c;多人合照的隐私处理已成为一个不可忽视的技术难题。一张包含数百甚至上千人的集体照&#xff0c;若需手动为每个人脸打…

惊艳效果展示:HY-MT1.5-1.8B打造的实时翻译案例分享

惊艳效果展示&#xff1a;HY-MT1.5-1.8B打造的实时翻译案例分享 随着全球化交流的不断深入&#xff0c;高质量、低延迟的实时翻译能力正成为智能应用的核心竞争力。在众多开源翻译模型中&#xff0c;腾讯推出的混元翻译大模型 HY-MT1.5-1.8B 凭借其卓越的语言理解能力和高效的…

5分钟部署HY-MT1.5-1.8B:vLLM+Chainlit打造多语言翻译神器

5分钟部署HY-MT1.8B&#xff1a;vLLMChainlit打造多语言翻译神器 1. 引言&#xff1a;为什么需要轻量级翻译模型&#xff1f; 在AI大模型普遍追求千亿参数的今天&#xff0c;推理效率与部署成本成为制约实际落地的关键瓶颈。尤其是在实时翻译、边缘设备和低延迟场景中&#x…

智能打码GPU配置指南:最具性价比算力方案详解

智能打码GPU配置指南&#xff1a;最具性价比算力方案详解 1. 背景与需求分析 随着AI技术在图像处理领域的广泛应用&#xff0c;隐私保护已成为数字内容管理不可忽视的一环。尤其在社交媒体、安防监控、医疗影像等场景中&#xff0c;对人脸信息进行自动脱敏处理的需求日益增长…

3D人体姿态估计实战:云端GPU 10分钟出结果,成本省90%

3D人体姿态估计实战&#xff1a;云端GPU 10分钟出结果&#xff0c;成本省90% 1. 为什么你需要云端GPU做3D人体姿态估计 作为一名动画专业的同学&#xff0c;相信你在毕设中一定遇到过这样的困境&#xff1a;想要制作精细的3D人体动画&#xff0c;但本地电脑渲染一帧就要半小时…

AI人脸隐私卫士上线3天,处理10万+照片的部署优化经验

AI人脸隐私卫士上线3天&#xff0c;处理10万照片的部署优化经验 1. 背景与挑战&#xff1a;从需求爆发到系统承压 在数据隐私日益受到重视的今天&#xff0c;个人图像中的面部信息保护已成为刚需。无论是企业员工合照、社区活动影像&#xff0c;还是新闻媒体发布的现场图片&a…

亲测有效!HY-MT1.5-1.8B在Jetson上的部署实战

亲测有效&#xff01;HY-MT1.5-1.8B在Jetson上的部署实战 随着边缘计算与本地化AI服务需求的快速增长&#xff0c;轻量级大模型在嵌入式设备上的高效部署成为智能硬件落地的关键路径。腾讯开源的混元翻译模型 HY-MT1.5-1.8B 凭借其“小身材、高性能”的特点&#xff0c;在多语…