【数据结构】二、顺序表的定义和基本操作的实现

2023-10-29

数据结构 DATA STRUCTURE

二、线性表

2.1 线性表的定义和基本操作概述

线性表的定义和基本操作

2.2 线性表的顺序表示

顺序表:线性表的顺序存储。(顺序存储≠顺序存取)

用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的两个元素在物理位置上也相邻。

特点

  1. 逻辑相邻,物理也相邻。
  2. 任一数据元素可 随机存取。

通常用数组来描述线性表的顺序存储结构。
注意:线性表中元素的位序是从1开始的,而数组中元素的下标是从0开始的。


2.2.1 顺序表存储结构描述和特点
1. 静态存储方式
#define MaxSize 50				// 定义线性表的最大长度的值
// 静态分配数组顺序表的类型定义
typedef struct{
    ElemType data[MaxSize];		// 顺序表的元素类型、长度
    int length;					// 顺序表当前长度
}SqList;						
2. 动态存储方式
#define InitSize 100
// 动态分配数组顺序表的类型定义
typedef struct{
    ElemType *data;				// 指示动态分配数组的指针
    int MaxSize, length;		// 数组的最大容量和当前个数
}SeqList;						

// C 的初始动态分配语句
L.data = (ElemType*)malloc(sizeof(ElemType) * InitSize);

// C++的初始动态分配语句
L.data = new ElemType[InitSize];

一维数组是可以静态分配,也可以是动态分配的。(不管是哪种分配方式,都属于顺序存储结构,物理结构没有变化,依然是随机存取方式,只是分配的空间大小可以在运行时动态决定。)

  • 静态分配当空间占满的时候,容易产生溢出;
  • 动态分配中存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,空间占满,还可以开辟一块更大的存储空间替换原来的存储空间,不需要一次性划分所有空间。

静态动态的区别也就是用不用指针,指针就是为了间接访问,方便动态操作而设计的。用指针来指向数据域并且用指针进行动态分配即可实现“动态存储”。

关于malloc、free函数:
malloc、free
malloc会在内存中申请一整片连续的存储空间,并且返回指针。

动态分配基本操作实现:

初始化:

// 动态分配顺序表的初始化
void InitList(SqList &L) {
    L.data = (int *)malloc(InitSize * sizeof(int));
    L.length = 0;
    L.MaxSize = InitSize;
}

对 L 的三个成员变量进行赋值。

增加动态数组的长度:

void IncreaseSize(SqList &L, int len) {
    int *p = L.data;
    L.data = (int *)malloc((L.MaxSize+len)*sizeof(int));
    for (int i=0; i<L.length; i++) {
        L.data[i] = p[i];  // 将数据复制到新区域
    }
    L.MaxSize = L.MaxSize+len;  // 顺序表最大长度增加len
    free(p);  // 释放原来的内存空间
}

重新找到另外一块更大的区域,并且把之前的空间拿来,而且删除原来的空间。

  1. 时间开销大❗❗
  2. realloc 函数也可实现,malloc和free更底层。
3. 顺序表的优缺点

