数据结构(1):线性表

1 线性表的顺序实现

创建的新项目是cpp类型哦!

1.1 初始化

1.1.1  静态分配

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#define MaxSize 10 //定义顺序表的长度
typedef struct {int data[MaxSize];//用静态的数组存放元素!int length;
}SqList;
//相当于python中的类,这个类有一个属性是 长度//基本操作--初始化一个顺序表
void InitList(SqList& L) {for (int i = 0; i < MaxSize; i++) {L.data[i] = 0;}//初始化每一个值为0L.length = 0;
}//主函数
int main() {SqList L;//创建一个顺序表InitList(L);//初始化一个顺序表!!!return 0;
}

脏数据!

1.1.2 动态分配

1.2 基本操作【基于静态分配】

1.2.1 插入

1.2.2 删除操作

1.2.3 查找

【1】按位查找

静态分配:

动态分配:

注意指针!!!

【2】按值查找

数据是结构类型的时候比较不能用==

c语言程序设计!

2 线性表的链式表示-单链表

2.1 单链表的定义

用代码实现,带头结点/不带头结点,一般使用带头结点

代码实现:

【1】长一点的写法

【2】

2.2 初始化

2.2.1 不带头结点

2.2.2 带头结点

头结点不存储数据,

不带头结点那么这个头指针指向的就是实际用于存放数据的结点

而带头结点 这个头指针指向的是头结点 这个结点不存放数据,这个头结点之后的下一个结点才会用于存放数据!!!

2.3 按位序插入

2.3.1 带头结点

当i=1时

2.3.2 不带头指针

要对第一个结点做单独的处理!

2.4 给定结点在结点之后插入

时间复杂度o(1)

2.5 给定结点之前插入【前插】

2.5.1 方法一:传入头指针

o(n)

利用头阶段找到给定节点的前区结点!

2.5.2 方法二:偷天换日

时间复杂度0(1)

2.6 按位序删除

平均:o(n)

2.7 删除给定结点

偷天换日

如果p是最后一个结点的话:【只能采用方法一来弄!】

2.8 查找

2.8.1 按位查找

平均时间复杂度:o(n) 顺序表的按位置查找

可以封装起来,在插入和删除里进行调用!!

2.8.2 按值查找

o(n)

2.9 表的长度

2.10 建立单链表

2.10.1 尾插法建立

这样的问题是每次都要遍历到找到最后一个元素,那么时间复杂度就是0+1+2+3+.....+(n-1)这样的话时间复杂度就是o(n^2)

太高了,引入尾指针!

9999就是一个特殊的出口

时间复杂度就是o(n)

2.10.2 头插法

写代码的时候 去掉的那句写上就是好习惯!!!

头插法最后得到的是逆序的链表!

3 顺序表的链式表示-双链表

3.1 初始化

3.2 插入--后插

更严谨一点:

修改指针的顺序一定要先后面再前面

3.3 删除

3.4 销毁

3.5 遍历

注意指针修改的顺序!!!

注意边界的情况!!!

4 循环单链表

4.1 初始化

在删除的时候找不到前驱结点

找到最后一个结点

L指针放在表尾的时候就会 自己指向的是尾结点,下一个是头结点,当应用场景是要频繁的使用头结点和尾结点的时候,就把指针放在最后!

5 循环双链表

插入:

删除:

循环双链表不用考虑最后一盒结点

6 静态链表

初始化:

用数组存放,书本上的写法后面:

基本操作:

初始化:

查找某个位序的节点时间复杂度o(n)

插入:

空闲标记成-2

尽管是一整片连续的区域,但是各个在逻辑上相邻的元素在物理上也可以不相邻!

先后关系是通过游标实现的!

文件分配表FAT就是静态链表!

7 链表和顺序表比较

奶茶店排队取号

查询操作比较多,课堂点名

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

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

相关文章

【UE5.1 角色练习】08-物体抬升、抛出技能 - part2

