【初阶数据结构】详解顺序表(上)

news2024/12/24 20:52:33

文章目录

  • 1. 数据结构
  • 2. 顺序表
    • 2.1 顺序表的概念及结构
      • 2.1.1 线性表
      • 2.1.2 顺序表与数组的差别
    • 2.2 顺序表的分类
      • 2.2.1 静态顺序表
      • 2.2.2 动态顺序表
    • 2.3 静态顺序表和动态顺序表的区别

在学完C语言的知识后,我们也该跨入到学习数据结构的领域中来。毕竟学习语法是为解决问题而用的,而问题的解决离不开恰当好处的方法,这些方法就是我们要学习的数据结构。
哈哈哈
那么本文章就是我们开启新篇章的起点,这里会介绍一个“新朋友”,名为顺序表。

在讲解顺序表之前,我先跟大家聊一聊什么是数据结构。

1. 数据结构

数据结构计算机存储、组织数据的方式

这么说着可能有点干巴,那我就结合一个生活中的例子。

也许大家心里可能都有一个值得陪伴自己一生的人,你们或许还未遇见,或许还在遇见的路途中又或是正在争取着对方,亦或是已经成为能够为对方遮风挡雨的存在。
那我们现在幻想一下,比如失忆的我现在要追求一个自己心爱的人,但是我只记得她的名字,假设每个人的名字的是独一无二的。
第一种方案是:在大街上一个个人的问。显然这种方式是效率低下而且成功率很低的。
第二种方法是:去到警察局问。这个可能有点夸张,但是效率绝对是高的,因为警察局里面能够查询到每个人的身份信息,这就相当于把信息给组织保存起来了。

由这个离谱的例子,你可以感受到,如果我们能够将一些信息按照某种方式进行保存,可以方便我们日后对数据进行一系列的操作。这便是数据结构的魅力所在。

总结:

  • 能够存储数据(如顺序表、链表等结构)
  • 存储的数据能够方便查找

那什么样的数据结构才算是最好的呢?
其实学过C语言的读者们,早就学过一种数据结构——数组。因此数组是最简单的数据结构。
数组

【思考】有了数组,为什么还要学习其他的数据结构?
假定数组有10个空间,现在已经使用了5个,我们要向数组插入数组,步骤如下:

  1. 求出数组长度
  2. 求出数组当前有效数据个数
  3. 向下标为有效数据个数的位置插入数据(注意:这里是否要判断数组是否满了,满了还能继续插入吗?)

而且当数组的大小不够用时,我们又该怎么办?

假设数据十分庞大,频繁的获取数组有效数据的个数会直接影响到程序运行效率。

结论:最基础的数据结构能够给我们提供的操作已经不能完全满足复杂算法的实现。

2. 顺序表

2.1 顺序表的概念及结构

2.1.1 线性表

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

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

线性表就相当于我们日常生活中所讲的蔬菜,蔬菜包括大白菜、青菜…,线性表中就是指这一类具有此特点的数据结构的集合。

那我们如何理解线性表中的逻辑结构和物理结构?
其实方法很简单,我们可以想象到一大群人站在餐厅门口排队等待叫号吃饭,但是我们我们所排的队伍在服务员的肉眼上看并不是完全笔直的,但是在他们的脑中我们所排的队伍就是笔直的,这也就是逻辑上和物理上的区别。

那我们所说的顺序表因为器底层是数组,所以其在物理上是连续的,在逻辑上肯定也是连续的,因此顺序表就是线性表。

2.1.2 顺序表与数组的差别

顺序表的底层结构是数组,对数组的封装,实现了常用的增删查改等接口。

2.2 顺序表的分类

顺序表分为静态顺序表动态顺序表

2.2.1 静态顺序表

定义:使用定长的数组存储数据元素。

代码实现:

#define M 100
typedef int SLDataType;
struct SeqList
{
	//int arr[100]; //不建议这样写,因为后期的维护比较麻烦
	SLDataType arr[M];
	int size;//用来记录有效的数据个数
};

