【数据结构】顺序表的应用

目录

一.引言        

二.顺序表概念

三.顺序表的实现

1.定义顺序表

2.顺序表初始化

​编辑

3.检查空间,如果满了,进行增容

4.顺序表尾插

5.顺序表尾删

6.顺序表头插

7.顺序表头删

​编辑

8.顺序表查找

9.顺序表在pos位置插入x

10.顺序表删除pos位置的值

11.顺序表销毁

12.顺序表打印


一.引言        

        在计算机科学中,数据结构是计算机存储、组织数据的方式。顺序表作为一种线性表,以其简单、易用的特点,成为了许多高级数据结构的基础。了解顺序表的工作原理和实现方法,对于我们更好地理解计算机科学具有重要意义。


二.顺序表概念

        顺序表(Sequential List)是一种线性表,它的特点是数据元素在物理存储上连续,且元素之间的逻辑顺序与物理顺序相同。在顺序表中,数据元素按照一定的顺序排列,每个元素都有一个确定的位置,可以通过索引(或称为下标)直接访问。

以下是顺序表的基本概念和特性:

  1. 数据元素:顺序表中的每一个对象称为数据元素,可以是整数、浮点数、字符或者更复杂的记录类型。

  2. 索引(下标):顺序表中的每个数据元素都有一个索引,通常从0开始计数,用于指示元素在表中的位置。

  3. 长度:顺序表的长度是指表中数据元素的个数,长度可以根据需要进行动态调整,但通常有一个最大容量限制。

  4. 存储空间:顺序表通常在计算机内存中占用一段连续的存储空间,以便于通过索引快速访问元素。

  5. 随机访问:顺序表支持随机访问,即可以在O(1)的时间复杂度内直接访问到任意位置的元素。

  6. 顺序性:顺序表中的元素按照一定的顺序排列,元素之间的顺序关系是相邻的,即第一个元素紧邻第二个元素,以此类推。

顺序表的主要操作包括:

  • 初始化:创建一个空的顺序表。
  • 插入:在顺序表的指定位置插入一个新的数据元素。
  • 删除:从顺序表中删除指定的数据元素。
  • 查找:根据特定条件在顺序表中查找数据元素。
  • 排序:对顺序表中的元素进行排序。
  • 清空:将顺序表中的所有元素删除,使其变为空表。
  • 遍历:按照顺序访问顺序表中的每一个元素。

顺序表的优缺点如下:

优点

  • 访问效率高:随机访问能力强,访问任意元素的时间复杂度为O(1)。
  • 存储密度高:顺序表的数据元素紧密排列,不需要额外的空间存储元素间的关系。

缺点

  • 插入和删除操作效率低:在顺序表的中间或头部插入或删除元素时,可能需要移动大量元素,时间复杂度为O(n)。
  • 固定容量:通常顺序表的容量是固定的,若存储空间不足,需要进行扩容操作,这可能会导致性能下降。

顺序表是实现其他复杂数据结构(如栈、队列等)的基础,它在算法设计和实际应用中有着广泛的使用。  (后续也会发布用顺序表来实现栈和队列)

三.顺序表的实现

        静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以下面我们实现动态顺序表。

1.定义顺序表

        这里使用typedef函数来讲重命名为SLDateType是因为插入顺序表的数据不会是固定不变的,这么做也是为了方便后续管理和更新。

2.顺序表初始化

        将结构体里的array指向空指针,防止其变为野指针。

3.检查空间,如果满了,进行增容

        结构体里的capacity的主要功能就在这一板块实现,主要是为了检查顺序表内数据是否存满。如果满了就使用realloc函数来再次开辟空间。(这里使用了三目操作符,不懂的小伙伴可以点击三目操作符)

4.顺序表尾插

5.顺序表尾删

        此操作简单易懂,需要注意的是这里的删除并不是真正物理上删除了数据,而是逻辑上减小了size的值,使print读取不到他,来做到删除的效果。

6.顺序表头插

7.顺序表头删

8.顺序表查找

9.顺序表在pos位置插入x

10.顺序表删除pos位置的值

11.顺序表销毁

12.顺序表打印

        这里类型于数组的打印,都是需要循环来实现的。

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

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

相关文章

展开说说:Android页面绘制流程源码解析

说到Android系统View的绘制流程,大家一定知道是分为测量(Measure)、布局(Layout)和绘制(Draw)三个阶段,这篇文章主要聊一聊在这三个步骤之前的源码执行流程,页面启动后是…

C语言丢失精度 如何实现高精度计算

(1)int 类型举例 int :占4个字节,也就是32位,及最大值是2^32-11024*1024*1024*4-14294967295 以上说法错误,因为Int是有符号类型整数,所以最高位是符号位,及int的最大值应该是2^31…

【Java】链表的头插法和尾插法

