数据结构之概念与线性表

2023-11-06

算法

算法特征:

1.有穷性

2.确定性

3.可行性

4.输入和输出

算法好坏评价:

  • 正确性
  • 可读性
  • 确定性
  • 健壮性(效率和低存储)

算法效率的度量:

  • 时间复杂度
  • 空间复杂度

线性表

  1. 顺序存储:线性表

  2. 链式存储 :

指针实现

  • 单链表、
  • 双链表
  • 循环链表  

静态链表(借助数组实现)

顺序表存储定义

使用数组静态定义:即存储空间一旦满,再加入新的数据将产生溢出。

#define Maxsize 50 //定义线性表的最大长度
typedf struct
{
    Elemtype *data;//顺序表的元素
    int length;     // 顺序表的当前长度

}Seqlist;  //顺序表的定义

使用数组动态定义:即存储数据的空间满时,可以使用realloc申请更大的空间,代替原来的空间。

#define MaxSize 100  //表的长度初始定义
typedef struct
{
    ElemType *data;    //指示动态分配数据的指针
    int MaxSize, length;  //数组的最大的容量和当前的个数
 } SqList;              //动态分配数据顺序表的类型定义

c语言动态申请空间:L.data=(Elemtype*)malloc(sizeof(Elemtype)*InitSize)

特点:‘

1.顺序表是一组地址连续的存储单元。故表中的元素逻辑顺序与物理顺序相同。

2.可以随机存储,且存储密度大。

3.缺点是在插入和删除需要移动大量元素。

顺序表插入

bool ListInsert(Sqlist &L, int i, ElemType e)
{
    //将元素e插入到顺序表L中的第i个位置
    if(i<1 || i > L.length +1) //判断i的位置是否有效
        return false;
    if(l.length >= MaxSize)  //当前存储已满
        return false;
    for(int j=L.length; j>=i; j--)   //找到插入i位置,并将其以及之后的元素后移
        L.data[j]= L.data[j-1];

    L.data[i-1] = e;
    L.length++;
    return true; 
}

此时插入的平均时间复杂度是O(n)。

顺序的删除

bool Listdele(Sqlist &L, int i, ElemType &e)
{
    //删除顺序表L中的第i个位置,并用e作为返还值
    if(i<1 || i > L.length +1) //判断i的位置是否有效
        return false;
    e = L.data[i-1];
    for(int j=i; j<L.length; j--)   //找到插入i位置,并将其以及之后的元素后移
        L.data[j-1]= L.data[j];
    L.length--;
    return true; 
}

此时删除的平均时间复杂度是O(n)。

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

