数据结构系列(一)-基本概念

接下来会陆续更新有关数据结构的文章。仅记录自己学习的心得和总结。供有兴趣的同学一起学习!

什么是数据?
数据是信息的载体;数据元素是数据的基本单位,而一个数据元素可以由若干个数据项组成。

什么是数据结构?
数据结构指的是数据之间的相互关系,即数据的组织形式。
  • 分类

    • 数据的逻辑结构
    • 数据的存储结构
    • 数据的运算
数据的逻辑结构
数据元素之间的逻辑关系,也称数据的逻辑结构,数据的逻辑结构是从逻辑关系上描述数据,
与数据的存储无关,是独立于计算机的。
  • 分类:
    • 线性结构

        若结构是非空集,则有且仅有一个开始节点和一个终端节点,并且所有结点都最多只有一个直接前趋和一个直接后趋。
        
        线性表是一个典型的线性结构。栈、队列、串等都是线性结构。
      
    • 非线性结构

        一个几点可能有多个直接前趋和直接后趋。
        
        数组、广义表、树和图等数据结构都是非线性结构。
      
数据的存储结构
数据元素及其关系在计算机存储器内的表示,称为数据的存储结构。
  • 分类:
    • 顺序存储方法:

        该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点见的逻辑关系有存储单元的邻接关系来提现。通常借助程序语言的数组描述。
      
    • 链接存储方法:

        该方法不要求逻辑上相邻的结点在物理位置上依相邻,结点见得逻辑关系由附加的指针字段表示。通常借助于程序语言的指针类型描述。
      
    • 索引存储方法:

        该方法通常在储存结点信息的同时,还建立附加的索引表。
        索引表有若干索引项组成。
        若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引,稠密索引中索引项的地址指示结点所在的存储位置。
        若每个结点在索引表中只对应一个索引项,则该索引表称之为稀疏索引,索引中索引项的地址指示一组结点的起始存储位置。
        索引项的一般格式是:关键字+地址。
        关键字是能唯一标识一个结点的那些数据项。
      
    • 散列存储方法:

        该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。
      
数据的运算
数据的运算,即对数据施加的操作。最常见的有:检索、删除、更新和排序等。

算法+数据结构=程序

数据结构:是指数据的逻辑结构和存储结构;

算法:是对数据运算的描述;

如何选用正确的算法?
  • 执行算法所耗费的时间;
  • 执行算法所耗费的存储空间,其中主要考虑辅助存储空间;
  • 算法应易于理解,易于编码,易于调试等等;

一个算法所耗费的时间=算法中每条语句的执行时间之和


每条语句的执行时间=语句的执行次数(频度)*语句执行一次所需时间

算法的时间复杂度 T(n)
在计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。
  • 分类:

    • 时间复杂度

        指执行算法所需要的计算工作量 
      
    • 空间复杂度

        指执行这个算法所需要的内存空间
      
  • 计算时间复杂度

      一般看看有几重for循环,只有一重则时间复杂度为O(n),二重则为O(n^2),依此类推,
      如果有二分则为O(logn),二分例如快速幂、二分查找,如果一个for循环套一个二分,
      那么时间复杂度则为O(nlogn)。
    

例子1

public class example01 {
	public static void main(String[] args) {
		System.out.println("a");
		System.out.println("b");
	}
}
// T(n)=O(1)

例子2

public class example02 {
	public static void main(String[] args) {
		int sum = 0;
		for(int i=1;i<=100;i++) {
			sum = sum + i;
		}
	}
}
// T(n)=O(n)

例子3

public class example03 {
	public static void main(String[] args) {
		int sum = 0;
		for(int i=1;i<=100;i++) {
			for(int j=1;j<=100;j++)
				sum = sum + i;
		}
	}
}
// T(n)=O(n^2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值