4《数据结构》

文章目录

    • 绪论
    • 逻辑结构
    • 存储结构【物理结构】
    • 顺序和链式存储区别
    • 顺序表和数组区别
    • 数组和链表的区别
    • 链表结点概念
    • 链表为空条件
    • 链表文章http://t.csdnimg.cn/dssVK
    • 二叉树
    • B树
    • B+树【MYSQL索引默认数据结构】
    • B树和B+树区别
    • 冒泡排序
    • 插排
    • 选排
    • 快排

绪论

  • 数据结构:研究非数值计算程序设计中的操作对象,以及这些对象之间的关系和操作
  • 数据:客观事物的符号表示,所有输入到计算机并被程序处理的符号总称
  • 算法:为了解决某类问题而规定的一串有限长的操作序列
  • 算法标准:健壮性、有穷性、可行性、及低存储量
  • 节点:实体,有处理能力,类似网络的计算机
  • 结点:逻辑,链表中的元素,包括数据域和存储下一个结点地址的指针域
  • 数据项:数据结构的最小单位
  • 数据元素:数据的基本单位,是数据项的集合

逻辑结构

  • 集合:无逻辑关系
  • 线性结构:有序数据元素的集合
    线性表,数组,栈,队列,串
  • 非线性结构:一个结点元素可能有多个直接前趋和多个直接后继
    多维数组,广义表,树、图

存储结构【物理结构】

  • 顺序存储
  • 链式存储
  • 索引存储
  • 散列存储

顺序和链式存储区别

顺序存储链式存储
数组链表
数据元素放在地址连续的存储单元中数据元素存储在任意的存储单元里
数据元素在存储器中的相对位置结点中指针
逻辑相邻逻辑相邻
物理相邻物理不一定相邻

顺序表和数组区别

顺序表数组
逻辑结构角度物理存储角度
顺序表 是由数组组成的线性表

数组和链表的区别

数组链表
连续内存分配动态内存分配
在栈上分配内存,自由度小【栈必须连续且固定大小,后进先出的取】在堆上分配内存,自由度大【堆是直接随意存取】
事先固定数组长度,不支持动态改变数组大小支持动态增加或删除元素
数组元素增加时,有可能会数组越界;数组元素减少时,会造成内存浪费;数组增删时需要移动其它元素使用malloc或者new来申请内存,不用时使用free或者delete来释放内存
下标访问,访问效率高访问需要从头遍历,访问效率低
数组的大小是固定的,所以存在访问越界的风险只要可以申请得到链表空间,链表就无越界风险

链表结点概念

  • 头结点:在第一个结点之前的结点
  • 首元结点:链表存储的第一个结点
  • 头指针:链表第一个结点的存储位置

链表为空条件

  • 带头结点不为空的单链表:L->next!=NULL
  • 带头结点为空的单链表:L->next==NULL
  • 不带头结点不为空的单链表:L!=NULL
  • 不带头结点为空的单链表:L==NULL
  • 带头结点的双循坏链表为空的条件:L->next==L->prior=L

链表文章http://t.csdnimg.cn/dssVK

二叉树

二叉树是一种常见的树状数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。
特点

  • 树形结构:二叉树是一种层次结构,由根节点开始,每个节点可以有零、一个或两个子节点。这种结构使得数据可以以分层的方式进行组织和存储。
  • 节点:二叉树的每个节点包含一个数据元素,通常表示某种值或对象,以及指向其左子节点和右子节点的指针(引用)。
  • 根节点:树的顶部节点称为根节点。它是整个二叉树的起始点,所有其他节点都通过它连接。
  • 叶节点:叶节点是没有子节点的节点,它们位于树的末端。
  • 子树:每个节点的左子节点和右子节点都可以看作是一个独立的子树,这些子树也是二叉树。

B树

  • 节点排序(节点存储:地址信息+索引+表结构中除了索引外的其他信息)
  • 一个节点可以存多个元素,元素也排序
  • b树和b+树及其区别? - 知乎用户的回答 - 知乎
    https://www.zhihu.com/question/57466414/answer/182514854

