抽象数据类型(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语言基础的更多相关文章

  1. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  2. Java基础学习笔记二 Java基础语法

    注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /* 这是 * 一段注释, * 它跨越了多个行 */ public vo ...

  3. Java基础学习笔记七 Java基础语法之继承和抽象类

    继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...

  4. Java基础学习笔记三 Java基础语法

    Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...

  5. Java基础学习笔记四 Java基础语法

    数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...

  6. Java基础学习笔记六 Java基础语法之类和ArrayList

    引用数据类型 引用数据类型分类,提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类.我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner ...

  7. Java基础学习笔记五 Java基础语法之面向对象

    面向对象 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式.面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...

  8. Java基础学习笔记九 Java基础语法之this和super

    构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当 ...

  9. Spring基础学习笔记-Bean的基础知识

    一. Bean的定义,初始化,使用和销毁 二.ref指定依赖的三种模式 三.Bean的五种自动装配模式(autowire) 四.Bean依赖检查的4种模式:配合atuowire使用,dependenc ...

随机推荐

  1. zabbix3.4.7使用过程中常见错误

    ================================================================================================ 1.Z ...

  2. Python中异常处理

    高级语言通常都配置了一套try...except...finally的错误处理机制. 1.我们先看一个try的机制 try: res=1/0except ZeroDivisionError as e: ...

  3. Apache Flume 学习笔记

    # 从http://flume.apache.org/download.html 下载flume ############################################# # 概述: ...

  4. oracle 11g安装过程

    1,工具:Oracle_win64_11gR2_database(64位oracle 11g数据库).iso安装文件,win10系统 2,右键,解压后,点击setup.exe,系统会检测本机的环境,如 ...

  5. xslfo和fop使用中的一些问题

    最近项目中使用fop和xslfo打印pdf,遇到一些问题记录下来: 1.表格跨行.跨列: 使用number-rows-spanned和number-columns-spanned属性 比如:<f ...

  6. 【oracle入门】Oracle数据库11g企业版主要优点

    高可靠性.能够尽可能地放置服务器故障.站点故障和人为错误的发生. 高安全信息.可以利用行级安全性.细粒度审计.透明的数据加密和数据的全面会议确保数据安全和遵守法规. 更好的数据管理.轻松管理最大型数据 ...

  7. testDecoration

    def count(): fs = [] for i in range(1,4): def f(): n=i*i return n fs.append(f) return fs c1,c2,c3 = ...

  8. requests模块的使用

    requests模块 什么是request模块:requests是python原生一个基于网络请求的模块,模拟浏览器发起请求. requests-get请求 # get请求 import reques ...

  9. Win10+Ubuntu双系统删除Ubuntu方法

    前情提要 Win10下试了许多种方法,什么MbrFix.EasyBCD.亦或是Boot Option.都不行.前两者不行,操作之后重启无法直接进入Windows,后者也不行,找不到所谓的Delete ...

  10. js: var定义域问题