当前位置: 首页 > news >正文

【玩转408数据结构】线性表——定义和基本操作

考点剖析

        线性表是算法题命题的重点,该类题目实现相对容易且代码量不高,但需要最优的性能(也就是其时间复杂度以及空间复杂度最优),这样才可以获得满分。所以在考研复习中,我们需要掌握线性表的基本操作,在平时多进行代码练习。当然在考场上,我们并不一定要求代码具有实际的可执行性,但我们需要去清晰的表达出算法的思路步骤,且算法题目只允许使用 C/C++ 语言进行实现

线性表知识点

        关于线性表这章内容其实并不多,我们将其分为两大部分:顺序存储(也就是我们常说的顺序表)和链式存储(链表),其中对于链表部分我们需要掌握其中的 单链表、双链表、循环链表、静态链表等部分链表。

        关于线性表的内容并不是太难,我将用3-4篇文章带着大家一起了解线性表以及其实现,当我们可以自己去实现其功能的时候,我们对于该部分内容的知识掌握也就十分的熟练了,那么废话不多说,我们下面开始正式的进入线性表的学习。

线性表的定义

        线性表是具有相同数据类型的 n ( n \geq  0) 个数据元素的有限序列,其中n为表长;当n=0时,线性表为空表。在这里我们以L命名线性表,可以将其表示为:

L = (a_{1},a_{2},a_{3}, ... a_{i},a_{i+1}, ... ,a_{n})

        其中:a_{1} 是线性表的第一个元素,我们也称其为表头元素a_{n}是线性表的最后一个元素,我们称其为表尾元素。

        除了第一个元素外,每个元素有且仅有一个直接前驱(前一个元素);除了最后一个元素外,每个元素有且仅有一个直接后续(后一个元素)。当然我们也可以将“直接前驱”称为“前驱”,将“直接后续”称为“后续”。

        通过已上知识我们总结出线性表的特点如下所示:

  • 线性表元素个数有限
  • 线性表元素都是数据元素,每个元素都是单个元素
  • 线性表的元素具有逻辑上的顺序性,表中的元素有其先后次序
  • 线性表的数据类型都相同,所以其每个元素所占空间大小相同
  • 线性表的元素具有抽象性,我们讨论元素间的逻辑关系,不考虑元素究竟表示什么内容

 注:线性表是逻辑结构,表示元素一对一的相邻关系,而我们前面所了解的链表以及顺序表指的是存储结构。(也就是说线性表的顺序存储是顺序表,线性表的链式存储是链表;这两个只是在存储结构上存在差异,而其逻辑结构归根结底都是线性表)。

线性表的基本操作

        对于线性表,有一些基本操作是需要我们去学习的,至于为什么要学习这些基本操作,当然408大纲要求是要学习的,但在这里我们还是可以了解一下原因的。我们去对一些数据结构的基本操作进行封装实现,这样我们在进行复杂的操作时,可以去调用相关基本操作进行实现,并且这样进行封装也有利于减少错误的产生。

        线性表的基本操作如下所示:

InitList(&L);    //线性表的初始化
DestroyList(&L);    //销毁线性表ListInsert(&L,i,e);    //线性表的插入
ListDelete(&L,i,&e);    //线性表的删除LocateElem(L,e);    //按值查找
GetElem(L,i);    //按位查找Length(L);    //求线性表长
PrintList(L);    //按顺序输出线性表的所有值
Empty(L);    //判断线性表是否为空

(如果不懂为什么要加“&”的同学可以去学习一下,简单来说加“&”的元素我们可以修改其值,它会将其值带回来,而不加的我们在函数中修改其值是在主函数中无效的)。        

注:在这里线性表只是一种逻辑结构,我们对于其基本操作的实现是要基于存储结构的,不同的存储结构实现其功能的方法是不同的,所以对于这些基本操作的实现,我会在后面顺序表和链表的讲解中进行代码的实现,在这里我们仅对其基本操作有一个了解即可。 

小测试

  1.  线性表是一个可以存不同数据类型的n ( n \geq  0) 个数据元素的有限序列吗?
  2. 在线性表中每一个元素都有自己的前驱和后续元素吗?
  3. 不同的线性表的逻辑结构必然存在一些差异性。对吗?

答案

  1. 错,线性表需要存储相同的数据类型。

  2. 错,第一个元素不存在前驱,最后一个元素不存在后续。

  3. 错,线性表的逻辑结构是相同的。 

相关文章:

【玩转408数据结构】线性表——定义和基本操作

考点剖析 线性表是算法题命题的重点,该类题目实现相对容易且代码量不高,但需要最优的性能(也就是其时间复杂度以及空间复杂度最优),这样才可以获得满分。所以在考研复习中,我们需要掌握线性表的基本操作&am…...

回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现ABC-BP人工蜂群算法优化BP神经网络多变量回归预测&#x…...

SQL笔记-2024/01/31

cross join 两个表的笛卡尔积 例如: select s.name student_name,s.age student_age,s.class_id class_id,c.name class_name from student s cross join class c; 子查询 select s.name name,s.score score,s.class_id class_id from student s where s.class_id …...

