数据结构One——绪论
本喵是FW视频封面最终版
宝子,你不点个赞吗?不评个论吗?不收个藏吗?
最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!
喵喵喵,你对我真的很重要。
目录
前言
绪论
1.1数据结构的研究的内容
1.2数据结构的基本概念和术语
1.2.1 数据,数据元素,数据项和数据对象
1.2.2数据结构
逻辑结构
存储结构
数据类型
算法和算法分析
算法的特性
评价算法优劣的基本标准
算法的时间复杂度
算法时间复杂度定义
最好,最坏和平均时间复杂度
算法的空间复杂度
通讯录数据结构化(凑字数)
SeqList.c
SeqList.h
test.c(这个模块建议自己选择使用,建议先保证每个功能都能正常使用,再写菜单。菜单前面皆为测试)
总结
前言
宝子,你喵呜终于更新了,求求,求求,求求支持,拜托拜托!!!
从今天开始我们有开一个新坑,数据结构与算法,莫慌,C语言会回炉重造,喵喵不满意,看它不爽已经很久了,毁灭吧,开始改第四版《小猫猫大课堂》
额,哪这个专题叫什么呢?给个名字嘛!点赞最多的宝子决定它叫啥!
稳着点啊,别开车,会翻的!呜呜
注:这是第一版(书本),后期还会进行课程和实践的完善,上一个通讯录数据结构化吧!
绪论
早期的计算机主要用于数值计算,而现在的计算机主要用于非数值计算。
来来来,上图,更清晰
啊,图真的是太美了!爱了爱了
1.1数据结构的研究的内容
数据结构主要研究非数值计算。
举个栗子:
宝子,你细品,啊就是这个道理,它也可以解决非数值的问题,赞!
1.2数据结构的基本概念和术语
概念和术语贯穿学习始终,我们先来几个概念和术语给出确定的含义
1.2.1 数据,数据元素,数据项和数据对象
数据:是客观事物的符号表示,是所有能输入计算机中并被计算机处理的符号的总称。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
数据项:是组成数据元素的,有独立含义的,不可分割的最小单位。
数据对象:是性质相同的数据元素的集合,是数据的子集。
1.2.2数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
数据结构包括逻辑结构和存储结构两个层次。
逻辑结构
- 集合结构:数据元素之间除了“属于同一集合”的关系外,别无其他关系。
- 线性结构:数据元素之间存在一对一的关系。
- 树结构:数据元素之间存在一对多的关系。
- 图结构或网状结构:数据元素之间存在多对多的关系。
上图
注:集合结构,树结构和图结构或网状结构都属于非线性结构。
线性结构包括线性表,栈和队列,字符串,数组等。(考研重点)
高低给你整张图,意思意思
存储结构
顺序存储结构:是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系的,通常借助程序设计语言的数组类型来描述。(访问快,随机存取,连续空间,逻辑顺序与存储顺序一致)
上图
链式存储结构:顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无须占用一整块存储空间。但为了表示结点之间的关系,需要给每个结点附加指针字段,用于存放后继元素的存储地址。
上图
数据类型
数据类型:是高级程序语言的一个基本概念。定义在其上的操作为加,减,乘,除和取模等算数运算。
抽象数据类型:数据对象,数据对象上关系的集合以及数据对象的基本操作的集合。
算法和算法分析
算法:是为了解决某类问题而规定的一个有限长的操作序列。
算法的特性
(1)有穷性:一个算法必须总是在执行有穷步后结束,且每一 一步都必须在有穷时间内
(2)确定性:对于每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性,算法的执行者或阅读者都能明确其含义及如何执行。
(3)可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。(4)输入:一个算法有0个或多个输人。当用函数描述算法时,输人往往是通过形参表示
的,在它们被调用时,从主调函数获得输人值。
(5)输出:一个算法在一 个或多个输出、它们是算法进行信息加工后得到的结果,无输出
的算法没有任何意义。当用函数描述算法时,输出多用返回值或引用类型的形参表示。
评价算法优劣的基本标准
(1).正确性。在合理的数据输入下,能够在有限的运行时间内得到正确的结果。
(2)可读性:一个好的算法,首先应便于人们理解和相互交流,其次才是机器可执行性。
可读性强的算法有助于人们对算法的理解,而难懂的算法容易隐藏错误,且难于调试和修改。
(3)健壮性。当输人的数据非法时,好的算法能适当地做出正确反应或进行相应处理、而
不会产生一些莫名其妙的输出结果。
(4)高效性。高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效率
高,可以用时间复杂度来度量;空间高效是指算法占用存储容量合理,可以用空间复杂度来度
量。时间复杂度和空间复杂度是衡量算法的两个主要指标。
算法的时间复杂度
问题规模:不考虑计算机的软硬件等环境因素,影响算法时间代价的最主要因素是问题规模。问题一规模是算法求解问题输人量的多少,是问题大小的本质表示,一般用整数n表示。
语句频度:一条语句的重复执行次数称作语句频度( Frequency Count)。一个算法的执行时间大致上等于其所有语句执行时间的总和,而语句的执行时间则为该条语句的重复执行次数和执行-次所需时间的乘积。
算法时间复杂度定义
一般情况下,算法中基本语句重复执行的次数是问题规模m的某个函数(n),算法的时间量度记作:
Tn)= O(f(n))
它表示随着问题规模n的增大,算法执行时间的增长率和0)的增长率相同,称作算法的所近时间复杂度,简称时间复杂度(Tme Complexil)。
举几个栗子
好图
最好,最坏和平均时间复杂度
称算法在最好情况下的时间复杂度为最好时间复杂度,是指算法计算量可能达到的最小值
称算法在最坏情况下的时间复杂度为最坏时间复杂度是指算法计算量可能达到的最大值
算法的平均时间复杂度是指算法在所有可能情况下,按照输人实例以等概率出现时,算法
计算量的加权平均值。
算法的空间复杂度
关于算法的存储空间需求,类似于算法的时间复杂度。我们采用渐近空间复杂度(SpeceCopisn)作方算注所需存储空间的量度,简朽空间复杂度,它也是问题规模m的函数,记作:
Sn)= 0(f(n))
一般情况下。一个程序在机器 上执行时,除了需要寄存本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的辅助存储空间。 其中,输人数据所占的具体存储量取决于问题本身,与算法无关,这样只需分析该算法在实现时所需要的辅助空间就可以了。若算法执行时所需要的辅助空间相对于输人数据量而言是个常数,则称这个算法在原地工作,辅助空间为0(1),本节中前面的示例都是如此。有的算法需要占用临时的工作单元数与问题规模n有关,如第8章介绍的归并排序算法就属于这种情况。
举个栗子:
练习题啊,下次一定,累了累了。喵呜~
用的这本书,仅供参考
通讯录数据结构化(凑字数)
SeqList.c
#include"SeqList.h"
void SLInit(SL* ps)
{ps->a = (SLDataType*)malloc(sizeof(SLDataType) * INIT_CAPACITY);if (ps->a == NULL){perror("malloc fail");return;}ps->size = 0;ps->capacity = INIT_CAPACITY;
}
void SLDestroy(SL* ps)
{free(ps->a);ps->a = NULL;ps->capacity = ps->size = 0;
}
void SLPushBack(SL* ps, SLDataType x)
{扩容//SLCheckCapacity(ps);ps->a[ps->size]=x;ps->size++;//ps->a[ps->size++] = x;SLErase(ps, ps->size, x);
}
void SLPrint(SL* ps)
{for (int i = 0; i < ps->size; ++i){printf("%d", ps->a[i]);}printf("\n");
}void SLPopBack(SL* ps)
{/*if (ps->size == 0)return;ps->size--;*/SLErase(ps, ps->size - 1);
}
void SLPushFront(SL* ps, SLDataType x)
{/*assert(ps);SLCheckCapacity(ps);int end = ps->size - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];--end;}ps->a[0] = x;ps->size++;*/SLInsert(ps, 0,x);
}
void SLPopFront(SL* ps)
{/*assert(ps->size>0);int begin = 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];++begin;}ps->size--;*/SLErase(ps, 0);}
void SLCheckCapacity(SL* ps)
{assert(ps);if (ps->size == ps->capacity){SLDataType* tmp = (SLDataType*)realloc(ps->a, sizeof(SLDataType) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail");return;}ps->a = tmp;ps->capacity *= 2;}}
void SLInsert(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos <= ps->size);SLCheckCapacity(ps);int end = ps->size - 1;while (end >= pos){ps->a[end + 1] = ps->a[end];--end;}ps->a[pos] = x;ps->size++;
}
void SLErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);int begin = pos + 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];++begin;}ps->size--;
}
int SLFind(SL* ps, SLDataType x)
{assert(ps);for (int i = 0; i < ps->size; ++i){if (ps->a[i] == x){return i;}}return -1;
}
SeqList.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int SLDataType;
#define INIT_CAPACITY 4
//动态顺序表--按需申请
typedef struct SeqList
{int size;//有效数据个数int capacity;//空间容量SLDataType* a;
}SL;
//增删查改
void SLInit(SL* ps);
void SLDestroy(SL* ps);
void SLPrint(SL* ps);
void SLCheckCapacity(SL* ps);void SLPushBack(SL* ps, SLDataType x);
void SLPopBack(SL* ps);
void SLPushFront(SL* ps, SLDataType x);
void SLPopFront(SL* ps);
void SLInsert(SL* ps, int pos, SLDataType x);
void SLErase(SL* ps, int pos);
int SLFind(SL* ps, SLDataType x);
test.c(这个模块建议自己选择使用,建议先保证每个功能都能正常使用,再写菜单。菜单前面皆为测试)
#define _CRT_SECURE_NO_WARNINGS 1
#include"SeqList.h"
SL s;
void TestSeqList1()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPrint(&s);SLDestroy(&s);
}
void TestSeqList2()
{SL s;SLInit(&s);SLPushFront(&s, 1);SLPushFront(&s, 2);SLPushFront(&s, 3);SLPushFront(&s, 4);SLPrint(&s);
}
void menu()
{printf("********************************\n");printf("***1.尾插数据 2.尾删数据*****\n");printf("***7.打印数据 -1退出*********\n");printf("********************************\n");
}
int main()
{int option = 0;while (option != -1){menu();scanf("%d", &option);if (option == 1){printf("请·依次输入要尾插的数据,以-1结束");int x = 0;while (x != -1){scanf("%d", &x);SLPushBack(&s, x);}}else if (option == 7){SLPrint(&s);}}return 0;
}
总结
时间紧促,内容繁多,这篇文章还有很多方法,小喵还没有详述,别慌,这坑,得埋。
宝子,多看书,多刷题,少吸电子鸦片,早睡觉,你对我真的很重要。
宝子,你不点个赞吗?不评个论吗?不收个藏吗?
最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!
喵喵喵,你对我真的很重要。
相关文章:
数据结构One——绪论
本喵是FW视频封面最终版宝子,你不点个赞吗?不评个论吗?不收个藏吗? 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵&#…...
JVM篇之内存及GC
目录一、JVM内存区域1.1程序计数器1.2虚拟机栈1.3本地方法栈1.4堆1.5方法区二、JVM运行时内存2.1新生代(轻量级GC)2.2老年代(重量级GC)一、JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法栈】、线程共享区域【JAVA 堆、…...
Linux驱动操作地址(寄存器)的一些方式
Linux驱动操作地址(寄存器)的一些方式 文章目录Linux驱动操作地址(寄存器)的一些方式1.对绝对地址赋值操作2. ioremap2.1 void __iomem *地址2.2 volatile unsigned int *地址2.3 structioremap1.对绝对地址赋值操作 对绝对地址0x100000赋值操作 *&…...
Java日志框架介绍
Log4j Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Glc首创的,现在则是Apache软件基金会的一个项目。 Log4j是几种Java日志框架之一。 Log4j 2 Apache Log4j 2是apache开发的一款Log4j的升级产品。 Commons Logging Apache基金会所属的项目,是…...
编程中遇到的计算机大小端概念
概念大小端(Endian)是指在一个多字节的数据中,字节的存储顺序的规定。通俗来说,就是指数据在计算机内部存储时的顺序问题。在计算机系统中,一个数据项可能占据多个存储单元。在这种情况下,这个数据项的存储…...
日志与可视化方案:从ELK到EFK,再到ClickHouse
EFK方案 从ELK谈起 ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana。新增了一个FlieBeat,它是一个轻量级的日志收集处理工具,FlieBeat占用资源少,适用于在各个服务器上搜集…...
字符函数和字符串函数(上)——“C”
各位CSDN的uu们你们好呀,今天小雅兰来给大家介绍一个全新的知识点,就是字符函数和字符串函数啦,其实其中有些函数我之前已经学习过了,比如strlen、strcpy;也有一些之前不是很熟悉的函数,比如strstr、strtok…...
九龙证券|下周解禁市值超400亿元,3股解禁压力较大
下周3股解禁比例超50%。 百利电气昨日盘中直线拉升封板,至此,百利电气两连板,累计涨幅20.85%。 昨日晚间,百利电气发布股票交易反常动摇公告称,公司不触及“室温超导”相关业务,也未打开相关研发和投入。公…...
一个大型网站架构的演变历程
正序: Rome was not built in a day(罗马不是一天建成的。)一个成熟的大型网站从来都不是一蹴而就的,需要经过多次架构的调整和升级,我们熟知的大型网站比如京东、淘宝、亚马逊,它们每天都有巨大的用户访问…...
前端前沿web 3d可视化技术 ThreeJS学习全记录
前端前沿web 3d可视化技术 随着浏览器性能和网络带宽的提升 使得3D技术不再是桌面的专利 打破传统平面展示模式 前端方向主要流向的3D图形库包括Three.js和WebGL WebGL灵活高性能,但代码量大,难度大,需要掌握很多底层知识和数学知识 Threej…...
链表经典笔试题(LeetCode刷题)
本篇文章主要是对力扣和牛客网上一些经典的和链表有关的笔试题的总结归纳,希望对你有所帮助。 目录 一、移除链表元素 1.1 问题描述 1.2 思路一 1.2.1 分析 1.2.2 代码 1.3 思路二 1.3.1 分析 1.2.3 思路三 1.3 代码实现 1.3.1 思路1的代码 1.3.2 思路2的…...
SpringCloud五大组件
微服务SpringCloud整合技术组件基本流程: 引入组件启动器依赖坐标覆盖默认配置即application.properties配置文件(每个微服务只有一个并且服务启动默认加载)引导类(微服务入口即main方法)自定义开启组件注解 SpringCloudEureka 服务注册中心,分为Eure…...
Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】
Echart? ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求。 ECharts 遵循 Apache-2.0 开源协议,免费商用。 ECharts 兼容当前绝大部分浏览器(IE8/9/10/11,Chrome…...
聊聊腾讯T13技术专家被开除
这两天腾讯的技术大佬stonehuang被曝离开腾讯,据他老婆在小红书上发的帖子称是遭遇了裁员,说实话刚看到这个消息我挺震惊的,stonehuang在中国大前端领域是排得上号的专家,同时他2005年就加入了腾讯,在qq空间的发展历程…...
c++ 常见宏、模板用法【1】
目录1、宏定义实现简单的断言2、可变参数模板3、变量模板4、宏定义实现范围内的for循环5、模板实现函数对象6、宏定义实现作用域限定7、类型萃取模板1、宏定义实现简单的断言 #define ASSERT(expr) \if(!(expr)) { \std::cout << "assertion failed: " <&l…...
【25】Verilog进阶 - 序列检测
VL25 输入序列连续的序列检测 本题并不难【中等】难度给高了 【做题关键】 (1)需要使用移位寄存器的思路。其实reg型是寄存器,也可以当做是移位寄存器,重要的是对其的处理,使用的是移位寄存器的思路 (2)注意新移入数据存放在低位 1 题目 + 代码 + TestBench 很简单,没…...
如何绕开运营商的 QoS 限制
运营商针对 UDP 进行限制,这是 QUIC 以及类似 UDP-Based 协议的推广阻力之一,上了线很多问题,丢包,慢等的问题严重增加运维,运营成本。 按照运营商五元组 QoS 这种简单粗暴不惹事的原则,只要换一个端口就可…...
C#基础教程22 异常处理
文章目录 C# 异常处理语法C# 中的异常类异常类 描述异常处理创建用户自定义异常C# 异常处理 异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理…...
java八股文--java基础
java基础1.什么是面向对象,谈谈对面向对象的理解2.JDK JRE JVM的区别与联系3.和equals4.hashCode与equals5.String StringBuffer StringBuilder的区别6.重载和重写的区别7.接口和抽象类8.List和Set的区别9.ArrayList和LinkedList10.HashMap和HashTable的区别&#x…...
2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A模块第四套解析(详细)
2022年全国职业院校技能大赛(中职组) 网络安全竞赛试题 (4) (总分100分) 赛题说明 一、竞赛项目简介 “网络安全”竞赛共分A.基础设施设置与安全加固;B.网络安全事件响应、数字取证调查和应用安全;C.CTF夺旗-攻击;D.CTF夺旗-防御等四个模块。根据比赛实际情况,竞…...
【Spark】spark使用jdbc连接带有kerberos认证的hive jdbc
背景 这个需求就是spark不通过spark-hive的方式访问hive数据,而是通过spark读取hive jdbc的方式访问hive数据,因为这个hive有kerberos认证,在网上也不是很容易搜索到这样的操作案例。不多bb,直接上教程。 准备工作 准备一个hiv…...
【Maven】项目中pom.xml坐标定义以及pom基本配置
目录 一、pom.xml坐标定义 二、pom 基本配置 一、pom.xml坐标定义 在 pom.xml 中定义坐标,内容包括:groupId、artifactId、version,详细内容如下: <!--项目名称,定义为组织名项目名,类似包名-->&l…...
Linux GCC 编译详解
文章目录一、GCC 编译器简介二、GCC 工作流编程语言的发展GCC 工作流程gcc 和 g 的区别三、使用 GCC 编译GCC 编译格式GCC 编译流程多个源文件编译一、GCC 编译器简介 首先,什么是编译器呢? 我们可以使用编辑器(如 linux 下的 vi、windows 下…...
谁说程序员不懂了浪费,女神节安排
Python的PyQt框架的使用一、前言二、女神节文案三、浪漫的代码四、官宣文案一、前言 个人主页: ζ小菜鸡大家好,我是ζ小菜鸡,特在这个特殊的日子献上此文,希望小伙伴们能讨自己的女神欢心。 二、女神节文案 1.生活一半是柴米油盐,…...
上市公司管理层短视指标(2007-2020)
1、数据说明:将研发⽀出的减少量(∆R&D)作为管理层短视⾏为的度量指标,即∆R&D为公司t年的研发⽀出减去t-1年的研发⽀出并除以t-1年末的总资产再乘以100。2、数据来源:自主整理3、时间跨度:2007-20…...
IDDPM 和 DDIM 对比
IDDPM 和 DDPM 对比IDDPMDDIMIDDPM IDDPM:Improved Denoising diffusion probabilistic models learning Σθ\Sigma_{\theta}Σθ, 即Σθ(xt,t)exp(vlogβt(1−v)logβ~t)\Sigma_{\theta}\left(x_{t}, t\right)\exp \left(v \log \beta_{t}(1…...
链表OJ题(上)
✅每日一练:876. 链表的中间结点 - 力扣(LeetCode) 解题思路: 定义快慢指针,让快指针走2步,慢指针走1步,当fast或者fast.next为空时,走完链表,此时slow就是中间位置 pub…...
【题解】百度2021校招Web前端工程师笔试卷(第一批):单选题、多选题
题目来源:牛客网公司真题_免费模拟题库_企业面试|笔试真题 (nowcoder.com) 若有错误请指正! 单选题 1 某主机的 IP 地址为 212.212.77.55,子网掩码为 255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址可以是&…...
论文解读:SuperPoint: Self-Supervised Interest Point Detection and Description
发表时间: 2018年 项目地址:https://arxiv.org/abs/1712.07629 论文地址:https://github.com/magicleap/SuperPointPretrainedNetwork 本文提出了一种用于训练计算机视觉中大量多视点几何问题的兴趣点检测器和描述符的自监督框架。与patch-based的神经网…...
游戏玩的多,陪玩你了解的多吗?用Python来采集陪玩数据,看看行情和美照
前言 (。・∀・)ノ゙嗨 大家好 现在应该每个人都玩过游戏吧,有些的上瘾,天天玩停不下来,有些的倒是没啥感觉 有游戏就肯定有陪玩啊,毕竟当朋友忙的时候,自己一个…...
手机端的网站首页该怎么做/电脑培训学校哪家好
由于工作需要,需要搭建hadoopzookeeperhbasestormkafka集群准备了三台服务器(一台8核32G内存300G硬盘充当master,一台8核16G内存300G硬盘充当slave01,一台816G500G硬盘充当slave02,并且都能上网)࿰…...
山西网站建设费用/今天的新闻摘抄
前言 今天讲解一下Android平台下ListView控件的开发,在本篇博客中,将介绍ListView的一些常用属性、方法及事件,还会讲解ListView在开发中常用的几种方式,以及使用不通用的适配器Adapter定制个性的View视图用于ListView的展示。 Li…...
wordpress解释/企业网站的网络营销功能
以华为mate30为例,版本系统为EMUI10,其华为系统恢复获取安装包信息失败的原因如下:1、此情况可能是下载的软件安装包不完整,建议您在网络稳定的情况下,重新下载安装。2、查看手机内存是否充足。3、检查其他软件是否可以…...
sap.net怎么做网站/湖南网站建设推荐
夜光序言: 如果爱你可以让你幸福,那我就爱你;如果爱你不能让你幸福,那我就只喜欢你. 正文: 以道御术 / 以术识道 // pages/category/category.js //0 引入 用来发送请求的 方法 一定要把路径补全 import…...
如何建设网站兴田德润怎么样/百度风云搜索榜
2019独角兽企业重金招聘Python工程师标准>>> 删除匹配行的前后行 删除匹配行的下一行 sed -ne p;/niyaopipeideneirong/n nidewenjian.txt删除匹配行的前一行 删除匹配行的前一行,可以将文本文件倒过来,从而将问题转成删除匹配行的下一行 ta…...
做网站服装app/网页设计大作业
转载至我的个人博客:LOVCHUN.COM我对编程很感兴趣,想当一名程序员。每个人可能会有很多兴趣:音乐、美食、游戏、编程等等,这些兴趣都可以指向某个行业,为什么最后你要选“编程”这个兴趣?编程并没有想象中的…...