数据结构--线性表以及其顺序存储结构

这里写目录标题

  • 线性表的定义和特征
    • 定义
    • 特征
  • 案例引入
    • 稀疏多项式
    • 链表实现多项式相加
    • 小结
  • 线性表的类型定义(抽象数据类型)
    • 定义格式
    • 基本操作
    • 小结
  • 线性表的顺序表示和实现
    • 实现1
      • 顺序存储表示
      • 顺序表中元素存储位置的计算
    • 实现2
      • 顺序表的优点
      • 问题出现
      • 结构体表示形式
    • 补充
      • 数组定义
      • c 语言动态内存分配
      • c++相关知识补充
      • 值传递时 指针类型不改实参值
      • 引用类型传递
        • 格式
    • 线性表基本操作的实现
      • 顺序表示意图
      • 基本操作的实现
        • 查找算法操作的实现
          • 算法设计
          • 算法分析
        • 插入算法的实现
          • 算法设计
          • 算法分析
        • 删除算法的实现
          • 算法设计
          • 算法分析
    • 总结

线性表的定义和特征

定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例子:
在这里插入图片描述

特征

在这里插入图片描述
在这里插入图片描述

案例引入

稀疏多项式

在这里插入图片描述
在这里插入图片描述

链表实现多项式相加

在这里插入图片描述

小结

在这里插入图片描述
接下来要研究:抽象出逻辑结构和基本操作(也就是抽象数据类型的特征),然后实现其存储结构和基本操作

线性表的类型定义(抽象数据类型)

定义格式

在这里插入图片描述

基本操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可用于做条件判断

在这里插入图片描述
注意i的取值范围,插入时可以在1和n+1的位置

在这里插入图片描述
第二个是遍历,具体遍历的操作内容由visited()函数的功能决定

小结

在这里插入图片描述
逻辑结构只是理清逻辑

存储结构,就是常见的高级语言程序

线性表的顺序表示和实现

实现1

顺序存储表示

在这里插入图片描述
在这里插入图片描述
逻辑上相邻,物理上也相邻,地址连续

顺序表中元素存储位置的计算

在这里插入图片描述

实现2

顺序表的优点

在这里插入图片描述

问题出现

在这里插入图片描述
线性表长度可变,但是数组长度固定,出现冲突

结构体表示形式

在这里插入图片描述
定义一个结构体,里面先是一个数组(该数组可以是基本数据类型,也可以是自定义数据类型,图中使用的是自定义元素类型),之后是一个表示当前长度的变量

该方式可以实现数组的长度可变,具体见下面“补充”

案例
在这里插入图片描述
*elem为指向一个数组的指针,是定义数组的另一种形式,数组名即为elem,较为常用这种定义方法

补充知识:

在这里插入图片描述

补充

数组定义

在这里插入图片描述

c 语言动态内存分配

在这里插入图片描述
malloc后面括号里是参数,参数为开辟的字节数,可以用图中的方法计算,maxsize是指元素个数
malloc前面是强制类型转换,当当以结构体时用的是指针定义数组时,在强制类型转换时,要加星号,强转为指针

最后将得到的空间赋值给L.data
(L是自定义数据类型的变量,类似于java类的对象)

c++相关知识补充

在这里插入图片描述
在这里插入图片描述

值传递时 指针类型不改实参值

在这里插入图片描述
这样在函数里只是改变了指针指向的变量,并没有对变量做操作

引用类型传递

格式

在这里插入图片描述
可以理解为j和i公用一个地址区域

案例
在这里插入图片描述
在这里插入图片描述

线性表基本操作的实现

顺序表示意图

在这里插入图片描述

基本操作的实现

在这里插入图片描述
数据结构中, 算法开头status 的意思算法开头status 是一种数据类型的别名,这单词是状态的意思,在教材一般都有说明,如返回 的是状态信息,就用status 声明函数返回类型。而通常用以下的语句说明status:如typedef int status ;这说明其实status和int 型是相同的

