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

数据结构(2)

目录

一、线性表

二、顺序表

2.1 概念与定义

2.2 分类

2.2.1  静态顺序表

2.2.2 动态顺序表

2.3顺序表的初始化和销毁

2.4 顺序表的后插和头插

2.5 顺序表的尾删和头删

 2.6 顺序表指定位置的插入和删除

2.7 顺序表查找数据


一、线性表

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

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

二、顺序表

2.1 概念与定义

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。

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

2.2 分类

2.2.1  静态顺序表

概念:使用定长数组存储元素。

 SLDataType a[8]是定长数组;

int size 是有效数据个数

静态顺序表的缺陷是:空间给少了不够用,给多了造成空间的浪费

2.2.2 动态顺序表

首先,我们先定义了动态顺序表。如上述代码所示:

2.3顺序表的初始化和销毁

接着,我们定义顺序表的初始化和销毁;

 注意这里需要传地址;在每写完一个后记得及时测试;

2.4 顺序表的后插和头插

尾插分为两种情况:
1、空间充足,将数据插入size指向的位置,size++

2、空间不足,先增容,再插入

增容一般呈倍数增加,比如2->.4->8->16......

增容也分为两种情况:

1、连续空间足够,直接扩容

2、连续空间不够,重新找一块地址,分配足够的内存,拷贝数据到新的地址,销毁旧的地址

在这里我们使用realloc函数来增容;在写尾插后,就可以进行测试,并写出打印顺序表的函数。

 由于头插和尾差一样也需要先判断空间是否足够,因此我们可以将扩容写成一个函数

接下来,我们就可以实现头插的操作

即原数组整体后移一位。且注意:因为是后移一位,所以应该从最后一位开始移动。

2.5 顺序表的尾删和头删

尾删的实现:

ps->arr[ps->size-f] = 0;

ps->size--;

注意:若顺序表为空,不可删除

则就要对size进行assert进行断言

 在头删时,将第一个位置以后的数据从后往前移动一位;

 2.6 顺序表指定位置的插入和删除

首先,我们先判断插入位置pos位于顺序表中;

在pos之后的数据整体往后移动一位

再插入对应的数据;

注:在删除pos的位置时,pos不能等于size

在删除指定位置时候,pos之后的数据整体向前挪动一位

之后size--就可以实现

2.7 顺序表查找数据

 查找这里较为简单。不做过多叙述

由此,顺序表的基本就完成了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 单目测距 单目相机测距 图片像素坐标转实际坐标的一种转换方案
  • MySQL中记录(Documents)的基本操作——添加记录和查找记录
  • 树莓派+攀腾PMSA003-PM2.5传感器监测空气质量【含源码+接线图】
  • Navicat 17 新特性 | 原生支持 Linux ARM 平台以及银河麒麟和统信操作系统
  • 应变与几何方程——弹性力学
  • Kithara与OpenCV (一)
  • IDEA中使用Maven打包及碰到的问题
  • android 固定图片大小
  • vue3 身份证校验、识别性别/生日/年龄
  • MMGPL: 多模态医学数据分析与图提示学习| 文献速递-基于深度学习的多模态数据分析与生存分析
  • 如何找回误删的文件?4个常用文件恢复方法!
  • 『C++成长记』vector模拟实现
  • RequestContextHolder多线程获取不到request对象
  • 基于springboot+vue+uniapp的机电公司管理信息系统
  • Llama-factory源码详细解读
  • 77. Combinations
  • Akka系列(七):Actor持久化之Akka persistence
  • java2019面试题北京
  • mysql常用命令汇总
  • node和express搭建代理服务器(源码)
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • React-Native - 收藏集 - 掘金
  • supervisor 永不挂掉的进程 安装以及使用
  • Vue2.x学习三:事件处理生命周期钩子
  • Webpack 4 学习01(基础配置)
  • 构建工具 - 收藏集 - 掘金
  • 码农张的Bug人生 - 见面之礼
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 模型微调
  • 如何解决微信端直接跳WAP端
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 在weex里面使用chart图表
  • 追踪解析 FutureTask 源码
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #14vue3生成表单并跳转到外部地址的方式
  • #传输# #传输数据判断#
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $(function(){})与(function($){....})(jQuery)的区别
  • (20)docke容器
  • (3)(3.5) 遥测无线电区域条例
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (ZT)薛涌:谈贫说富
  • (笔试题)分解质因式
  • (定时器/计数器)中断系统(详解与使用)
  • (回溯) LeetCode 40. 组合总和II
  • (四)鸿鹄云架构一服务注册中心
  • ***检测工具之RKHunter AIDE
  • .net 4.0发布后不能正常显示图片问题
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 按比例显示图片的缩略图
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 使用ajax控件后如何调用前端脚本
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化