数据结构之概念与线性表 的相关文章

  • 【送书活动】AI时代,程序员需要焦虑吗?

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • C++的std::is_same与std::decay

    一 背景 有一个模板函数 函数在处理int型和double型时需要进行特殊的处理 那么怎么在编译期知道传入的参数的数据类型是int型还是double型呢 include
  • 第五课 for循环(1)--循环次数控制

    第五课 for循环 1 循环次数控制 循环引入 例题5 1 画下面形状的5级梯形 分析 研究问题的方法之一是 从简单到复杂 步骤 说明 图形 步骤1 先分析简单的1级梯形基本问题 步骤2 代码为 pen fd 30 pen rt 90 pe
  • 为什么手机短信长度限制70个中文、160个英文???

    手机短信的长度是由编码决定的 根据国际标准 每条短信最多发送1120位 合 1120 8 140 一个字节占8位 140字节的内容 如果发送纯英文字符 由于英文ASCII采用 7位编码 所以1120位的限额可以传送1120 7 160个字符
  • VUE调用高德地图之热力图

    上次用VUE实现了高德地图的轨迹回放 现在来实现热力图功能 照例 第一步 加载JS AP 在public index html中加入 将官方demo转换为vue代码 放置地图 初始化map对象 生成热力图map 完整代码如下
  • latex表格中的字上下垂直居中

    单元格内容纵向靠上对齐 而是表线距单元格内容太近 调整表线和单元格内容之间的距离 可以通过重定义 arraystretch 来解决 renewcommand arrarstretch
  • Cannot apply to AuthenticationConfiguration already built object

    前言 Spring Security 在Spring Boot 2 7 0中升级已弃用的WebSecurityConfigrerAdapter 并且根据 EnableWebSecurity推荐自定义配置类后 还是错误的问题 失败的案例 首先
  • 多元线性回归模型的F检验

    F检验 对于多元线性回归模型 在对每个回归系数进行显著性检验之前 应该对回归模型的整体做显著性检验 这就是 F检验 当检验被解释变量 yt与一组解释变量 x 1 x 2 xk 1是否存在回归关系时 给出的零假设与备择假设分别是 H0 b1
  • vc++2010安装教程

    vc 2010是微软公司开发的一个专门用来编写C语言或C 的一个简化般的IDE 本章我们就来安装一下这个IDE 链接 https pan baidu com s 18TEvNMeUSFtSrysWNZ 4nw提取码 cnmk这个百度网盘里面
  • pipe和fork浅析

    pipe和fork浅析 fork pipe fork fork 是linux上创建子进程的系统调用 fork 函数一次调用两次返回 在父进程返回值是子进程的进程id 在子进程的返回值是0 fork 创建出来的子进程会从fork 函数后面开始
  • sqlserver 对表列的添加、修改、删除

    修改列 alter table 表名 alter column 列名 类型 alter table g contractLog alter column optContent nvarchar 50 添加列 alter table 表名 a
  • SPPNet详解(白话讲解——附图文)

    SPPNet是何凯明大神提出的 为了解决R CNN中速度慢问题 在神经网络中输入图片的尺寸必须是固定的 这是因为在设计的时候FC层中神经元的个数都是固定的 导致输入图片尺寸必须是固定的 CNN是可以适应不同尺寸的输入图片 说明在CNN后面加
  • C#使用FFMpeg.Autogen进行rtsp视频倍速播放

    1 在你的C 项目中 使用NuGet包管理器安装FFMpeg Autogen 可以在Visual Studio中打开NuGet包管理器控制台 并运行以下命令来安装它 Install Package FFMpeg Autogen 2 在代码引
  • 环形链表II

    环形链表II 给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos
  • S-DES

    S DES即simplifed DES S DES算法的输入是一个8位的明文或者密文组和一个10位的密钥 输出是一个8位的密文或者明文组 以下是S DES所需的几个置换表 P10 3 5 2 7 4 10 1 9 8 6 P8 6 3 7
  • 去掉 Powered by Discuz! 6.0.0 © 2001-2007 Comsenz Inc.

    去掉 Powered by Discuz 6 0 0 2001 2007 Comsenz Inc templates default footer htm 倒数第15行 16行删除 即下面的代码 Powered by Discuz vers
  • 图形学数学基础之重要性采样(Importance Sampling)

    作者 i dovelemon 日期 2017 08 06 来源 CSDN 主题 Importance Sampling PDF Monte Carlo 引言 前面的文章 图形学数学基础之基本蒙特卡罗尔积分 Monte Carlo Integ
  • 数组访问越界问题

    1 什么是数组访问越界 我们通过数组的下标来得到数组内指定索引的元素 这称作对数组的访问 如果一个数组定义为有n个元素 那么 对这n个元素 下标为0 到 n 1的元素 的访问都合法 如果对这n个元素之外的访问 就是非法的 称为 越界 数组占
  • Customplot画多条折线图,同时可以控制每条曲线的隐藏和显示

    Customplot多条曲线的控制 前言 开始使用Qcharts画图 大数据性能极差 于是转用Customplot画图 主要进行数据的实时更新和大量数据的加载 一 模拟数据 采用子线程创建模拟数据 采用队列存储 pragma once in
  • PostgreSQL简单使用介绍

    之前没怎么接触各类数据库 现在对新上手的数据库都来学习一番 项目组经常用到的数据库和新使用的数据库都会做个笔记 本篇讲讲postgresql 1 安装配置postgresql 参考网址 https blog csdn net DaSo CS