目录 前言 效果 步骤 一、让物体缓慢的飞向手掌 二、向着鼠标方向发射物体 前言 在上一篇&#xff08;【UE5.1 角色练习】08-物体抬升、抛出技能 - part1&#xff09;的基础上继续完成角色将物体吸向手掌&#xff0c;然后通过鼠标点击的方向来发射物体的功能。 效果 步骤…

【Linux 网络编程】网络的基础知识详解!

文章目录 1. 计算机网络背景2. 认识 "协议" 1. 计算机网络背景 网络互联: 多台计算机连接在一起, 完成数据共享; &#x1f34e;局域网&#xff08;LAN----Local Area Network&#xff09;: 计算机数量更多了, 通过交换机和路由器连接。 &#x1f34e; 广域网WAN: 将…

uniapp通过Canvas绘制网格(心电图,坐标纸等可用)

本篇文档是Canvas绘制心电图的第一个部分&#xff0c;想了解详情的可以关注后学习交流。 心电图的最底层需要一个网状底层&#xff0c;来方便进行数据的测量。 一、白底分大、中、小三个区域的网格 1、首先是HTML部分 <!DOCTYPE html> <html lang"en">…

【贪心算法】C++解决回文串、增减字符串匹配、分发饼干、跳跃游戏、加油站问题

1. 前言 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前状态下最优决策的算法。贪心算法通常用来解决最优化问题&#xff0c;其核心思想是通过局部最优解逐步推导出全局最优解。 在贪心算法中&#xff0c;我们并不总是考虑到未来可能发生的…

代理注册湖北武汉投资管理公司流程和条件

我公司代理注册湖北武汉投资管理公司&#xff0c;现在大家都知道全国的投资管理公司已经停批了&#xff0c;很多需要收购的老板都是通过收购现成的投资管理公司经营的&#xff0c;现在我告诉大家一个好消息&#xff0c;我们有渠道办理湖北武汉资产管理公司&#xff0c;详情致电…

521源码-免费源码下载-免费学习网站教程-宝塔面板ssl网站证书到期后弹出无法续期错误提示

宝塔面板如果从老版本升级到8.10后&#xff0c;当点站证书过期续期时会弹出错误&#xff1a; 排查文件是找不到问题出在哪里&#xff0c;导致续期错误。 解决办法&#xff1a;通过摸索&#xff0c;最简单的就是删除站点&#xff0c;注意&#xff1a;只是删除&#xff0c;不是把…

亚马逊VC账号产品热销,在美国哪些智能小家电产品最好卖?

亚马逊VC账号产品在美国市场的热销&#xff0c;反映了消费者对于特定智能小家电产品的强烈需求。智能小家电产品因其实用性、便捷性和科技感&#xff0c;近年来在美国市场备受追捧。 以下是一些在亚马逊VC账号上热销的智能小家电产品&#xff1a; 智能扫地机器人 这类产品在美…

[vue3后台管理一]vue3下载安装及环境配置教程

[vue3后台管理二]vue3下载安装element plus 一、vue3下载安装element plus cnpm install element plus二&#xff1a;修改main.js import { createApp } from "vue"; import App from "./App.vue"; import ElementPlus from "element-plus"; …

JAVA:Random详解

Java中的java.util.Random类用于生成伪随机数。它提供了多种方法来生成不同类型的随机数&#xff0c;包括整数、浮点数和布尔值。以下是对Random类及其主要方法的详细介绍 一、生成随机数 创建一个Random对象&#xff0c;可以使用以下两种方式&#xff1a; 无参构造函数&…

建议大家少用点儿网站测速工具

春节休息期间明月有接了几个服务器代运维的业务&#xff0c;期间就发现不少新手站长们还在用 17ce、站长工具等等这些网站测速工具来评判站点访问速度的&#xff0c;感觉很有必要给大家聊聊这个事儿&#xff0c;因为这毕竟也是一个涉及服务器安全的一个重要环节了。 其实&#…

那些不起眼但很好玩的API合辑

