C++学习之动态数组和链表

ops/2025/3/16 20:50:05/

1.课程回顾

2.数据结构基本概念

1.1数据结构概念

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

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

1.2算法的概念

算法是特定问题求解步骤的描述,在计算机中表现为指令的有限序列,算法是独立存在的一种解决问题的方法和思想。

对于算法而言,语言并不重要,重要的是思想。

1.2.1算法和数据结构区别

数据结构只是静态的描述了数据元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法。

 

  1. 算法是为了解决实际问题而设计的。
  2. 数据结构是算法需要处理的问题载体。
  3. 数据结构与算法相辅相成

3.动态数组设计

操作要点:

  1. 插入元素算法
    1. 判断线性表是否合法
    2. 判断插入位置是否合法
    3. 判断空间是否满足
    4. 把最后一个元素到插入位置的元素后移一个位置
    5. 将新元素插入
    6. 线性表长度加1
  2. 获取元素操作
    1. 判断线性表是否合法
    2. 判断位置是否合法
    3. 直接通过数组下标的方式获取元素
  3. 删除元素算法
    1. 判断线性表是否合法
    2. 判断删除位置是否合法
    3. 将元素取出
    4. 将删除位置后的元素分别向前移动一个位置
    5. 线性表长度减1
  1. 元素的插入

 

  1. 元素的删除

 

注意: 链表的容量和链表的长度是两个不同的概念

示例代码\01 动态数组

2.2.2优点和缺点

  • 优点:
  1. 无需为线性表中的逻辑关系增加额外的空间。
  2. 可以快速的获取表中合法位置的元素。

 

  • 缺点:
  1. 插入和删除操作需要移动大量元素。

4.动态数组初始化实现

  • 优点:
  1. 无需为线性表中的逻辑关系增加额外的空间。
  2. 可以快速的获取表中合法位置的元素。

 

  • 缺点:
  1. 插入和删除操作需要移动大量元素。

 

2.3线性表的链式存储(单向链表)

前面我们写的线性表的顺序存储(动态数组)的案例,最大的缺点是插入和删除时需要移动大量元素,这显然需要耗费时间,能不能想办法解决呢?链表。

链表为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。

 

 

 

  1. 单链表
    1. 线性表的链式存储结构中,每个节点中只包含一个指针域,这样的链表叫单链表。
    2. 通过每个节点的指针域将线性表的数据元素按其逻辑次序链接在一起(如图)。

  1. 概念解释:
  1. 表头结点

链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息

  1. 数据结点

链表中代表数据元素的结点,包含指向下一个数据元素的指针和数据元素的信息

  1. 尾结点

链表中的最后一个数据结点,其下一元素指针为空,表示无后继。

5.动态数组插入和遍历功能实现

6.动态数组删除实现

 

7.动态数组销毁功能实现

8.动态数组文件编写

9.链表设计

10.链表初始化、插入和遍历功能实现

11.删除链表节点的功能实现

12.返回链表长度、清空销毁功能实现

 

13.课程回顾

14.单向链表企业版本设计思路

 

15.企业版本链表初始化、插入遍历功能实现

16.企业版本链表删除、销毁功能实现

 

 


http://www.ppmy.cn/ops/166311.html

相关文章

Hive SQL 精进系列:SUBSTR 函数的多样用法

目录 一、引言二、SUBSTR 函数基础介绍2.1 基本语法2.2 参数详解2.3 简单示例 三、SUBSTR 函数常见应用场景3.1 提取日期中的年份、月份或日期3.2 隐藏部分敏感信息 四、SUBSTR 函数高级用法4.1 结合条件判断动态截取4.2 处理复杂字符串模式 五、总结 一、引言 SUBSTR 函数是 …

特殊 IP 地址

文章目录 特殊IP地址概述受限广播地址(Limited Broadcast Address)直接广播地址(Directed Broadcast Address)多播地址(Multicast Address)环回地址(Loopback Address)本网络本主机&…

Centos 7 安装达梦数据库

一、环境准备 1. 确认操作系统的版本和数据库的版本是否一致 cat /etc/redhat-release 2. 关闭防火墙 查看防火墙状态 firewall-cmd --state 停止firewall systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.service 3. 修改文件l…

力扣665. 非递减数列 475.供暖屋

给你一个长度为 n 的整数数组 nums &#xff0c;请你判断在 最多 改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的&#xff1a; 对于数组中任意的 i (0 < i < n-2)&#xff0c;总满足 nums[i] < nums[i 1]。 示例…

SAP Commerce(Hybris)营销模块(一):商城产品折扣配置

基于Hybris的Backoffice后台管理系统&#xff0c;创建一个基于模板的营销规则&#xff0c;并配置上对应的优惠活动。 架构设计 先从一张架构图说起 Hybris的促销模块&#xff0c;是基于Promotion引擎来实现的&#xff0c;可以通过Backoffice来进行配置。 通过上面的架构图又可…

在 CentOS 上安装 Oracle 数据库

文章目录 **1. 系统准备****1.1 检查系统要求****1.2 更新系统****1.3 安装必要的依赖包****1.4 创建 Oracle 用户和组****1.5 配置内核参数****1.6 配置用户限制****1.7 配置 PAM 模块****1.8 创建 Oracle 安装目录** **2. 下载 Oracle 数据库安装包****2.1 访问 Oracle 官方网…

理解 Retrofit 请求头与 GsonConverterFactory 的自动处理机制

在现代 Web 开发中&#xff0c;特别是在与 RESTful API 进行交互时&#xff0c;我们经常会遇到 JSON 格式的数据交换。为了确保请求的正确解析和响应的准确返回&#xff0c;通常需要通过 HTTP 请求头明确指定请求体的数据类型。而 Content-Type: application/json 就是用来告诉…

【蓝桥】模拟

一、引言 在算法学习的道路上&#xff0c;模拟算法是基础且重要的一环。它就像编程世界里的“模仿大师”&#xff0c;通过还原现实场景解决问题。无论是编程新手还是竞赛选手&#xff0c;掌握模拟算法都能提升对问题的拆解能力与代码实现细节的把控。今天&#xff0c;就让我们深…