B+树【MYSQL索引默认数据结构】

  • 拥有B树的特点
  • 叶子节点之间有指针
  • 非叶子节点上的元素在叶子节点上都冗余了,也就是叶子节点中存储了所有的元素,并且排好顺序。
  • 非节点存储:地址信息+索引、叶子节点存储:索引+表结构中除了索引外的其他信息)

B树和B+树区别

B树B+树
key和value都在节点上。并且叶子节点之间没有关系非叶子节点没有存value。叶子节点之间有双向指针,有引用链路。
因为B树的key和value都存在节点上,因此在查找过程中,可能不用查找的叶子节点就找到了对应的值。B+树需要查找到叶子节点,才能获取值

冒泡排序

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  • 针对所有的元素重复以上的步骤,除了最后一个。

  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

package one;public class Xu {public int[] sort_MAOPAO(int[] nums) {if (nums.length == 0 || nums.length == 1) return nums;for (int i = 0; i < nums.length; i++) {for (int j = 0; j < nums.length - 1 - i; j++) {if (nums[j] > nums[j + 1]) {int temp = nums[j + 1];nums[j + 1] = nums[j];nums[j] = temp;}}}return nums;}public static void main(String[] args) {Xu xu = new Xu();int[] array = {11, 33, 44, 22, 55, 99, 88, 66, 77};System.out.println("从小到大排序后的结果是:");for(int i=0;i<xu.sort_MAOPAO(array).length;i++)System.out.print(xu.sort_MAOPAO(array)[i]+" ");}
}

在这里插入图片描述