typedef int Status;大致上是用来返回本函数是否执行成功,它的几个取值OK,ERROR,OVERFLOW也在同时定义使用的时候把这些东西定义好了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查找算法操作的实现

算法设计

在这里插入图片描述

算法分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ASL 就是指平均查找长度,也就是平均访问次数,是时间效率的一种
案例
在这里插入图片描述

插入算法的实现

算法设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法分析

在这里插入图片描述
可以直接列出来,之后直接找规律,累加除以元素个数n即可

时间复杂度是o(n)
在这里插入图片描述

删除算法的实现

算法设计

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

算法分析

在这里插入图片描述

总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/38711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django项目开发快速入门

Django项目开发快速入门 生成Django项目编写module后台管理系统admin自定义管理页面视图函数使用Django模板 生成Django项目 现在cmd中使用命令安装Django框架 pip install django3.2使用命令生成项目 django-admin startproject DjStore使用命令生成应用 python .\manage.…

安天逆向教程——常用汇编语句

一.汇编基础 二.条件分支 反汇编时更多关注这些条件分支。如果看懂这些条件分支,会对程序的大体逻辑有一个整体的了解。 至于程序里面的细节,有时会省略掉。往往关键的跳转理解了甚至进行一点点的改动,就会使得程序发生翻天覆地的变化。 三…

Android Jetpack Compose多平台用于Android和IOS

Android Jetpack Compose多平台用于Android和IOS JetBrains和外部开源贡献者已经努力工作了几年时间来开发Compose Multiplatform,并最近发布了适用于iOS的Alpha版本。自然地,我们对其功能进行了测试,并决定通过使用该框架在iOS上运行我们的…

排序算法总结

目录 插入排序和希尔排序 堆排序 归并排序 快速排序 桶排序、计数排序、基数排序 这些排序的比较 冒泡排序和选择排序就不说了,直接介绍下面的几种排序算法: 插入排序和希尔排序 插入排序与希尔排序_小白麋鹿的博客-CSDN博客https://blog.csdn.n…

C国演义 [第十二章]

第十二章 打家劫舍题目理解步骤dp数组递推公式初始化遍历顺序 代码 打家劫舍II题目理解步骤递推公式初始化遍历顺序 代码 打家劫舍 力扣链接 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋…

如何保证消息的可靠性+延迟队列(TTL+死信队列+延迟队列)

目录 1.如何保证消息的可靠性 1.1.消息的可靠投递 confirm机制 return机制 1.2.如何保证消息在队列中不丢失 1.3.确保消息能可靠的被消费掉 2.延迟队列 2.1.TTL 2.2.死信队列 2.3.延迟队列 3.如何防止消费者重复消费消息 1.如何保证消息的可靠性 1.1.消息的可靠投递…

VMware扩展磁盘提示:在部分链上无法执行所调用的函数。请打开父虚拟磁盘

VMware扩展磁盘提示:在部分链上无法执行所调用的函数。请打开父虚拟磁盘 在为VMware中的虚拟机扩展磁盘时提示:在部分链上无法执行所调用的函数。请打开父虚拟磁盘。 出现这个问题是因为你先前创建过快照,但是快照删除时候,残余文…

【数据结构】链表及无头单向非循环链表实现

目录 1.顺序表的问题 2.链表的概念、结构及分类 3.无头单向非循环链表实现 3.1创建节点 3.2头插数据 3.3头删数据 3.4尾插 3.5尾删 3.6链表销毁 3.7查找一个元素 3.8在pos之前插入 3.9在pos之后插入 3.10删除pos位置 3.11删除pos之后的位置 1.顺序表的问题 顺…

Linux操作系统——第五章 进程信号

目录 信号概念 用kill -l命令可以察看系统定义的信号列表 信号处理常见方式概览 产生信号 1. 通过终端按键产生信号 2. 调用系统函数向进程发信号 3. 由软件条件产生信号 4. 硬件异常产生信号 阻塞信号 1. 信号其他相关常见概念 2. 在内核中的表示 3. sigset_t 4.…