头插法 头插法就是在已有的节点的前面插入新节点 如何实现 (1)先定义一个节点类ListNode,里面有value值和地址 public class ListNode {int value;ListNode next;public ListNode(int value){this.value value;}Overridepublic String t…

开发指南046-机构树控件

为了简化编程&#xff0c;平台封装了很多前端组件。机构树就是常用的组件之一。 基本用法&#xff1a; import QlmOrgTree from /qlmcomponents/tree/QlmOrgTree <QlmOrgTree></QlmOrgTree> 功能&#xff1a; 根据权限和控制参数显示机构树。机构树数据来源于核…

让我们一起来看看这些强大的中国汽车品牌如何勇攀巅峰!

咱们中国的汽车品牌&#xff0c;就是这么牛&#xff01;你知道吗&#xff1f;他们已经悄悄崛起&#xff0c;一步步向着更广阔的海外市场进军了。尽管这个过程可能有点坎坷&#xff0c;但是“勇敢”始终是他们前行的动力&#xff0c;推动着他们不断向前&#xff0c;打造属于我们…

AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理

AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理 目录 AGI 之 【Hugging Face】 的【文本摘要】的 [评估PEGASUS ] / [ 微调PEGASUS ] / [生成对话摘要] 的简单整理 一、简单介绍 二、文本摘要 三、在CNN/Daily…

秋招突击——7/9——MySQL索引的使用

文章目录 引言正文B站网课索引基础创建索引如何在一个表中查看索引为字符串建立索引全文索引复合索引复合索引中的排序问题索引失效的情况使用索引进行排序覆盖索引维护索引 数据库基础——文档资料学习整理创建索引删除索引创建唯一索引索引提示复合索引聚集索引索引基数字符串…

C#基于任务的异步模式(TAP)

1、C#异步模式分类 基于任务的异步模式&#xff08;TAP&#xff09; 基于事件的异步模式&#xff08;EAP&#xff09;和异步编程模型模式&#xff08;APM&#xff09; 2、基于任务的异步模式&#xff08;TAP&#xff09; 基于任务的异步模式&#xff08;TAP&#xff09;用单个方…

从零手写实现 nginx-28-error pages 指令

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

夹子音转换器matlab

操作过程点击此处观看 上段时间补习了一下傅里叶变化的知识&#xff0c;突发奇想可以根据此做一款声音转换器&#xff0c;使用工科神器Matlab进行完成&#xff0c;并且开发了可操作界面如下图所示&#xff1a; 功能实现与描述 软件中可以实现声音的录制、回放、文件的保存与…

【C++】动态内存分配(关于构造与析构函数的调用)动态数组类 动态创建多维数组 知识点+代码学习记录

一.动态内存分配相关知识点 1.堆和栈内存&#xff1a; 堆内存&#xff1a;动态分配的内存位于堆中&#xff0c;它不受作用域限制&#xff0c;由程序员控制其生命周期。 栈内存&#xff1a;局部变量和函数参数等自动分配的内存位于栈中&#xff0c;由编译器自动管理。 2.new…

性能测试(2)

jmeter参数化 loadrunner Jmeter IP欺骗&#xff0c;也称为IP欺诈&#xff0c;是指通过伪装、篡改IP地址的方式&#xff0c;进行网络攻击或欺骗行为。这种行为可能会导致网络安全问题&#xff0c;包括身份盗窃、数据泄露、DDoS攻击等。为了保护自己的网络安全&#xff0c;用户…

MySQL-表的约束

文章目录 一、空属性二、默认值三、zerofill四、列描述五、主键删除主键追加主键复合主键根据主键快速索引 六、自增长last_insert_id() 七、唯一键八、外键class表&#xff08;主表&#xff09;student表&#xff08;从表&#xff09; 一、空属性 之前我们将表的机构&#xff…

单例模式java

并发的有序性会导致返回空指针 class A{private static volatil A a;private A(){}public A getInstance(){if(anull){synchronized(A.class){if(anull)anew A();}}return a; }anew A();这条语句&#xff0c;他需要&#xff1a;开辟空间&#xff0c;初始化空间&#xff0c;指针…

python热门面试题三

面试题1&#xff1a;Python中的列表推导式是什么&#xff1f;请给出一个例子。 回答&#xff1a; 列表推导式&#xff08;List Comprehension&#xff09;是Python中一种非常强大且简洁的构建列表的工具。它允许你通过一个表达式来创建一个新的列表&#xff0c;这个表达式定义…

无显卡也可以玩大模型-MiniGPT-4篇

MiniGPT-4学习 1.Colab上部署MiniGPT-42.论文摘要3.模型架构4.模型训练5.总结 1.Colab上部署MiniGPT-4 代码&#xff1a; https://github.com/Czi24/Awesome-MLLM-LLM-Colab/blob/master/MLLM/MiniGPT-4-colab/MiniGPT-4.md 2.论文摘要 最近的 GPT-4 展示了非凡的多模式能力&…

【设计模式之美】【建造型】工厂模式:通过面向接口编程思路,串起业务流程

文章目录 一. 简单工厂&#xff08;Simple Factory&#xff09;第一种简单工厂&#xff1a;面向接口编程与工厂类&#xff1a;划分功能职责第二种&#xff1a;单例简单工厂&#xff1a;节省内存和对象创建的时间 二. 工厂方法&#xff08;Factory Method&#xff09;&#xff1…

文心一言:如何备考软考架构师

提问&#xff1a;软考高级:架构师指导&#xff0c;有哪些考点、重点考点有哪些&#xff1f;需要如何备考&#xff1f;案例分析题如何做&#xff1f;论文如何写&#xff1f; 文心一言回答1700字如下&#xff1a; 针对软考高级架构师的考试&#xff0c;以下是对考点、重点考点、备…

DiffusionModel-Transformer知识回顾

论文链接&#xff1a; Attention Is All You Need CNN vs RNN vs Transformer CNN&#xff08;卷积神经网络&#xff09; 特点&#xff1a; 局部连接&#xff1a;每个卷积神经元只与输入数据的局部区域连接&#xff0c;这有助于捕捉局部特征。权重共享&#xff1a;卷积核的权重…

Android笔记:Constructor (xxx) has been changed after generation.

遇到此报错时&#xff0c;onstructor (xxx) has been changed after generation.是因为修改了实体类字段后什么都不修改的话就会报这个错 这条信息是关于代码生成和代码变更的警告。当你使用某些工具&#xff08;如注解处理器、代码生成库等&#xff09;来自动生成代码时&…