随机推荐

  • LINUX驱动开发学习笔记---GCC编译器

    一 GCC编译器基础使用 Q 为什么需要GCC编译器 A 在Windows下我们 可以 使用各种各样的 IDE进行编程 比如强大的 Visual Studio 它既可以编辑也可以编译 但是linux下vi或vim编辑器只能用于编辑 不能编译
  • 【机器学习】最大熵算法 整理

    最大熵模型由最大熵原理推导实现 1 最大熵原理 最大熵原理认为 学习概率模型时 在所有可能的概率模型 分布 中 熵最大的模型是最好的模型 通常用约束条件来确定概率模型的集合 所以 最大熵原理也可以表述为在满足约束条件的模型集合中选取熵最大的
  • Python如何把 dict 快速转换为namedtuple

    下面的代码可能让你更容易理解
  • Maven实战(三)Eclipse构建Maven项目

    1 Eclipse安装m2eclipse插件 见eclipse maven plugin 插件 安装 和 配置 2 构建Maven项目 2 1 创建简单Maven项目 点击Eclipse菜单栏File gt New gt Ohter gt
  • FastApi-21-APIRouter

    Part1背景 通常在我们开发 app 时都会用到路由 像 Flask 有 blueprint Django 有 urls 等 其目的都是为了路由汇总管理 FastApi 也不例外 其拥有 APIRouter 今天我们就一起来了解 APIR
  • vue分层项目架构搭建过程与踩过的坑

    项目介绍 公司已有saas项目 因为需求变动前后端都相应的做出架构调整 后端采用分层模式开发 要求每个模块可单独发布 可按客户需求单模块部署到客户服务器 所以前端的框架要求也要符合这个需求 前端具体需求 1 客户有自己的系统需要引入我们产品
  • 【Unity实用小知识点】EventTrigger在3D物体或UI上应用

    Event Trigger Event Trigger可以在一些简单交互上非常方便的使用 废话比较多 想直接看UI和3D区别的直接跳到总结 官方API 描述 从 EventSystem 接收事件并为每个事件调用注册函数 EventTrigg
  • 这几天来重学Java的感受

    拿出课本重新开始看 最大的感受就是以前学的太浅显了 而且缺少练习 才过了不到一年就忘得差不多了 已经下定决心要好好学习Java 不会轻言放弃 我不知道大家选择开发选择敲代码是不是真的喜欢 反正我并不是特别喜欢 不过也不算讨厌 我总觉得不管哪
  • Matlab使用CUDA--利用cudamex

    目录 一 编写可供Matlab编译的CUDA代码 1 待编译的程序需要包含的头文件 2 待编译程序的程序入口函数mexFunction 3 参数传递方法 二 使用Matlab编译CUDA工程并调用 1 mexcuda编译指令 2 参考文章
  • centos7 安装gitlab 之 被502支配的恐惧

    之前重装了下gitlab 本以为很轻松 结果pp打脸 一直就是下面这个页面 看到这个502都有阴影了 看了网上各位兄dei的写的相关问题解决办法 总结了下 1 端口被占用 etc gitlab gitlab rb 这个文件里面 有3个地方需
  • 【Step1】Java SE Development Kit 17.0.6

    点击下方链接 Java SE 17 Archive Downloads 选择下载文件 以windows x64 installer为例 运行安装文件 点下一步 可选 更改安装文件夹 点下一步 可选 点击后续步骤 JDK 17 Documen
  • Python反转输出正整数

    题目 获得输入正整数 N 反转输出该正整数 不考虑异常情况 输入格式 输入一个正整数 输出格式 输出一个正整数 疑问 为什么我的两个答案都没通过Python二级在线评阅的测试 我
  • 【数据库】--- Redis

    Redis 概述 Redis 简介 下载与安装 基本使用 基本知识 数据结构 字符串类型 String 列表类型 List 集合类型 Set 哈希类型 hash 有序集合 zset srted set 关于key的指令 1 查询符合条件的
  • js逆向-某动网演出数据获取

    声明 本文仅供学习参考 如有侵权可私信本人删除 请勿用于其他途径 违者后果自负 如果觉得文章对你有所帮助 可以给博主点击关注和收藏哦 前言 目标网站 aHR0cHM6Ly93d3cuc2hvd3N0YXJ0LmNvbS9ldmVudC9sa
  • 爆改闲置主机为nas

    目录 一 工具准备 1 工具 2 下载需要安装的文件 二 进行实操 1 刷U盘或者硬盘的引导 2 上x86主机 3 连接x86主机 4 安装群辉 三 进入系统 1 存储池的设置 2 共享文件夹的设置 3 用户的设置 4 IP地址的固定 作者
  • 轿车双横臂式独立前悬架及多连杆式独立后悬架设计(毕业论文+7张CAD图纸)

    轿车双横臂式独立前悬架及多连杆式独立后悬架设计 摘 要 悬架是汽车重要的组成部分 是传递车轮与车身之间的各种力和力矩的连接装置 轿车的前悬架采用的双横臂式独立悬架 其后悬采用的是多连杆式独立悬架 双横臂式的独立悬架是常见的悬架形式之一 由于
  • 详解TCP,三次握手,四次挥手

    前言 TCP是非常常见的面试题 是必会的知识点 记录一下与各位共同学习 三次握手 问 为什么要三次握手 因为三次握手才能保证双方具有接收和发送的能力 第一次握手 客户端发送带有 SYN 标志的连接请求数据包给服务端 第二次握手 服务端发送带
  • 解决linux根目录磁盘空间不足问题

    问题 一开始创建虚拟机 分配给虚拟机的磁盘空间太小了 所以磁盘空间很快就会填满 如果根目录的磁盘空间占用超过90 会导致无法再新安装软件 可以通过df h命令查看磁盘的剩余空间 df命令的英文全称即 Disk Free 顾名思义功能是用于显
  • 算法题记录【华为od】AI处理器组合

    题目描述 思路分析 这个题感觉更像优先级的问题 但是题目里面又没有讲清楚 不太理解 本人是按照题目描述以及自我理解做的 感觉还是不对劲 代码解析 let input 0 1 4 5 6 7 arr1 arr2 let input1 3 边界
  • 数据结构之概念与线性表

    算法 算法特征 1 有穷性 2 确定性 3 可行性 4 输入和输出 算法好坏评价 正确性 可读性 确定性 健壮性 效率和低存储 算法效率的度量 时间复杂度 空间复杂度 线性表 顺序存储 线性表 链式存储 指针实现 单链表 双链表 循环链表