2.2.2 动态顺序表

定义:使用可调整的空间来存储数据。

代码实现:

typedef int SLDataType;
struct SeqList
{
	SLDataType* arr; //指向动态开辟空间的结构体变量成员
	int size; //有效数据的个数
	int capacity; //当前空间大小
};

2.3 静态顺序表和动态顺序表的区别

如果要你从静态顺序表和动态顺序表中二选一,从各方面考虑,你会选择选谁?

我的答案是动态顺序表 。从静态顺序表的缺点我们可以看到,所存储数据的个数不能灵活变通,一旦确认下来之后就无法改变了。而动态顺序表可以灵活的改变所存储的数据个数。

那么至此,详解顺序表(上)的内容就讲解完毕了。在详解顺序表(下)中,我将会给出顺序表中的各种操作的源码,以及帮助读者跳过一些初学程序员经常踩的坑。

如果觉得本文还不错的话,麻烦给偶点个赞吧!
哈哈哈

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

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

相关文章

带风扇工业电脑行业分析:预计2030年全球市场规模将达到45.8亿美元

工业电脑是用于工业用途(生产产品和服务)的计算机,其外形尺寸介于上网本和服务器机架之间。工业电脑的可靠性和精度标准更高,价格通常比消费电子产品更昂贵。它们通常使用复杂的指令集,例如 x86,而其他指令…

用的到linux-tomcat端口占用排查-Day5

前言: 最近使用tomcat搭建了一套测试环境的应用,整个搭建过程也很简单,就是将部署包上传至服务器☞解压☞启动tomcat服务器,当然服务器也是成功启动了,但是发现前端应用报404,具体如下图所示。 一、现象及思…

新手买智能猫砂盆怎样不踩雷?三大热门款测评推荐!

上班族养猫最害怕的就是,辛苦一天回到家,发现家里弥漫着猫便便的味道和满盆的猫屎,满地的猫砂,就感觉整个人都绝望了,你们现在是不是这样?以前的我真是为了解决这个问题想破了脑袋,后面才了解到…

电话营销机器人革新电销行业

第一,减少企业各方面的支出 企业需要各方面的支出。例如,招聘成本和管理成本、员工薪资和社保都是非常大的支出。但AI智能电销机器人,只要购买费用和电话费的一小部分,就没有更多的费用。经计算,该机器人的成本仅相当于…

java之静态内部类