插排

  • ​1.从第一个元素开始,该元素可以认为已经被排序; ​
  • 2.取出下一个元素,在已经排序的元素序列中从后向前扫描; ​
  • 3.如果该元素(已排序)大于新元素,将该元素移到下一位置; ​
  • 4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置; ​
  • 5.将新元素插入到该位置后;
  • 6.重复步骤2~5。
    在这里插入图片描述
    public static int[] sort_CHAOPAI(int[] nums) {//将最后一个元素作为插入元素与有序数列比较后插入正确位置if (nums.length == 0 || nums.length == 1) return nums;for (int i = 0; i < nums.length; i++) {//i是作为每一组比较数据的最后一个元素for (int j = i; j > 0; j--) {if (nums[j - 1] > nums[j]) {int temp = nums[j];nums[j] = nums[j - 1];nums[j - 1] = temp;}}}return nums;}

选排

​ 1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
​ 2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
​ 3.重复第二步,直到所有元素均排序完毕。
在这里插入图片描述

    public static int[] sort_XUANPAI(int[] nums) {if (nums.length == 0 || nums.length == 1) return nums;for (int i = 0; i < nums.length; i++) {int minIndex = i;//每次循环假设第一个数最小for (int j = i; j < nums.length; j++) {if (nums[minIndex] > nums[j]) {//找到剩余未排序元素中找到最小元素,交换int temp = nums[minIndex];nums[minIndex] = nums[j];nums[j] = temp;}}}return nums;}

快排

  • 从数列中挑出一个元素,称为 “基准”(pivot);
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
  • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序
    在这里插入图片描述
    public static void quickSort(int[] nums, int startIndex, int endIndex) {if(startIndex >= endIndex){//只剩一个元素不用处理直接结束。return;}int val = nums[startIndex];//基准值int left = startIndex;//比基准值小的放左边int right = endIndex;//比基准值大的放右边while (left < right) {while (left < right && nums[right] > val) right--;//右指针左移,遇到比基准值小的数if (left < right) {nums[left++] = nums[right];}while (left < right && nums[left] < val) left++;//做左指针右移,遇到比基准值大的数if (left < right) {nums[right--] = nums[left];}}//最后将基准与left和right相等位置的数字交换nums[left] = val;//递归调用左半数组quickSort(nums, startIndex, left - 1);//递归调用右半数组quickSort(nums, left + 1, endIndex);}public static void main (String[]args){Random rd = new Random();int[] num = new int[10];for (int i = 0; i < num.length; i++) {num[i] = rd.nextInt(100) + 1;}System.out.println(Arrays.toString(num));quickSort(num,0,num.length-1);System.out.println(Arrays.toString(num));//            for (int i = 0; i < xu.sort_MAOPAO(array).length; i++)
//                System.out.print(xu.sort_MAOPAO(array)[i] + " ");}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机算法设计与分析】n皇后问题(C++_回溯法)

文章目录 题目描述测试样例算法原理算法实现参考资料 题目描述 在nxn格的棋盘上放置彼此不受攻击的n格皇后。按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在nxn格的棋盘上放置n个皇后&#xff0c;任何2个皇后不放在同…

《掌握需求优先级排序,成功项目从此起步》

需求优先级排序是软件开发过程中至关重要的一环。通过合理的需求优先级排序&#xff0c;可以更好地把握项目进度&#xff0c;避免在后期因为需求的变更而造成项目延期或成本超支等问题。下面&#xff0c;本文将从需求的角度出发&#xff0c;探讨如何进行需求优先级排序。 一、…

国产服务器操作系统PXE安装脚本 可重复执行(rc08版本)

执行效果如下&#xff1a; #!/bin/bash #Date:2023/12/25 #Func:一键部署pxe服务器 #Author:Zhanghaodong #Version:2023.12.25.05 #Note:仅适用x86架构uefi安装 # 1.此脚本可多次重复执行。 # 2.如遇到某个服务异常退出&#xff0c;检查响应状态码排错后&#xff0c…

VINS-MONO拓展2----更快地makeHessian矩阵

1. 目标 完成大作业T2 作业提示&#xff1a; 多线程方法主要包括以下几种(参考博客)&#xff1a; MPI(多主机多线程开发),OpenMP(为单主机多线程开发而设计)SSE(主要增强CPU浮点运算的能力)CUDAStream processing, 之前已经了解过std::thread和pthread&#xff0c;拓展1…

工作中人员离岗识别摄像机

工作中人员离岗识别摄像机是一种基于人工智能技术的智能监控设备&#xff0c;能够实时识别员工离岗状态并进行记录。这种摄像机通常配备了高清摄像头、深度学习算法和数据处理系统&#xff0c;可以精准地监测员工的行为&#xff0c;提高企业的管理效率和安全性。 工作中人员离岗…

在Go语言中处理HTTP请求中的Cookie

在Web开发中&#xff0c;Cookie是一种常用的技术&#xff0c;用于在客户端存储数据&#xff0c;并在随后的请求中发送回服务器。Go语言的标准库提供了强大的支持来处理HTTP请求中的Cookie。 首先&#xff0c;让我们了解如何在Go语言中设置Cookie。以下是一个简单的示例&#x…

MySQL基础笔记(4)DQL数据查询语句

DQL用于查找数据库中存放的记录~ 目录 一.语法 二.基础查询 1.查询多个字段 2.设置别名 3.去除重复记录 三.条件查询 1.基础语法 2.常见条件 四.分组查询 1.聚合函数 2.语法 五.排序查询 六.分页查询 附注&#xff1a;DQL执行顺序 1.编写顺序 2.执行顺序 ​​​…

安装阿里云CLI之配置阿里云凭证信息

有时候需要再主机上通过 OpenAPI 的调用访问阿里云&#xff0c;并完成控制&#xff0c;此时就需要在服务器上安装阿里云CLI&#xff0c;并完成账号的设置。 1. 登录阿里云创建账号 1.1 点击阿里云头像 ——》 控制访问 ——》创建一个拥有DNS权限的用户 这个用户不用太多权限…

小程序购物商城搭建开发分析

小程序商城作为现代商业模式的重要组成部分&#xff0c;具有巨大的发展潜力和商业价值。通过搭建一个功能完善、用户友好的小程序商城&#xff0c;您将能够提供便捷的购物体验&#xff0c;吸引更多的用户并实现商业增长。在进行小程序商城开发搭建之前&#xff0c;我们需要对项…

抽象工厂模式(Abstract Factory)

文章目录 定义与类型适用场景优点缺点产品等级结构与产品族抽象工厂代码示例 定义与类型 定义&#xff1a;抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口&#xff0c;无须指定它们具体的类。 类型&#xff1a;创建型。 适用场景 客户端&#xff08;应用层&#…

AI提示工程指南

简述: 当今互联网行业对于AI提示工程的需求日益增长,而《AI提示工程指南》是一本旨在满足这种需求的宝贵指南。本指南由一位对AI提示工程充满热情并自学而来的互联网从业者撰写,旨在为行业人员提供一个全面、易懂的参考手册。 这本指南将引领您踏上AI提示工程的旅程,深入探…

DevOps(3)

目录 11.描述root账户&#xff1f; 12.如何在发出命令时打开命令提示符&#xff1f; 14.Linux系统下交换分区的典型大小是多少&#xff1f; 15.什么是符号链接&#xff1f; 11.描述root账户&#xff1f; root账户就像一个系统管理员账户&#xff0c;允许你完全控制系统。 …

经常戴耳机有什么危害呢?一文读懂长时间使用耳机都有哪些危害

经常佩戴耳机可能会出现滋生细菌、引起炎症反应、损伤听力等危害。 1、滋生细菌&#xff1a;长时间戴耳机&#xff0c;会导致耳道堵塞&#xff0c;从而导致耳内潮湿&#xff0c;容易滋生细菌。 2、引起炎症反应&#xff1a;长时间戴耳机&#xff0c;会对耳道口造成机械性的压…

多线程和JVM

一&#xff0c;多线程实现的四种方式 1. 实现Runnable接口 普通实现&#xff1a; public class MyRunnable implements Runnable {Overridepublic void run() {System.out.println("线程执行中...");} }public class Main {public static void main(String[] arg…

vmware workstation的三种网络模式通俗理解

一、前言 workstations想必很多童鞋都在用&#xff0c;经常会用来在本机创建不同的虚拟机来做各种测试&#xff0c;那么对于它支持的网络模式&#xff0c;在不同的测试场景下应该用哪种网络模式&#xff0c;你需要做下了解&#xff0c;以便可以愉快的继续测&#xff08;搬&…

全年重磅!《2023年度TikTok电商行业趋势白皮书》发布!

2023年&#xff0c;似乎所有的东西都往相反的方向发展。疫情消退后经济没有明朗&#xff0c;局部冲突愈演愈烈没有消停&#xff0c;打工人辛苦工作工资没有涨&#xff0c;疯狂买买买的双十一也开始变得冷清... 似乎是不友好的一年&#xff0c;那你有听到“增长的声音”吗&…

uniCloud 云函数

相对于云函数&#xff0c;官方更推荐使用 云对象 新建云函数 编辑云函数 uniCloud-aliyun/cloudfunctions/hello_func/index.js use strict; exports.main async (event, context) > {let {name} eventreturn 你好&#xff0c;${name}! };云函数接收的参数从event中解构获…

ARM+FPGA多通道信号采集与处理模块开发方案

多通道信号采集与处理模块开发方案 开发一套多通道光电信号采集与处理模块&#xff0c;实现对64通道传感信号采集、处理与存储功能。主要包括数据采集与处理电路&#xff0c;系统控制软件&#xff0c;信号处理算法实现及数据存储。其中包括8通道ADC&#xff0c;每一路ADC采样数…

CTFHub | 存储型

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

js逆向第9例:猿人学第2题-js混淆-动态cookie1

题目2:提取全部5页发布日热度的值,计算所有值的加和,并提交答案 (感谢蔡老板为本题提供混淆方案) 既然题目已经给出了cookie问题,那就从cookie入手,控制台找到数据请求地址 可以看到如下加密字符串m类似md5,后面跟着时间戳 m=45cc41dcdb15159ebb50564635f8e362|1704301…