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 ...
随机推荐
- C/S与B/S的区别
C/S与B/S的区别 1.区别 1.B/S架构是针对C/S架构缺点进行改进后提出的网络结构模式. B/S结构属于C/S结构,是一种特殊的C/S,因为浏览器只是特殊的客户端. 2.C/S可以使用任何通信 ...
- 微信小程序onLaunch修改globalData的值
//app.js App({ onLaunch: function (options) { //设置场景值到缓存中: //wx.setStorageSync("scene", op ...
- sublime3 前端个人常用插件及快捷键
首先先介绍如何启用插件安装功能: 打开Sublime 3,然后按 ctrl+` 或者在View → Show Console 在打开的窗口里黏贴这个网站上的代码(注意: Sublime 2和3所黏贴的 ...
- 羽翼metasploit第一,二季学习笔记
-----------------第一季-------------------- 启动Metasploit:msfconsole 升级和更新:./msfupdate 直接退出:exit 退回上一级:q ...
- phython安装
点击 https://www.python.org/downloads/ 下载合适的Python版本 下载获取到:python-x.x.x.msi安装包,我们双击python-x.x.x.msi即 ...
- JavaScript的组成 | DOM/BOM
往期回顾 在上一期的<JavaScript的组成 | 核心-ECMAScript >☜里,我们有说到JavaScript 是由三大部分组成,分别是:核心ECMAScript.文档对象模型- ...
- 团队项目(MVP------新能源无线充电管理网站)(总结)
经过了几个月的学习时间与团队的磨合以及一系列的困难之后,我们mvp小组一起完成了这个项目,内心也是十分激动和有成就感的.其实一开始基础并不好,很多都不知道,但是通过在慕课网上的学习以及老师严厉地督促下 ...
- DAY 13 开放封闭原则
装饰器: 即是用一个函数去拓展另一个函数,同时遵循开放封闭原则 开放封闭原则 对修改关闭,对拓展开放 不允许修改源代码以及调用方式 以下是无参函数的基本格式 def outer(func): def ...
- Selenium·自动化框架集成
date:2018513 day08aft 一.自动化框架集成分层 1.config 配置(项目配置——测试环境,公司环境,线上环境:以中国人才热线登陆为例,网址.用户名.密码等) 2.public ...
- SpringBoot的学习【4.快速实现一个SpringBoo的应用】
1.引子 正常创建一个 Spring Boot 应用的顺序: 创建 Maven 项目 pom 文件导入依赖(参照 Spring 官方文档) 编写主程序 编写业务逻辑 但其实IDE( idea 和 Sp ...