1.什么是静态内部类 答:静态内部类是一种特殊的成员内部类 2.直接创建静态内部类对象的方式? Outer.Inner oinew Outer.Inner(); public class Outer {int a10;static int b20;static class Inner{public void show1(){System.out.println("非静态里的方法被调用了&qu…

【Qt】探索Qt网络编程:构建高效通信应用

文章目录 前言:1. Qt 网络编程介绍1.1 什么是网络编程?1.2 Qt的模块 2. UDP Socket2.1 核心 API 概述2.2 写一个带有界面的 Udp 回显服务器2.3 写一个带有界面的 Udp 客户端 3. TCP Socket3.1 核心 API 概述3.2 代码: 4. HTTP Client4.1 核心…

基于InP的通用光子集成技术(五)

Meint Smit et al 2014 Semicond. Sci. Technol. 29 083001 9.通用测试 9.1. 晶圆验证 在通用工艺中,必须对每批次晶片的工艺性能进行验证;客户将期待这样的验证。在MPW中,验证用户ASPIC工艺性能是不实际的;每个ASPIC都需要不同的…

Shopee巴西站点凭直播带货超越亚马逊,shopee巴西站热销类目有哪些?

巴西电商市场加速增长,被誉为跨境最后一个蓝海市场,吸引了众多卖家和电商平台的关注。在这一片潜力无限的热土上,有人隔岸观火等待时机;有人却果断迈步积极探索。东南亚及台湾地区的领航电商平台Shopee平台,在巴西强势…

【Python机器学习】利用AdaBoost元算法提高分类性能——在数据集上应用AdaBoost

在之前用过的马疝病数据集上应用AdaBoost。 在一个难数据集上的AdaBoost应用步骤: 1、收集数据:提供的文本文件 2、准备数据:确保类别标签是1河-1而不是1和0 3、分析数据:手工检查数据 4、训练算法:在数据上&#xff…

java-面向对象综合练习

1、文字格斗回合制游戏 需求: 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。 举例: 程序运行之后结果为&#xff1a…

加密软件中的RSA和ECC的主要区别是什么

在加密软件中,RSA(Rivest-Shamir-Adleman)和ECC(Elliptic Curve Cryptography,椭圆曲线密码学)是两种广泛使用的非对称加密算法,它们之间存在多个关键区别。 1. 算法基础 RSA:基于大…

RPA+AI有什么应用?6大技术融合方向分析 | 实在RPA研究

随着数字化转型的加速,企业正寻求更高效、智能的方法来优化业务流程。机器人流程自动化(RPA)作为一种快速兴起的技术,已经证明了其在自动化重复性任务方面的能力。然而,当RPA与各种人工智能(AI)…

外部时钟传送带测量装置

外部时钟&传送带测量装置 1.外部时钟介绍2.循迹模块3.实操过程1.设置2.代码3.效果 链接: keysking-17 1.外部时钟介绍 将GPIO的外部电平接入即可对外部信号进行计数(PS:上面的内部时钟不是所谓的“高速内部时钟”,而是APB1的定时器分支)。当然,GPIO…

zabbix“专家坐诊”第250期问答

问题一 Q:乐维监控社区版监控交换机,能统计出端口的IP流量排名吗? A:社区版没有这个功能 ,正式版,流量报表可以实现端口IP流量排行。 问题二 Q:我看了一下乐维有事件平台汇总的功能&#xff0…

浅谈逻辑控制器插件之jp@gc - Parameterized Controller

浅谈逻辑控制器插件之jpgc - Parameterized Controller jpgc - Parameterized Controller是JMeter的一个强大插件,由JMeter Plugins项目提供。此插件允许用户以更加灵活和动态的方式控制测试计划中的采样器执行逻辑。它通过引入参数化概念,使得单个控制…

【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)

第四届电气工程与计算机技术国际学术会议(ICEECT2024) 2024 4th International Conference on Electrical Engineering and Computer Technology 第四届电气工程与计算机技术国际学术会议(ICEECT2024)将于9月27日-29日在哈尔滨举…

汇编语言入门基础(概述)

目录 概述: 1.1 汇编语言与汇编指令 1.2 汇编语言编写程序的工作过程 1.3 数据的表示 1.4 计算机中的存储单元 1.5 计算机中的总线 1.5.1 三种总线 1.5.2 x86CPU性能一览 1.6 内存的读写与地址空间 1.6.1 CPU对存储器的读写 1.6.2 内存地址空间 1.6.3 内存地址空间…

linux虚拟机设置固定ip

修改/etc/sysconfig/network-scripts目录下ifcfg-eth0文件,各虚拟机这个文件名不一致,ifcfg-XX格式 vim /etc/sysconfig/network-scripts/ifcfg-eth0BOOTPROTO设置为static,然后在最后添加固定IP地址和默认网关、DNS等配置,IP地址…

学习笔记 韩顺平 零基础30天学会Java(2024.8.5)

P460 八大Wrapper类 黄色的父类是number,黑色的是自己独立的 P461 装箱和拆箱 手动装箱示例: int n1 100; Interger interger new Interger(n1);//或者:Interger interger Interger.valueOf(n1); 手动拆箱示例: int i interge…

SSM项目学习:用xml配置文件或注解开发实现控制反转和依赖注入

什么是SSM SSMSpring(Spring Framework)Spring MVC mybatis Spring Framework系统架构 Spring Framework学习线路 IoC(Inversion of Control)和DI(Dependency Injection) 他们解决的问题:代码耦合度高的问题,需要类自己new对象,修改部分代…