数据结构初阶(顺序表)

文章目录

  • 1、时间复杂度
    • 1.2、大O渐进表示法
    • 1.3、递归算法时间复杂度计算
  • 2、空间复杂度
  • 3、顺序表
    • 1、概念
    • 2、静态顺序表
    • 3、动态顺序表
      • 1、创建结构体(头文件中创建)
      • 2、销毁链表
      • 3、初始化结构体
      • 4、打印函数
      • 5、内存扩容
      • 6、顺序表任意位置插入数据
      • 7、顺序表任意位置删除数据

1、时间复杂度

1.2、大O渐进表示法

大O符号:(big O notation)是用于描述函数渐进行为的数学符号

推导大O阶的方法:
1、用常数 1 取代运行时间中所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项
3、如果最高阶项存在且不是 1,则去除这个项相乘的常数,得到的结果就是大O阶

1.3、递归算法时间复杂度计算

1、每次函数调用时间是O( 1 ) 那么就看他的递归次数
2、每次函数调用时间不是O( 1 ) 那么就看他递归调用次数中的累加

2、空间复杂度

1、空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用储存空间大小的度量
2、空间复杂度计算的是变量的个数
3、空间复杂度的计算规则和时间复杂度类似,也用大O渐进表示法
注:函数运行时所需的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间就已经确定好了,因此空间复杂度主要由函数在运行时候显示申请的额外空间来确定

3、顺序表

1、概念

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。(顺序表和数组的差别在于,顺序表要求数据要从0开始,依次连续的存储)

2、静态顺序表

直接利用宏定义将顺序表的所需的空间开辟出来,但是这样做有两个问题。
1、开小了空间不够用
2、开大了空间存在浪费
在这里插入图片描述

3、动态顺序表

优点:
连续物理空间,方便下标随机访问。

缺点:
1、插入数据,空间不足时需要扩容,扩容操作有性能消耗
2、头部或中间位置插入删除数据,需要进行挪动数据操作,效率较低
3、可能存在一定程度上的空间浪费,不能按需申请和释放空间

1、创建结构体(头文件中创建)

typedef int SLDataType;
//动态顺序表
typedef struct SeqList
{
	SLDataType* a;//指向动态开辟的数组
	int size;//记录存储多少个值
	int capacity;//存储空间大小
}SL,SeqList;//将struct SeqList定义成 SL 或者 SeqList

2、销毁链表

void SeqListDestroy(SeqList* psl)
{
	assert(psl);//断言不为空
	free(psl->a);
	psl->a = NULL;
	psl->capacity = psl->size = 0;
}

3、初始化结构体

void SeqListInit(SeqList* psl)
{
	assert(psl);//断言的作用,让结构体指针不为空
	psl->a = NULL;//将指针初始化为空指针
	psl->size = 0;//size记录结构体存储数据个数
	psl->capacity = 0;//capacity记录结构体开辟的空间大小
}

4、打印函数

void SeqListPrint(SeqList* psl)//测试代码时候需要用上打印函数
{
	assert(psl);//断言结构体不为空
	for (int i = 0; i < psl->size; ++i)
	{
		printf("%d", psl->a[i]);
	}
	printf("\n");
}

5、内存扩容

void SeqListCheckCapacity(SeqList* psl)
{
	assert(psl);

	// 如果满了,我们要扩容
	if (psl->size == psl->capacity)
	{
		size_t newCapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;
		//问号表达式进行条件判断,如果内存为0就扩容4,如果有内存就扩大两倍
		SLDataType* tmp = realloc(psl->a, sizeof(SLDataType)*newCapacity);
		if (tmp == NULL)
		{
			printf("realloc fail\n");
			exit(-1);
		}
		else
		{
			psl->a = tmp;
			psl->capacity = newCapacity;
		}
	}
}

6、顺序表任意位置插入数据

void SeqListInsert(SeqList* psl, size_t pos, SLDataType x)
{
	// 暴力检查方法
	assert(psl);

	// 温和检查方法
	if (pos > psl->size)
	{
		printf("pos 越界:%d\n", pos);
		return;
		//exit(-1);
	}
	SeqListCheckCapacity(psl);

	size_t end = psl->size;
	while (end > pos)
	{
		psl->a[end] = psl->a[end-1];
		--end;
	}

	psl->a[pos] = x;
	psl->size++;
}

7、顺序表任意位置删除数据

