精华内容
下载资源
问答
  • 数据结构怎么学

    2013-09-26 00:07:20
    我们这学期刚开始学数据结构,上了两次课,觉得老师讲的好抽象,很泛泛,根本不知道在讲什么,学长学姐们都说这课很重要,那课下要怎么学才能学到精通啊?
  • 1.2 你数据结构怎么学的?  早先我有一个学生叫蔡遥,绰号“小菜”。他前段时间一直通过E-mail与我交流,其中说起了他工作的一些经历,感慨万千。我在这里就讲讲小菜的故事。  他告诉我,在做我学生时,其实...
    1.2 你数据结构怎么学的?
            早先我有一个学生叫蔡遥,绰号“小菜”。他前段时间一直通过E-mail与我交流,其中说起了他工作的一些经历,感慨万千。我在这里就讲讲小菜的故事。
            他告诉我,在做我学生时,其实根本就没好好学数据结构,时常逃课,考试也是临时突击后勉强及格。毕业后,他几经求职,算是找到了一份程序员的工作。
            工作中,有一次他们需要开发一个客服电话系统的项目,他们项目经理安排小菜完成客户排队模块的代码工作。
            小菜觉得这个很容易,用数据库设计了一张客户排队表,并且用一个自动递增的整型数字作为客户的编号。只要来一个客户,就给这张表的末尾插入一条数据。等客服系统一有空闲,就从这张表中取出最小编号的客户提交,并且删除这条记录。花了两天时间,他完成开发并测试通过后,得意地提交了代码。谁知他们的项目经理,看完代码后,跑到他的桌前,拍着桌子对他说:“你数据结构怎么学的?这种实时的排队模块,用什么数据库呀,在内存中完成不就行了吗。赶快改,今天一定要完成,明天一早交给我。”
            小菜吓得一身冷汗,这脸丢得有些大了,自己试用期都没结束,别因此失去工作。于是他当天加班加点,忙到晚上十一点,用数组变量重新实现了这个功能,因为考虑到怕数组不够大溢出,于是他设计100作为数组的长度。
            回到家中,他害怕这个代码有问题,于是就和他的表哥大鸟说起了这个事。他表哥笑嘻嘻地对他说:“你数据结构怎么学的?”小菜惊讶地张着大口,一句话也说不出来。然后他表哥告诉他,这种实时的排队系统,通常用数据结构中的队列结构是比较好的,用数组虽然也可以,但是又要考虑溢出,又要考虑新增和删除后的数据移动,总的说来很不方便。你只要这样……这样……就可以了。
            小菜在大鸟的帮助下,忙到凌晨3点,重新用队列结构又写了一遍代码,上班时用U盘拷回公司,终于算是过了项目经理这一关。
            之后,小菜开始重视数据结构,找回大学的课本重新学习。他还给我发了好些邮件,问了我不少他困惑的数据结构和算法的问题,我也一一给了他解答。终于有一天,他学完了整个课程的内容,并给我写了一封感谢信,信中是这么说的:
            “封老师:您好!感谢您这段时间的帮助,在大学时没有好好上您的课真是我最大的遗憾。我现在已经学完了《数据结构》整本书的内容,收获还是很大的。可是我一直有这样的困惑想请教您,那就是我在工作中发现,我所需要的如栈、队列、链表、散列表等结构,以及查找、排序等算法,在编程语言的开发工具包中都有完美的实现,我只需要掌握如何使用它们就可以了,为什么还要去弄懂这里面的算法原理呢?”
            我收到这封信时,立马跳了起来,马上拨通了他的手机,第一句话就是……你们猜猜看,我说了啥?
            “你数据结构怎么学的?”(全场同学齐声大喊,大笑)
            好了,我为什么这么讲,等你们学完我的课程就自然会明白。我只希望在将来,不要有某个人也对你们说出这句话,如果当真听到了这句话,就拜托你不要说,你的数据结构老师是我封清扬,嘿嘿。

            现在我们正式开始上课。

    出处:http://www.cnblogs.com/cj723/archive/2011/02/24/1963774.html

    展开全文
  • 于是就明白自己基础太薄弱,准备补充计算机科学基础知识。好友Yang推荐我读《大话数据结构》,对于我这种没有数据结构的“小白”而言,再合适不过。

    写在开头的话

    最近读程序比较多,虽然有些代码能够读懂,但是不知道为什么要这样写。尤其是涉及到数据结构的知识,结构体如何定义,数组、链表如何使用,指针操作等等。
    于是就明白自己基础太薄弱,准备补充计算机科学基础知识。好友Yang推荐我读《大话数据结构》,对于我这种没有学过数据结构的“小白”而言,再合适不过。
    此前,我对这种带有“大话”二字的书颇不以为然。因为看过一本《大话移动通信》,翻过几页就没了兴趣,因为说话太啰嗦,内容上也没什么吸引我的。

    这本《大话数据结构》的确不错,看了第一章之后,就决定把它读完。将技术说得明白易懂并不容易,尤其是如此重要的数据结构。我个人觉得,这本书做到“通俗易懂”的法宝是:
    1.举例——在介绍概念时,举生活中常见的事例,让任何一个读者都能明白;在介绍算法复杂度时,举一般性的函数实例,说明具体分析过程
    2.铺垫与总结——在讲解知识点之前介绍相关背景,在每章最后进行总结,点明重要知识点
    3.有趣——这一点怕是最难的,也是本书的一大特色。体现在某些事例,也可能在某个地方突然冒出来,让你会心一笑

    读书计划

    6.14 第3章
    6.15 第4章
    6.16 第5章
    6.19 第6章
    6.20 第7章
    6.21 第8章
    6.22 第9章

    “你数据结构怎么学的?”
    这其实是1.2节的一个有趣的小故事,有兴趣可以去翻翻书。

    最后放上作者程杰的联系方式:
    博客:http://cj723.cnblogs.com/
    微博:http://weibo.com/cj723
    Email:chengjielong@163.com

    展开全文
  • 数据结构怎么学

    2017-05-23 10:07:07
    看书一看就往,数据结构 的实现也记不住,而且大部分的实现都不完整。C语言的指针也不太熟悉。来讨论讨论怎么学习数据结构
  • 数据结构那些事 如果你现在在上大学,恰好又是计算机相关专业那么你肯定知道有一个非常枯燥的必修课《数据结构导论》当然,你现在没上大学或者不是计算机专业,那你现在应该知道了,他们有个必修课叫《数据结构导论...

    12941c47e1c1faf9d90e93c16162b454.png

    数据结构那些事

    如果你现在在上大学,恰好又是计算机相关专业

    那么你肯定知道有一个非常枯燥的必修课《数据结构导论》

    当然,你现在没上大学或者不是计算机专业,那你现在应该知道了,他们有个必修课叫《数据结构导论》

    从今天开始梦想橡皮擦要写一套非常有趣的课程了

    这套课程目的很简单


    目的:如何通过数据结构期末考试,有趣!

    适合人群: 1. 大学计算机相关专业,有这门课程,然鹅你没学,或者因为一些莫名奇妙的原因,你旷课了 2. 你想通过自考,注意自考,然后获取计算机的一个本科学历,这门课也是必修。

    一门课程开始前,我们要先关注这门课的重点

    大纲如下

    按照国内比较权威的教材,一般情况下,自考采用的是《全国高等教育自学考试指导委员会》给推荐的书籍

    本套课程参考的是自考书籍《数据结构导论 2012 主编:郑诚》 外语教学研究出版社出版

    知识点大纲如下

    1. 第一章 概论

    2. 第二章 线性表

    3. 第三章 栈、队列和数组

    4. 第四章 树和二叉树

    5. 第五章 图

    6. 第六章 查找

    7. 第七章 排序

    不同教材,侧重点不同,但是考点是覆盖的。包括你们的期末考试

    来吧,今天开始第一章,概论

    概论

    重点考点

    咱直接些,直接来重要考点就行了,搞定这些就OK啦

    基本概念

    数据、数据元素、数据项

    这个要记住,牢牢的记住

    先说概念

    所有被计算机存储、处理的对象都是数据,你看计算机能处理图像、处理音频、处理文本,这些都是对象

    数据的基本单位就是数据元素,一般叫做元素

    然后元素是由数据项组成的,数据项还叫 字段或者域 ,并且数据项是数据的不可分割的最小标识单位

    用图来表示,就下图即可理解

    81ee24a2be2325f5a61a3bfce0b0f8d4.png

    你看,好总结了

    数据由若干数据元素组成,数据元素由若干数据项组成

    数据的逻辑结构

    数据的逻辑结构是指数据元素之间的逻辑关系。逻辑关系是指数据元素之间的关联方式或“邻接关系”

    说人话:每条数据元素之间的逻辑关系叫数据的逻辑结构

    你看自然界,人群的组成,有一个个独自站着的,有拍着队站着的,有互相拉着手站着的....

    这些反应到数据上,也是一样的

    cfab469c7c52e013053fe21d84d3a184.png

    四种逻辑结构分别为

    • 集合
    • 线性结构
    • 树形结构
    • 图结构

    数据的存储结构

    存储结构包括两部分:

    1. 存储的数据元素

    2. 数据元素之间的关联方式

    表示数据元素之间的关联方式主要有 顺序存储方式链式存储方式

    其实需要记住四种

    1. 顺序存储方式

    2. 链式存储方式

    3. 索引存储方式

    4. 散列存储方式

    算法分析

    评价算法的好坏有四个方面的因素

    1. 正确性

    2. 易读性

    3. 健壮性

    4. 时空性 -- 包含时间效率(时间性能)和空间效率(空间性能)

    重要知识点

    时间复杂度

    分析例子

    编写函数求 1!+2!+...+n!

    通过C语言编写代码实现如下

    int fact1(int n){
        int i,j,temp,s;
        s = 0;
        for (i=1;i<=n;i++){
            temp = 1;
            for(j=1;j<=i;j++){
                temp = temp * j;
            }
            s = s + temp;
        }
        return s;
    }

    推导时间复杂度

    如何估算算法的计算量,可以在算法中合理的选择一种或几种操作作为“基本操作”

    例如,上述代码,我们分别去 乘法、加法和赋值为基本操作,然后推导计算量

    例如,当n = 5 时候,上述代码的计算量如下

    乘法:也就是 temp = temp * j; 执行的次数 1 + 2 + 3 + 4 + 5 = 15次

    加法:也就是s = s + temp; 执行的次数 1+1+1+1+1 = 5次

    赋值语句:s = 0; temp = 1; temp = temp * j; s = s + temp;执行的总次数 1. s=0 执行 1次 2. temp=1 执行 1+1+1+1+1 = 5 次 3. temp = temp * j; 执行 1+2+3+4+5 = 15次 4. s = s + temp; 执行 1+1+1+1+1 = 5次 合计 1+5+15+5 = 26次

    上述是当n等于5的时候的计算量,如果当n就是n的时候 那么我们在计算一下计算量是多少

    乘法:1+2+3+...+n = n(n+1)/2
    加法:n 赋值语句:1+n+n(n+1)/2+n

    在计算合计:也就是乘法+加法+赋值语句 n(n+1)/2 + n + 1+n+n(n+1)/2+n = 2(n2+n)/2+3n+1 = n2+4n+1

    这时候,用T(n)表示这个计算量

    T(n) = n2+4n+1

    下面重点来了,当n无限大的时候,n2+4n+1 约等于 n2

    可以用大O表示法 T(n) = O(n2) 看到了吧,这就是时间复杂度的表示方法,全称叫做 算法的渐进时间复杂度

    上面例子的第二种代码编写方式

    int fact2(int n){
        int i,j,temp,s;
        s = 0;
        temp = 1;
        for(i=1;i<=n;i++){
            temp = temp * i;
            s = s + temp;
        }
        return s;
    }

    用和编码1的方式推导之后 T(n) = 2n+2 ≈ O(n)

    当n无限大时,算法的执行时间与n成正比

    所以当你明白时间复杂度是怎么计算出来之后,需要记住一些常见的时间复杂度阶数

    • 常数阶O(1)
    • 对数阶O(log2n)
    • 线性阶O(n)
    • 多项式阶O(nc) 常见O(22) O(23)
    • 指数阶O(Cn) 常见的 O(2n)

    最后的知识点是空间复杂度,这个一般在考试中不常见

    一般需要考虑三部分 1. 程序代码所占用的空间 2. 输入数据所占用的空间 3. 辅助变量所占用的空间

    在估算算法空间复杂度,一般只需要分析辅助变量所占用的空间即可

    写在后面

    对于考试来说,一些基本概念要掌握,算法时间复杂度的大小排序要掌握(后续博客中还会涉及),根据一个算法,分析时间算法的复杂度要会

    想要 参加自考,想要通过《数据结构导论》,可以@梦想橡皮擦啦

    欢迎关注「非本科程序员」

    961148ff61c26202bd1fdf314f76711b.png
    展开全文
  • 那么你肯定知道有一个非常枯燥的必修课《数据结构导论》 当然,你现在没上大学或者不是计算机专业,那你现在应该知道了,他们有个必修课叫《数据结构导论》 从今天开始梦想橡皮擦要写一套非常有趣的课程了 这套...

    数据结构那些事

    如果你现在在上大学,恰好又是计算机相关专业

    那么你肯定知道有一个非常枯燥的必修课《数据结构导论》

    当然,你现在没上大学或者不是计算机专业,那你现在应该知道了,他们有个必修课叫《数据结构导论》

    从今天开始梦想橡皮擦要写一套非常有趣的课程了

    这套课程目的很简单


    目的:如何通过数据结构期末考试,有趣!

    适合人群:

    1. 大学计算机相关专业,有这门课程,然鹅你没学,或者因为一些莫名奇妙的原因,你旷课了
    2. 你想通过自考,注意自考,然后获取计算机的一个本科学历,这门课也是必修。

    一门课程开始前,我们要先关注这门课的重点

    大纲如下

    按照国内比较权威的教材,一般情况下,自考采用的是《全国高等教育自学考试指导委员会》给推荐的书籍

    本套课程参考的是自考书籍《数据结构导论 2012 主编:郑诚》 外语教学研究出版社出版

    知识点大纲如下

    1. 第一章 概论
    2. 第二章 线性表
    3. 第三章 栈、队列和数组
    4. 第四章 树和二叉树
    5. 第五章 图
    6. 第六章 查找
    7. 第七章 排序

    不同教材,侧重点不同,但是考点是覆盖的。包括你们的期末考试

    来吧,今天开始第一章,概论

    概论

    重点考点

    咱直接些,直接来重要考点就行了,搞定这些就OK啦

    基本概念

    数据、数据元素、数据项

    这个要记住,牢牢的记住

    先说概念

    所有被计算机存储、处理的对象都是数据,你看计算机能处理图像、处理音频、处理文本,这些都是对象

    数据的基本单位就是数据元素,一般叫做元素

    然后元素是由数据项组成的,数据项还叫 字段或者域 ,并且数据项是数据的不可分割的最小标识单位

    用图来表示,就下图即可理解
    在这里插入图片描述
    你看,好总结了

    数据由若干数据元素组成,数据元素由若干数据项组成

    数据的逻辑结构

    数据的逻辑结构是指数据元素之间的逻辑关系。逻辑关系是指数据元素之间的关联方式或“邻接关系”

    说人话:每条数据元素之间的逻辑关系叫数据的逻辑结构

    你看自然界,人群的组成,有一个个独自站着的,有拍着队站着的,有互相拉着手站着的…

    这些反应到数据上,也是一样的

    在这里插入图片描述
    四种逻辑结构分别为

    • 集合
    • 线性结构
    • 树形结构
    • 图结构

    数据的存储结构

    存储结构包括两部分:

    1. 存储的数据元素
    2. 数据元素之间的关联方式

    表示数据元素之间的关联方式主要有 顺序存储方式链式存储方式

    其实需要记住四种

    1. 顺序存储方式
    2. 链式存储方式
    3. 索引存储方式
    4. 散列存储方式

    算法分析

    评价算法的好坏有四个方面的因素

    1. 正确性
    2. 易读性
    3. 健壮性
    4. 时空性 – 包含时间效率(时间性能)和空间效率(空间性能)

    重要知识点

    时间复杂度

    分析例子

    编写函数求 1!+2!+…+n!

    通过C语言编写代码实现如下

    int fact1(int n){
    	int i,j,temp,s;
    	s = 0;
    	for (i=1;i<=n;i++){
    		temp = 1;
    		for(j=1;j<=i;j++){
    			temp = temp * j;
    		}
    		s = s + temp;
    	}
    	return s;
    }
    

    推导时间复杂度

    如何估算算法的计算量,可以在算法中合理的选择一种或几种操作作为“基本操作”

    例如,上述代码,我们分别去 乘法、加法和赋值为基本操作,然后推导计算量

    例如,当n = 5 时候,上述代码的计算量如下

    乘法:也就是 temp = temp * j; 执行的次数
    1 + 2 + 3 + 4 + 5 = 15次

    加法:也就是s = s + temp; 执行的次数
    1+1+1+1+1 = 5次

    赋值语句:s = 0; temp = 1; temp = temp * j; s = s + temp;执行的总次数

    1. s=0 执行 1次
    2. temp=1 执行 1+1+1+1+1 = 5 次
    3. temp = temp * j; 执行 1+2+3+4+5 = 15次
    4. s = s + temp; 执行 1+1+1+1+1 = 5次
      合计
      1+5+15+5 = 26次

    上述是当n等于5的时候的计算量,如果当n就是n的时候
    那么我们在计算一下计算量是多少

    乘法:1+2+3+…+n = n(n+1)/2
    加法:n
    赋值语句:1+n+n(n+1)/2+n

    在计算合计:也就是乘法+加法+赋值语句
    n(n+1)/2 + n + 1+n+n(n+1)/2+n = 2(n2+n)/2+3n+1 = n2+4n+1

    这时候,用T(n)表示这个计算量

    T(n) = n2+4n+1

    下面重点来了,当n无限大的时候,n2+4n+1 约等于 n2

    可以用大O表示法 T(n) = O(n2)
    看到了吧,这就是时间复杂度的表示方法,全称叫做 算法的渐进时间复杂度

    上面例子的第二种代码编写方式

    int fact2(int n){
    	int i,j,temp,s;
    	s = 0;
    	temp = 1;
    	for(i=1;i<=n;i++){
    		temp = temp * i;
    		s = s + temp;
    	}
    	return s;
    }
    

    用和编码1的方式推导之后
    T(n) = 2n+2 ≈ O(n)

    当n无限大时,算法的执行时间与n成正比

    所以当你明白时间复杂度是怎么计算出来之后,需要记住一些常见的时间复杂度阶数

    • 常数阶O(1)
    • 对数阶O(log2n)
    • 线性阶O(n)
    • 多项式阶O(nc) 常见O(22) O(23)
    • 指数阶O(Cn) 常见的 O(2n)

    最后的知识点是空间复杂度,这个一般在考试中不常见

    一般需要考虑三部分

    1. 程序代码所占用的空间
    2. 输入数据所占用的空间
    3. 辅助变量所占用的空间

    在估算算法空间复杂度,一般只需要分析辅助变量所占用的空间即可

    写在后面

    对于考试来说,一些基本概念要掌握,算法时间复杂度的大小排序要掌握(后续博客中还会涉及),根据一个算法,分析时间算法的复杂度要会

    想要 参加自考,想要通过《数据结构导论》,可以@梦想橡皮擦啦

    如果你想跟博主建立亲密关系,可以关注同名公众号 “梦想橡皮擦”,近距离接触一个逗趣的互联网高级网虫。
    博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏。

    欢迎关注「更多内容,欢迎关注公众号 」

    扫码关注非本科程序员

    展开全文
  • 有个人叫“小菜”,学生时,其实根本就没好好学数据结构,时常逃课,考试也是临时突击后勉强及格。毕业后,他几经求职,算是找到了一份程序员的工作。 工作中,有一次他们需要开发一个客服电话
  • 数据结构那些事如果你现在在上大学,恰好又是计算机相关专业那么你肯定知道有一个非常枯燥的必修课《数据结构导论》当然,你现在没上大学或者不是计算机专业,那你现在应该知道了,他们有个必修课叫《数据结构导论》...
  • 数据结构与算法怎么学1.是什么2.学什么3.怎么学 1.是什么 数据结构指的是“一组数据的存储结构”,算法是指“操作数据的一组方法” 数据结构是为算法服务的,算法是作用在数据结构上的。 2.学什么 效率和资源消耗...
  • 如何用Python高效地学习数据结构
  • 我们来看看如何高效地学习一门语言的数据结构,今天我们先看Python篇。所谓数据结构,是指相互之间存在一种或多种特定关系的数据类型的集合。Python在数据分析领域中,最常用的数据结构,莫过于DataFrame了,今天...
  • 如果你数据结构,或者了解java。你将会知道常见的数据结构有:数组(Array) 特点:1、一旦在内存中请求建立空间后,分配的空间大小不能调整,否则会出现数据溢出的情况。2、具有数据连续性的表现,中间的数据不能...
  • 什么是数据结构和算法? 1、数据结构是指一组数据的存储结构 2、算法就是操作数据的方法 3、数据结构和算法是相辅相成的,数据结构是为算法服务的, 而算法要作用在特定的数据结构之上 学习的重点在什么地方 数据...
  • 02怎么学数据结构

    2018-12-25 14:55:00
    数组,链表,栈,队列,散列表,二叉树,堆,跳表,图,Trie树(10个数据结构) 递归,排序,二分查找,搜索,哈希算法,贪心算法,分治算法,回溯算法,动态规划,字符串匹配算法(10个算法) 怎么学? ...
  • 说实话,之前代码的时候很少考虑数据结构,一方面是因为写的主要是业务代码,另外一方面是因为很多编程语言都已经封装好了基本的数据结构,拿来即用,最多也就了解基本的一个数组和链表的特点以及效率问题,因为最近...
  • QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技aming 网络安全 ,深度学习,嵌入式,机器强化,生物...
  • 文章目录算法与数据结构学习(一)1. 数据结构1.1 什么是数据结构1.2 学习数据结构的必要性2. 算法2.1 怎么衡量算法的好坏2.1.1 时间复杂度2.1.2 空间复杂度2.2 时间复杂度的计算2.3 常见的时间复杂度 算法与数据...
  • 1、真的应该学习这个问题本身就不是个问题,所有人都在强调数据结构与算法比较重要,但是好像平时也没用到,无法直观的去感受它的重要性,于是把学习重心放在了常见的哪些框架身上,似乎只要熟悉了哪些框架的API,...
  • 概述在深入研究数据科学和模型构建之前,Python中的数据结构是一个需要学习的关键内容了解Python提供的不同数据结构,包括列表、元组等介绍数据结构听起来是一个非常直截了当的话题,但许多数据科学和分析的新手并不...
  • 数据结构学习时候最难的也是最重要的是算法的学习,很多同学不知道一些算法应该怎么学,也不知道应该掌握到什么程度,往往事倍功半。在此特写此篇文章,介绍一下程序设计题的算法怎么应对。学习方法推荐:第一步,...
  • 先要声名一点,我目前没有考试的计划,只是想通过学习这门课程...以前在QQ群中,有人就反对过我学数据结构,那时我因为还处于迷茫阶段,不知学什么怎么学,大把的时间看了些算法,又把那些算法用delphi实现,那些程...
  • 1.2 你数据结构怎么学的? 1.3 数据结构起源 1.4 基本概念和术语 1.5 逻辑结构和物理结构 1.6 抽象数据类型 1.7 总结回顾 1.8 结尾语 ---------------------------------------------- 1.1 ...
  • 什么是数据结构与算法呢? 当你看到这个问题的时候,你脑海中的第一反应是什么? 数据结构就是指一组数据的存储结构,算法是操作数据的一组方法. 这样的答案是不是让你觉得,我去,这么抽象,所以算法是什么,数据结构是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,643
精华内容 1,857
关键字:

数据结构怎么学

数据结构 订阅