总是和表长length以及数组打交道(毕竟人家存储结构就是这俩

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构】二、顺序表的定义和基本操作的实现 的相关文章

随机推荐

  • SpringCloud Alibaba 组件介绍

    Spring Cloud Alibaba 一 介绍Spring Cloud Alibaba 简介 spring cloud Netflix 相关技术整体进入维护模式 Ribbon Hystrix zuul Eureka config等 sp
  • Vue课后练习题及答案解析

    Vue课后练习题 第一章 Vue js基础入门 填空题 Vue是一套构建 的渐进式框架 用户界面 MVVM主要包含3个部分 分别是Model View和 ViewModel Vue中通过 属性获取相应的DOM元素 refs 在进行Vue调试
  • html a标签去掉下划线_HTML常用标签a、img、table

    HTML常用标签 a 标签的用法 标签定义超链接 用于从一张页面链接到另一张页面 主要属性有href target download rel等 href指示超链接目标 可以取网址 相对路径 绝对路径 伪协议进行跳转 target属性规定在何
  • 【SpringBoot】最通俗易懂的任务机制(一)--异步任务和定时任务

    注 本文章基于尚硅谷Springboot高级特性相关视频及资料进行编写 代码简单 较容易理解 若有问题或者源码资料获取可以在评论区留言或者联系作者 目录 导引 异步任务 没有返回值的异步任务 有返回值的异步任务 定时任务 总结 导引 开发w
  • springboot自定义favicon.ico

    Favicon配置 说到favicon ico这个小图标 Spring Boot提供了默认的小叶子 如果大家想定制这个小图标可通过以下做法 1 application properties spring mvc favicon enable
  • QObject::connect: No such signal 原因

    QObject connect No such signal 使用connect连接信号与槽函数时 附带了信号或者槽函数的参数 编译会通过 而运行不会通过 若信号函数 void signal 1 int param 槽函数 void fun
  • ssh连接localhost失败 permission deny问题解决

    首先确认ssh 和 sshd都已经正常安装且运行 其次设置ssh和sshd的一些系统参数 基本都是修改以下这两个文件 1 etc ssh ssh config 2 etc ssh sshd config 比如permitrootlogin
  • 如何使用 docker 搭建本地 overleaf 服务器

    如何使用 docker 搭建本地 overleaf 服务器 overleaf 使用便捷 相信很多人都在上面编辑过论文 但是国内访问 overleaf 确实网速限制比较大 编译时等待时间较长 而且中文字体等配置也不是很方便 应运而生的 ove
  • 自动化测试之 Espresso VS Appium

    前言 事情的起因是这样的 相信很多人都经历过这样一个过程 一个成熟的线上app版本需要更新一个系列新功能的时候 我们上线需要完成以下几个步骤 1 测试环境下 测试人员测试新功能 并且连带需要测试线上稳定版本的主要老功能 2 确保没问题以后
  • B树与B+树

    一 B树 B 树 特点 1 多路 非二叉树 2 每个节点既保存索引 又保存数据 3 搜索时相当于二分查找 二 B 树 特点 1 多路非二叉 2 只有叶子节点保存数据 3 搜索时相当于二分查找 4 增加了相邻接点的指向指针 三 B树与B 树的
  • 决策树和 K 近邻分类

    决策树和 K 近邻分类 决策树和 K 近邻分类 决策树和 K 近邻分类 介绍 知识点 机器学习介绍 示例 决策树 如何构建决策树 熵 玩具示例 决策树构建算法 分类问题中其他的分割质量标准 示例 树的关键参数
  • CUnit的用法

    CUnit下载地址 http sourceforge net projects cunit CUnit 在线文档帮助 http cunit sourceforge net doc index html 关于CUnit 本文主要从介绍三方面的
  • Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

    大纲一 前言二 环境准备三 Corosync 安装与配置四 Pacemaker 安装与配置五 DRBD 安装与配置六 MySQL 安装与配置七 crmsh 资源管理 推荐阅读 Linux 高可用 HA 集群基本概念详解 http www l
  • c语言中delay的用法。

    C语言作为一门新型高级编程语言 在计算机软件编程中具有较为广泛的应用和实现 下面小编就跟你们详细介绍下c语言中delay的用法 希望对你们有用 c语言中delay的用法如下 假设一个延时函数如下 void delay uint i for
  • Unity 动态生成mesh圆圈

    using UnityEngine using System Collections RequireComponent typeof MeshRenderer typeof MeshFilter public class yuan Mono
  • BIOS中开启虚拟化技术

    安装Intel Hardware Accelerated Execution Manager 为了避免Android虚拟设备创建过程中发生错误 下载地址 https software intel com en us android arti
  • 闲置资源优化,轻松检查集群中的空闲成本

    前言 Kubernetes 提供了对计算 网络 存储资源的抽象 提升了集群资源管理的效率 然而 由于用户不需要直接管理底层资源 可能导致部分闲置资源未及时发现 造成成本浪费 在企业 IT 成本治理过程中 如何发现并处理这部分资源 是成本优化
  • Nvidia Deepstream极致细节:3. Deepstream Python RTSP视频输出显示

    Nvidia Deepstream极致细节 3 Deepstream Python RTSP视频输出显示 此章节将详细对官方案例 deepstream test 1 rtsp out py作解读 deepstream test 1 rtsp
  • Buuctf——[RCTF2015]EasySQL

    Buuctf RCTF2015 EasySQL 一 解题步骤 1 看到注册登录 闲着没事先注册个号试试 1 123 2 进去看了 除了受到文化熏陶 别的好像没有啥 点一下试试其有什么功能 一不小心就看到了修改密码 3 惊奇的发现 密码可以被
  • 【数据结构】二、顺序表的定义和基本操作的实现

    目录 数据结构 DATA STRUCTURE 二 线性表 2 1 线性表的定义和基本操作概述 2 2 线性表的顺序表示 2 2 1 顺序表存储结构描述和特点 1 静态存储方式 2 动态存储方式 3 顺序表的优缺点 2 2 2 顺序表基本操作