void SeqListErase(SeqList* psl, size_t pos)
{
	assert(psl);
	assert(pos < psl->size);

	size_t begin = pos + 1;
	while (begin < psl->size)
	{
		psl->a[begin - 1] = psl->a[begin];
		++begin;
	}

	psl->size--;
}

int SeqListFind(SeqList* psl, SLDataType x)
{
	assert(psl);

	for (int i = 0; i < psl->size; ++i)
	{
		if (psl->a[i] == x)
		{
			return i;
		}
	}

	return -1;
}

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

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

相关文章

从 hybrid开发----》微前端

为什么开始写关于微前端的一系列博客&#xff1f; 1. 学生时代讨论关于hybrid APP的应用开发&#xff0c;历史的选择总是变化的&#xff0c;需要更进一步深入。 2. 之前工作项目中见到过沙箱隔离之后CSS冲突&#xff0c;需要学一下如何解决 ----------------------------- …

QT CTK插件框架 (一 下载编译)

CTK 为支持生物医学图像计算的公共开发包&#xff0c;其全称为 Common Toolkit。为医学成像提供一组统一的基本功能&#xff1b;促进代码和数据的交互及结合&#xff1b;避免重复开发&#xff1b;在工具包&#xff08;医学成像&#xff09;范围内不断扩展到新任务&#xff0c;而…

ChatGPT助力校招----面试问题分享(四)

1 ChatGPT每日一题&#xff1a;电阻如何选型 问题&#xff1a;电阻如何选型 ChatGPT&#xff1a;电阻的选型通常需要考虑以下几个方面&#xff1a; 额定功率&#xff1a;电阻的额定功率是指电阻能够承受的最大功率。在选型时&#xff0c;需要根据电路中所需要的功率确定所选…

【JavaEE】Thread 类及常用方法

一、Thread 类Thread 类我们可以理解为是 java 用于管理线程的一个类&#xff0c;里面封装了操作系统提供的线程管理这一方面的 API &#xff08;Thread 是优化后的结果&#xff09;, Java 代码创建的每一个线程&#xff0c;可以理解为为 Thread 实例化的对象&#xff0c;Threa…

JUC是什么?

JUC 简介 在 Java 中&#xff0c;线程部分是一个重点&#xff0c;本篇文章说的 JUC 也是关于线程的。JUC 就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包&#xff0c;JDK 1.5 开始出现的。 进程与线程 进程&#xff08;Process&#xff09; 是计算机中…

Java基础:笔试题

文章目录Java 基础题目1. 如下代码输出什么&#xff1f;2. 当输入为2的时候返回值是多少?3. 如下代码输出值为多少?4. 给出一个排序好的数组&#xff1a;{1,2,2,3,4,5,6,7,8,9} 和一个数&#xff0c;求数组中连续元素的和等于所给数的子数组解析第一题第二题第三题第四题方案…

[ 云计算 | Azure ] Chapter 05 | 核心体系结构之管理组、订阅、资源和资源组以及层次关系

本文主要对如下内容进行讲解&#xff1a;Azure云计算的核心体系结构组件中的&#xff1a;资源、订阅和资源组&#xff0c;以及了解 Azure 资源管理器 (ARM) 如何部署资源。 本系列已经更新文章列表&#xff1a; [ 云计算 | Azure ] Chapter 03 | 描述云计算运营中的 CapEx 与…

面试了8家软件公司测试岗位,面试题大盘点,我真的尽力了

包含的模块&#xff1a;本文分为十九个模块&#xff0c;分别是&#xff1a;软件测试 基础、liunx、MySQL、web测试、接口测试、APP测试 、管理工具、Python、性能测试、selenium、lordrunner、计算机网络、组成原理、数据结构与算法、逻辑题、人力资源需要的可以看文末获取方式…

Qt基础之三十三:海量网络数据实时显示

开发中我们可能会遇到接收的网络数据来不及显示的问题。最基础的做法是限制UI中加载的数据行数,这样一来可以防止内存一直涨,二来数据刷新非常快,加载再多也来不及看。此时UI能看到数据当前处理到什么阶段就行,实时性更加重要,要做数据分析的话还得查看日志文件。 这里给出…

【蓝桥杯专题】枚举、模拟与排序 (C++ | 洛谷 | acwing | 蓝桥)

