数据结构概要

像一些大型的一线,二线互联网公司很喜欢问算法,特别是头条,其实学好数据结构与算法,对你思维能力和代码质量是有很多的提高,还有就是Java中的集合底层原理都是使用了某个数据结构,如果不懂数据结构的话,问下集合中的几个就懵逼了,虽然我们不是算法工程师,但是基本的数据结构与算法还是要懂的,那么什么是数据结构呢?

定义

数据结构是一门研究非数值计算程序设计中问题中的操作对象,以及他们之间的关系和操作等相关问题的学科.

通俗的来讲就是研究数据元素之间的关系存在一种或者多种特定关系的集合

 

传统上把数据结构分为物理结构和逻辑结构

逻辑结构:是指数据对象中数据元素之间的相互关系   体现在时间上

物理结构:是指数据的逻辑结构在计算机中存储的形式 体现在空间上

逻辑结构有四种

1:集合结构   集合中的数据元素除了同属于一个集合外,他们之间没有其他的关系

2:线性结构  线性结构中的元素是一对一的关系

3:树形结构 树形结构中的元素数据之间存在一种或者多种关系

4: 图形结构  图形结构中的数据元素之间是多对多的关系

上面讲了几种逻辑结构,下面讲下物理结构,物理结构主要是讲数据存储在内存中的结构

数据元素存储的结构形式有二种,

第一种是:顺序存储  是把数据元素存放在地址连续的存储单元中,其数据间逻辑关系和物理关系是一样的 比如List集合底层

第二种: 链式存储 是把数据元素存放在任意的存储单元里 ,这个存储单元可以是连续也可以是不连续的

比如1号除了存储自己的值外还要存储下一个对象元素的指针 就是内存地址值

总结

常见的数据结构

上面是我们平时常见的数据结构,其实使用最多的还是数组 栈 队列比较多,说完了数据结构,就要说下算法了

举例说明

比如我们小时候学的从1加到100,

package interview;

public class Test {
    public static void main(String[] args) {
        fun1();
        fun2();
    }
    public static void fun1(){
        int n = 100;
        int sum = 0;
        for(int i=1;i<=n;i++){
            sum+=i;
        }
        System.out.println("结果:"+sum);
    }
    public static void fun2(){
        int sum = (1+100)*50;
        System.out.println("结果:"+sum);
    }
}

这fun1和fun2都是计算从1加到100的后的结果,我们对比下fun1有个for循环,这个循环100次,加上前面的二行代码,计算机要执行102次,而fun2就执行了一行代码,那么计算机肯定花的时间要比fun1时间要快,比如说不是求1到100的值, 而是求1到n的值,那么问题来了,第二个算法效率更高,那么第二个算法的时间复杂度就是O(1), 而第一个算法的时间复杂度就是O(n)
学好数据结构与算法贵在坚持和思考,这不是一天或一个星期能学好的,坚持每天学点.