那些不起眼但很好玩的API&#xff0c;为我们带来了许多出人意料的乐趣和惊喜。这些API可能看起来并不起眼&#xff0c;但它们却蕴含着无限的创意和趣味性。它们可以是一些小游戏API&#xff0c;让我们可以在闲暇时刻尽情娱乐&#xff1b;也可以是一些奇特的音乐API&#xff0c;…

【后端开发】服务开发场景之分布式(CAP,Raft,Gossip | API网关,分布式ID与锁 | RPC,Dubbo,Zookeeper)

【后端开发】服务开发场景之分布式&#xff08;CAP&#xff0c;Raft&#xff0c;Gossip | API网关&#xff0c;分布式ID与锁 | RPC&#xff0c;Dubbo&#xff0c;Zookeeper&#xff09; 文章目录 1、如何设计一个分布式系统&#xff1f;&#xff08;底层原理&#xff09;理论&a…

怎样清理Mac存储空间 苹果电脑内存不够用怎么办 苹果电脑内存满了怎么清理

在使用 Mac 电脑的过程中&#xff0c;用户经常会遇到磁盘空间不足的困扰&#xff0c;这时候就需要寻找有效的方法来清理苹果电脑内存了。 清理Mac存储空间可以通过多种方法进行&#xff0c;以确保你的Mac能够高效运行并释放宝贵的存储空间。以下是一些有效的清理和优化方法&am…

数据结构和算法|排序算法系列(一)|选择排序

首先需要你对排序算法的评价维度和一个理想排序算法应该是什么样的有一个基本的认知&#xff1a; 《Hello算法之排序算法》 主要内容来自&#xff1a;Hello算法11.2 选择排序 选择排序是明显的基于比较的排序。下文开始阐述选择排序的整个算法流程 算法流程 选择排序应该已…

一致性hash算法原理图和负载均衡原理-urlhash与least_conn案例

一. 一致性hash算法原理图 4台服务器计算hash值图解 减少一台服务3台服务器计算hash值图解 增加一台服务器5台服务器计算hash值图解 二. 负载均衡原理-urlhash与least_conn 2.1.urlhash案例 # urlhash upstream tomcats {hash $requ

MySQL的安全性

给root用户设置密码 点击用户--下面三个账号双击--进行编辑 修改密码--修改完进行保存 关闭数据库后连接不上 重新编辑&#xff0c;设置密码 新建账号 填入信息--保存&#xff08;主机哪里要选择%&#xff09; 连接这个新的账号 点击连接--填写连接的名称&#xff0c;地址&…

字母的大小写转换

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中&#xff0c;字符串对象提供了lower()方法和upper()方法进行字母的大小写转换&#xff0c;即可用于将大写字母转换为小写字母或者将小写字…

2.1.2 基于配置方式使用MyBatis

文章目录 实战目标实战步骤1. 创建Maven项目2. 添加项目依赖3. 创建用户实体类4. 创建用户映射器配置文件5. 创建MyBatis配置文件6. 创建日志属性文件7. 测试用户操作8. 运行测试方法 预期结果实战方法结论 实战目标 本实战的目标是演示如何使用MyBatis框架来操作数据库。通过…

【busybox记录】【shell指令】mkdir

目录 内容来源&#xff1a; 【GUN】【mkdir】指令介绍 【busybox】【mkdir】指令介绍 【linux】【mkdir】指令介绍 使用示例&#xff1a; 创建文件夹 - 默认 创建文件夹 - 创建的同时指定文件权限 创建文件夹 - 指定多级文件路径&#xff0c;如果路径不存在&#xff0c…

【Linux】Linux环境基础开发工具_2

文章目录 四、Linux环境基础开发工具2. vimvim的常见模式 未完待续 四、Linux环境基础开发工具 2. vim vim 是Linux下的一款 多模式编辑器 &#xff0c;可以用来写代码&#xff0c;是 vi 的升级版。 此时无法输入&#xff0c;需要切换模式。 如上图&#xff0c;i 就是切换成…