菜狗现在才开始备战蓝桥杯QAQ 文章目录【蓝桥杯专题】 &#xff08;C | 洛谷 | acwing | 蓝桥&#xff09;回文日期纸张尺寸 蓝桥杯真题错误票据AcWing 788. 逆序对的数量航班时间移动距离连号区间1236. 递增三元组PPPPP【蓝桥杯专题】 &#xff08;C | 洛谷 | acwing | 蓝桥&a…

腾讯云轻量应用服务器、CVM云服务器和GPU云服务器价格表(2023版)

这是腾讯云GPU云服务器、CVM云服务器、轻量应用服务器配置价格表&#xff0c;最近整理的。目前腾讯云服务器分为轻量应用服务器、CVM云服务器和GPU云服务器&#xff0c;首先介绍一下这三种服务器。 1、GPU 云服务器&#xff08;Cloud GPU Service&#xff0c;GPU&#xff09;是…

苹果发布无线充新专利,苹果Find My技术成为近几年苹果的重要创新

根据美国商标和专利局公示的清单&#xff0c;苹果公司近日获批了编号为 US 20230080598 A1 新专利。该专利主要为各种类型的无线充电器制造配件盒。 苹果表示近年来无线充电市场得到了快速发展&#xff0c;但目前市场尚未规范&#xff0c;可能使用不同的无线充电标准。这就导…

SkyWalking 日志收集

SkyWalking 日志收集一、需求二、步骤2.1 pom文件引入依赖2.2 logback-spring.xml文件修改2.3 修改agent的配置文件2.4 启动java应用2.5 日志查看三、验证四、常见问题4.1 修改完logback配置文件&#xff0c;项目启动报错4.1.1 错误4.1.2 解决4.2 UI的log页面没有内容一、需求 …

【华为机试真题详解 Python实现】统计差异值大于相似值二元组个数【2023 Q1 | 100分】

文章目录 前言题目描述输入描述输出描述题目解析参考代码前言 《华为机试真题详解》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优)…

喜马拉雅基于 HybridBackend 的深度学习模型训练优化实践

喜马拉雅作者&#xff1a;李超、陶云、许晨昱、胡文俊、张争光、赵云鹏、张玉静 喜马拉雅AI云借助阿里云提供的HybridBackend开源框架&#xff0c;实现了其推荐模型在 GPU 上的高效训练。 业务介绍 推荐场景是喜马拉雅app的重要应用之一&#xff0c;它广泛应用于热点、猜你喜欢…

spark第三章:工程化代码

系列文章目录 spark第一章&#xff1a;环境安装 spark第二章&#xff1a;sparkcore实例 spark第三章&#xff1a;工程化代码 文章目录系列文章目录前言一、三层架构二、拆分WordCount1.三层拆分2.代码抽取总结前言 我们上一次博客&#xff0c;完成了一些案例的练习&#xff0…

Android电视盒子最强看电视app-tvbox配置(视频源)教程

今天给大家分享一下安卓tv上最强的看视频神器-tvbox的配置方法 tvbox是一款影视观看类的软件&#xff0c;各种影视资源都是为你免费提供的&#xff0c;还有海量热门影视为你提供电视直播&#xff0c;让你可以实时在线进行观看以及体验一样&#xff0c;超多影视剧内容你感兴趣的…

ChatGPT4已经来了,30秒做一个弹球游戏!

前两周写了关于ChatGPT的文章&#xff0c;折腾了一晚&#xff01;终于开通了ChatGPT plus版本&#xff01;ChatGPT_Plus的功能有多强&#xff01;3分钟写一个贪吃蛇游戏&#xff01;然后果断的注册了Plus, 事实证明这个决定是对的&#xff0c;现在只有plus 可以抢先尝鲜GPT4, 免…

机器学习---聚类算法

目录【写在前面】1、确认安装有scikit-learn库2、使用 make _ classification ()建立数据集3、使用模型进行分类头文件汇总亲和力传播聚合聚类BIRCH 聚类DBSCAN【本人的毕业设计系统中有用到】K-均值高斯混合模型【写在最后】【写在前面】 sklearn和scikit-learn&#xff1a; …

sql中exists的常用用法

exists中子查询结果集非空&#xff0c;则exists子查询返回true。如果exists子查询结果集为空&#xff0c;则exists子查询返回false。在平常的开发工作中&#xff0c;经常会用到exists&#xff0c;那么它应该如何使用呢&#xff1f;1&#xff1a;查询兴趣爱好为跳舞的同学姓名及…
最新文章