12篇学通csharp网络编程——第四篇 TCP应用编程 12篇学通csharp网络编程——第三篇 HTTP应用编程(下) 12篇学通csharp网络编程——第二篇 HTTP应用编程(上) 12篇学通csharp网络编程——第一篇 基础之进程线程 Lucene(1)lucene,你也会(7篇)——第一篇 快速入门 MongoDB(8)8天学通MongoDB——第八天 驱动实践 8天学通MongoDB——第七天 运维技术 8天学通MongoDB——第六天 分片技术 8天学通MongoDB——第五天 主从复制 8天学通MongoDB——第四天 索引操作 8天学通MongoDB——第三天 细说高级操作 8天学通MongoDB——第二天 细说增删查改 8天学通MongoDB——第一天 基础入门 UML系列(4)团队沟通利器之UML——类图 团队沟通利器之UML—— 序列图 团队沟通利器之UML——用例图 团队沟通利器之UML——活动图 wcf系列(5)wcf系列学习5天速成——第五天 服务托管 wcf系列学习5天速成——第四天 wcf之分布式架构 wcf系列学习5天速成——第三天 事务的使用 wcf系列5天速成——第二天 binding的使用(2) wcf系列5天速成——第一天 binding的使用(1) wpf系列(8)8天入门wpf—— 第八天 最后的补充 8天入门wpf—— 第七天 画刷 8天入门wpf—— 第六天 细说控件 8天入门wpf—— 第五天 数据绑定 8天入门wpf—— 第四天 模板 8天入门wpf—— 第三天 样式 8天入门wpf—— 第二天 xaml详解 8天入门wpf—— 第一天 基础概念介绍 并行开发(8)8天玩转并行开发——第八天 用VS性能向导解剖你的程序 8天玩转并行开发——第七天 简要分析任务与线程池 8天玩转并行开发——第六天 异步编程模型 8天玩转并行开发——第五天 同步机制(下) 8天玩转并行开发——第四天 同步机制(上) 8天玩转并行开发——第三天 plinq的使用 8天玩转并行开发——第二天 Task的使用 8天玩转并行开发——第一天 Parallel的使用 多线程系列(5)5天不再惧怕多线程——第五天 线程池 5天不再惧怕多线程——第四天 信号量 5天不再惧怕多线程——第三天 互斥体 5天不再惧怕多线程——第二天 锁机制 5天不再惧怕多线程——第一天 尝试Thread 经典算法专题(21)经典算法题每日演练——第二十一题 十字链表 经典算法题每日演练——第二十题 三元组 经典算法题每日演练——第十九题 双端队列 经典算法题每日演练——第十八题 外排序 经典算法题每日演练——第十七题 Dijkstra算法 经典算法题每日演练——第十六题 Kruskal算法 经典算法题每日演练——第十五题 并查集 经典算法题每日演练——第十四题 Prim算法 经典算法题每日演练——第十三题 赫夫曼树 经典算法题每日演练——第十二题 线段树 经典算法题每日演练——第十一题 Bitmap算法 经典算法题每日演练——第十题 树状数组 经典算法题每日演练——第九题 优先队列 经典算法题每日演练——第八题 AC自动机 经典算法题每日演练——第七题 KMP算法 经典算法题每日演练——第六题 协同推荐SlopeOne 算法 经典算法题每日演练——第五题 字符串相似度 经典算法题每日演练——第四题 最长公共子序列 经典算法题每日演练——第三题 猴子吃桃 经典算法题每日演练——第二题 五家共井 经典算法题每日演练——第一题 百钱买百鸡 开发利器系列(1)介绍一个小工具 Linqer 那点所谓的分布式(2)那点所谓的分布式——memcache 那点所谓的分布式——redis 树结构专题(5)6天通吃树结构—— 第五天 Trie树 6天通吃树结构—— 第四天 伸展树 6天通吃树结构—— 第三天 Treap树 6天通吃树结构—— 第二天 平衡二叉树 6天通吃树结构—— 第一天 二叉查找树 算法速成系列(15)算法系列15天速成——第十五天 图【下】(大结局) 算法系列15天速成——第十四天 图【上】 算法系列15天速成——第十三天 树操作【下】 算法系列15天速成——第十二天 树操作【中】 算法系列15天速成——第十一天 树操作(上) 算法系列15天速成——第十天 栈 算法系列15天速成——第九天 队列 算法系列15天速成——第八天 线性表【下】 算法系列15天速成——第七天 线性表【上】 算法系列15天速成——第六天 五大经典查找【下】 算法系列15天速成——第五天 五大经典查找【中】 算法系列15天速成——第四天 五大经典查找【上】 算法系列15天速成——第三天 七大经典排序【下】 算法系列15天速成——第二天 七大经典排序【中】 算法系列15天速成——第一天 七大经典排序【上】 算法洗脑系列(8)算法洗脑系列(8篇)——第八篇 概率思想 算法洗脑系列(8篇)——第七篇 动态规划 算法洗脑系列(8篇)——第六篇 回溯思想 算法洗脑系列(8篇)——第五篇 分治思想 算法洗脑系列(8篇)——第四篇 枚举思想 算法洗脑系列(8篇)——第三篇 贪心思想 算法洗脑系列(8篇)——第二篇 递归思想 算法洗脑系列(8篇)——第一篇 递推思想 天籁数学(3)天籁数学——数列篇(3) 天籁数学——数列篇(2) 天籁数学——数列篇(1) 图形图像(1)玩玩图形图像——第一篇:图片灰度化 小爬虫系列(4)玩玩小爬虫——抓取时的几个小细节 玩玩小爬虫——抓取动态页面 玩玩小爬虫——试搭小架构 玩玩小爬虫——入门
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值