C语言数据结构基础学习笔记——C语言基础
抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合,由逻辑结构、存储结构、数据的运算组成。
数据结构的逻辑结构有线性结构(一对一)、树(一对多)以及图(多对多)。
数据结构的存储结构有顺序结构、链式结构、索引结构和散列结构。
数据的运算由运算的定义以及运算的实现构成。
算法有以下五个特性:①有穷性;②确定性;③可行性;④输入;⑤输出。
时间复杂度T(n)=O(f(n)),其计算主要关注循环体的执行次数。
例1:
int sum=;
for(int i=;i<=n;i++){
sum=sum+i;
}
i从0到n一共执行了n+1次,所以其时间复杂度为O(n).
例2:
int sum=;
for(int i=;i<=n;i=2*i){
sum=sum+i;
}
i取值1,2,4,8…,设共循环了k次,则2k<=n即k<=log2n。所以其时间复杂度为O(log2n)。
对于多个循环体,时间复杂度的计算具有加法规则和乘法规则。
例3:
int x=;
for(int i=;i<=n;i++)
x++;
for(i=;i<=n;i++)
for(int j=;j<=n;j++)
x++;
设整体的时间复杂度为T(n),第一个循环的时间复杂度为T1(n),第二个循环体的时间复杂度为T2(n)。
则T(n)=T1(n)+T2(n)=MAX{T1(n),T2(n)}=O(n2),这是时间复杂度计算的加法规则。
例4:
int sum=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j=*j){
sum=sum+j;
}
}
设整体的时间复杂度为T(n),外循环的时间复杂度为T1(n),内循环体的时间复杂度为T2(n)。
则T(n)=T1(n)*T2(n)=O(nlog2n),这是时间复杂度计算的乘法规则。
对于常见的时间复杂度,从左至右,时间性能依次降低:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)
C语言数据结构基础学习笔记——C语言基础的更多相关文章
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- Java基础学习笔记二 Java基础语法
注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /* 这是 * 一段注释, * 它跨越了多个行 */ public vo ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- Java基础学习笔记三 Java基础语法
Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...
- Java基础学习笔记四 Java基础语法
数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...
- Java基础学习笔记六 Java基础语法之类和ArrayList
引用数据类型 引用数据类型分类,提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类.我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner ...
- Java基础学习笔记五 Java基础语法之面向对象
面向对象 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式.面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...
- Java基础学习笔记九 Java基础语法之this和super
构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当 ...
- Spring基础学习笔记-Bean的基础知识
一. Bean的定义,初始化,使用和销毁 二.ref指定依赖的三种模式 三.Bean的五种自动装配模式(autowire) 四.Bean依赖检查的4种模式:配合atuowire使用,dependenc ...
随机推荐
- 安装redis及异常处理
安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf redis-4.0.8. ...
- Java JRT
解释器 运行步骤: 找到环境变量CLASSPATH,CLASSPATH包含一个或者多个目录,用作查找.class文件的根目录 从根目录开始,解释器获取包名并将每个.替换成\或/(取决于操作系统) 得到 ...
- Android 音视频深入 九 FFmpeg解码视频生成yuv文件(附源码下载)
项目地址,求star https://github.com/979451341/Audio-and-video-learning-materials/tree/master/FFmpeg(MP4%E8 ...
- LeetCode刷题 fIRST MISSING POSITIVE
Given an unsorted integer array,find missing postive integer. For example , Given [1,2,0]return 3, a ...
- Homework 2.0
一.第一题,要求是输入不同的字符的时候输出不同的结果,这道题主要是运用输入和输出语言还有判断语句,分别使用switch和if else来进行输入字符的判断,本体比较简单,注意定义输入变量的类型为cha ...
- Python之路,Day9 - 异步IO\数据库\队列\缓存
https://www.cnblogs.com/alex3714/articles/5248247.html http://www.cnblogs.com/wupeiqi/articles/51327 ...
- Alpha冲刺4
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/9979357.html 作业博客:https://edu.cnblogs.com/campus/ ...
- 清除微信小程序的缓存
小程序会在本地存储数据,当服务器数据更新后,通常在小程序上显示的还是旧的数据,点击右上角的关闭按钮,再次打开小程序同样没有更新. 怎样才能完全清除小程序的缓存数据? 删除小程序的方法是: 1.第一步: ...
- Binary Search Tree Learning Summary
BST Definition BST is short for Binary Search Tree, by definition, the value of right node is always ...
- 数据文件resize回收空间
场景说明: 客户 ASM磁盘组,data磁盘组空闲空间90G,空间不足,因此强烈建议回收空间 空间回收方案: 1.数据文件resize,回收部分可用性空间(好处就是能够将ASM磁盘组free大小增加) ...