C语言——指针详解(进阶)

轻松学会C语言指针 一、字符指针二、数组指针2.1 数组指针的定义2.2 &数组名VS数组名2.3 数组指针的使用 三、指针数组四、数组参数和指针参数4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 五、函数指针六、函数指针数组七、指向函数指针数组的指针八…

Kubernetes - HPA-VPA - metrics介绍和安装 - HPA实验

目录 参考文章:(97条消息) Kubernetes-自动扩展器HPA、VPA、CA_hpa vpa_SRE运维充电站的博客-CSDN博客 HPA VPA 官方网址:autoscaler/vertical-pod-autoscaler at master kubernetes/autoscaler GitHub HPA和VPA进行扩缩容的区别: me…

小研究 - 面向 Java 的高对抗内存型 Webshell 检测技术(四)

由于 Web 应用程序的复杂性和重要性, 导致其成为网络攻击的主要目标之一。攻击者在入侵一个网站后, 通常会植入一个 Webshell, 来持久化控制网站。但随着攻防双方的博弈, 各种检测技术、终端安全产品被广泛应用, 使得传统的以文件形式驻留的 Webshell 越来越容易被检测到, 内存…

《TCP IP网络编程》第七章

第七章:优雅的断开套接字的连接 TCP 的断开连接过程比建立连接更重要,因为连接过程中一般不会出现大问题,但是断开过程可能发生预想不到的情况。因此应该准确掌控。所以要掌握半关闭(Half-close),才能明确断…

windows10 搭建hadoop环境,并且使用hadoop命令

hadoop 环境创建 1. 八、window搭建spark IDEA开发环境 按照步骤安装完 2. windows下安装和配置hadoop 配置环境变量,注意JAVA_HOME路径,修改后,重启电脑,不重启容易报错!!! ​ 新建dat…

数据结构(王道)——数据结构之 二叉树

一、数据结构之 二叉树概念: 特殊的二叉树结构: 满二叉树完全二叉树 二叉排序树 平衡二叉树 二叉树基本概念总结: 二、二叉树的常用性质: 1、叶子结点比二分支结点多一个

Kubernetes - kubeadm部署

Kubernetes - kubeadm部署 1 环境准备1.1 在各个节点上配置主机名,并配置 Hosts 文件1.2 关闭防护墙,禁用selinux,关闭swap1.3 配置免密登录1.4 配置内核参数1.5 配置br_netfilter 2. 安装K8s2.1 安装docker(各节点)2.2 安装K8s组件(各节点)2…

走进Vue2飞入Vue3

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Cisyam-Shark的博客 💞当前专栏: Vue ✨特色专栏&#xff…

“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”

快速排序是一种基于分治思想的排序算法,它能够以极快的速度将一个乱序的数组重新排列成有序的序列。不仅如此,快速排序还具有简洁的实现代码和良好的可扩展性,成为最受欢迎的排序算法之一。接下来,让我带你了解一下它的魅力吧&…

【Matlab】智能优化算法_麻雀搜索算法SSA

【Matlab】智能优化算法_麻雀搜索算法SSA 1.背景介绍2.数学模型3.文件结构4.伪代码5.详细代码及注释5.1 Get_Functions_details.m5.2 main.m5.3 SSA.m 6.运行结果7.参考文献 1.背景介绍 麻雀通常是群居的鸟类,有很多种类。它们分布在世界的大部分地区,喜…

Http host 标头攻击

一、什么是http host 标头攻击 HTTP Host 标头攻击是一种网络安全攻击技术,利用了 HTTP 协议中的 Host 标头字段的漏洞。Host 标头字段用于指定客户端请求的目标主机名或域名。 攻击者可以通过构造恶意的 HTTP 请求,伪造或篡改 Host 标头字段的值&#x…