C#系列-简介(1)

一,C#简介 C#(读作“C Sharp”)是一种由微软公司开发的、运行于.NET Framework和.NET Core(现在统称为.NET)之上的高级编程语言。C#结合了C的强大功能和Java的易用性,旨在成为一种“优雅且安全”的语言&am…...

LoRA:语言模型微调的计算资源优化策略

编者按:随着数据量和计算能力的增加,大模型的参数量也在不断增加,同时进行大模型微调的成本也变得越来越高。全参数微调需要大量的计算资源和时间,且在进行切换下游任务时代价高昂。 本文作者介绍了一种新方法 LoRA,可…...

pycharm deployment 灰色 一直无法点击

我的development的配置如下,我看了很多教程一直不知道为什么一直是灰色的, 文件夹配置: 如果你这里 Autodect,那么你Mapping 的文件夹应该是应该省略这个前缀的,例如我下面,我应该将本地文件夹映射到/home…...

解决“使用Edge浏览器每次鼠标点击会出现一个黑色边框”的问题

目录 一 问题描述 二 解决方案 三 方案来源 四 参考资料 & AI工具 一 问题描述 为了方便进行收藏夹同步,开始从Chrome浏览器切换到Edge浏览器。在使用Edge浏览器过程中发现“每次鼠标点击会出现一个黑色边框”(效果如下图所示)&#…...

IEC61499 学习记录

IEC 61499是一种用于工业自动化的标准化模型,它基于面向对象的方法,用于描述分布式控制系统。该模型包括基本元素如事件、函数块和资源,以及它们之间的关系。函数块是该模型的核心概念,它们描述了系统中的控制和数据处理功能。整个…...

斗地主登录界面(JAVA图形化界面)设置

1.实现代码 import CodeUtil.CodeUtil; import domain.User;import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList;public class LoginGame extends JFrame implements MouseListen…...

RibbonOpenFeign源码(待完善)

Ribbon流程图 OpenFeign流程图...

Python DNS操作详解

在网络世界中,DNS(Domain Name System)扮演着重要的角色,它是一种分布式数据库系统,用于将域名(如 google.com)转换为相应的 IP 地址(如 172.217.7.206)。DNS 可以被视为…...

Redis篇之分布式锁

一、为什么要使用分布式锁 1.抢劵场景 (1)代码及流程图 (2)抢劵执行的正常流程 就是正好线程1执行完整个操作,线程2再执行。 (3)抢劵执行的非正常流程 因为线程是交替进行的,所以有…...

制作一个简单的HTML个人网页我的名字叫小明爱好打篮球,喜欢的歌手周杰伦我的技能java c++ python 主题配色蓝白

欢迎来到小明的个人网页 关于我 我叫小明,喜欢打篮球,最喜欢的歌手是周杰伦。 我的技能 JavaCPython 联系我 你可以通过以下方式联系我(请根据实际情况填写): 电子邮件:xiaomingexample.com GitHub&…...

华为视频监控接入到视频监控平台 (华为网路监控摄像机IPC和华为视频节点设备VCN)

目 录 一、设备介绍 1.1 华为VCN介绍 1.2 AS-V1000视频监控平台介绍 1.3 平台服务器配置说明 二、安装、配置HW_IVS软件 2.1下载安装HW_IVS软件 2.2登录HW_IVS 2.3共享到外域 三、配置华为外域参数 3.1 PCG模块设置 3.2通信协议GBT28181配置 3.3传…...

树与二叉树---数据结构

树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点: 1)树的根结点没有前驱,除根结点外的所有结点有 且只有一个前驱。 2)树中所有结点可以有零个或多个后继。 树结点数据结构 满二叉树和完全二…...

C++ .h文件类的调用

demo1只有类的情况下调用 下面写一个util.h 文件里面 // 定义宏防止编译器重复编译 #ifndef TEST_H #define TEST_H class Test{ public:void sum(int a, int b);int num(int a, int b);bool number();}; #endif // TEST_H 调用的时候首先要引入这个头文件 #include "u…...

C语言:分支与循环

创造不易,友友们给个三连吧!! C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分…...

【linux系统体验】-archlinux折腾日记

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化 三、问题总结3.1 终端中文乱码 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤: 磁盘分区安装 Linux内核配置系统(…...

常用数字处理格式校验

1、前端校验 1.1 要求为数字类型&#xff08;不限位数与正负&#xff09; input输入框添加 type“number” <el-input type"number"/>当typenumber时&#xff0c;仍然可以输入字母e或E。解决方法是&#xff1a;给typenumber的输入框添加一个正则表达式&…...

2024.1.26力扣每日一题——边权重均等查询

2024.1.26 题目来源我的题解方法一 使用dfs对每一组查询都求最近公共祖先&#xff08;会超时&#xff0c;通不过&#xff09;方法二 不需要构建图&#xff0c;直接在原始数组上进行求最大公共祖先的操作。 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2846 我的题解 …...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...