【数据结构】1_进阶高手的大门

理解程序的本质

问题:为什么会有各种各样的程序存在?程序的本质是什么?

  • 程序是为了解决实际问题而存在的,从本质而言,程序是解决问题的步骤描述。

image.png

一小步的进阶:理解实际问题
  • 确认问题类型

    • 如:数值计算,求最小值个数
  • 确认求解步骤

    • 如:打开文件,读取文件,关闭文件,计算和

问题:如何判断问题求解步骤的好坏?

实例分析:判断求解步骤的好坏

#include <iostream>

using namespace std;

long sum1(int n)
{
    long ret = 0;
    int* array = new int[n];
    
    for(int i=0; i<n; i++)
    {
        array[i] = i + 1;
    }
    
    for(int i=0; i<n; i++)
    {
        ret += array[i];
    }
    
    delete[] array;
    
    return ret;
}

long sum2(int n)
{
    long ret = 0;
    
    for(int i=1; i<=n; i++)
    {
        ret += i;
    }
    
    return ret;
}

long sum3(int n)
{
    long ret = 0;
    
    if( n > 0 )
    {
        ret = (1 + n) * n / 2;
    }
    
    return ret;
}

int main()
{
    cout << "sum1(100) = " << sum1(100) << endl;
    cout << "sum2(100) = " << sum2(100) << endl;
    cout << "sum3(100) = " << sum3(100) << endl;
    
    return 0;
}

程序评判初探

  • 用尽量少的时间解决问题
  • 用尽量少的步骤解决问题
  • 用尽量少的内存解决问题

优秀的开发者追求高质量的代码

数据结构的历史起源

  • 1968 年由高德纳教授(Donald E.Knuth)开创
  • 同年,在计算机的学位课程中出现(必修)

image.png
主要成就

  1. ACM教授的图灵奖、软件系统将和霍泼奖
  2. 美国数学会授予Lester R.Ford奖、J.B.Priestley奖和Steele奖
  3. TEX排版软件和METAFONT字形设计软件
  4. 《计算机程序设计的艺术》等系列书籍
  5. 。。。

数据结构课程的研究范围

  • 非数值计算类型的程序问题
  • 数值间的组织和操作方式
  • 数据的逻辑结构和存储结构

历史上的经典公式:程序= 数据结构 + 算法

对于数据结构和算法的研究,语言不重要,重要的是思想

小结

  • 程序是为了解决实际问题而存在的
  • 针对同一个问题可以由多种解决方案
  • 专业程序员应该尽量追求高质量的程序
  • 数据结构课程主要研究非数值计算问题

注:
经典公式在结构化程序设计时代提出。当今计算机已在解决实际生活中的问题,而这些问题往往非常复杂,经典公式已不能很好的处理,于是面向对象程序设计方法被提出。
但经典公式在本门课程中依旧可以遵循。

以上内容参考狄泰软件学院系列课程,请大家保护原创!

Image placeholder
junhong
未设置
  30人点赞

没有讨论,发表一下自己的看法吧

推荐文章
【数据结构】11_异常类构建

异常的类型可以是自定义类类型 对于类类型异常的匹配依旧是至上而下严格匹配 赋值兼容性原则在异常匹配中依然适用 一般而言 匹配子类异常的catch放在上部 匹配父类异常的catch放下下部 现代

【数据结构】2_数据的艺术

程序设计的挑战 利用计算机解决现实生活中的问题 生活中的不同个体之间存在联系 用计算机程序描述生活中个体间的联系 问题:如何描述生活中的个体?数据的概念程序的操作对象,用于描述客观事物数据的特点 可以

【数据结构】3_程序设计的灵魂

学员间的对话 木暮:我发现三井真是牛,只用一行就实现了strlen 宫城:那么强!他是怎么做的呢? 木暮:不知道,我看了一下,没看懂。。。 宫城:牛人就是牛人啊! 问题:程序是否越短越好?是否别人看不

【数据结构】 10_C++异常简介

C++内置了异常处理的语法元素try...catch... try语句处理正常代码逻辑 catch语句处理异常代码逻辑 try语句中的异常由对应的catch语句处理 try { doubler=

Python程序员进阶必备:从新手到高手的100个模块

在知乎和CSDN的圈子里,经常看到、听到一些python初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。近日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python学到

60秒一口Python:147个demo,助你从新手小白步步进阶编程高手

人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐。不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文Python“糖果包”:147个代码小样,60秒一口,营养又好

python set (集合)数据结构

set(集合)是一个非常有用的数据结构。它与列表(list)的行为类似,区别在于set不能包含重复的值。这在很多情况下非常有用。例如你可能想检查列表中是否包含重复的元素,你有两个选择,第一个需要使用f

Python入门教程_5. 数据结构

这个章节将更详细地描述一些你已经了解的内容,并且添加了一些新的内容。 5.1.深入列表对象 List数据类型包含更多的方法,下面是List对象包含的所有方法: list.append(*x*) 将一个

数据结构与算法分析——开篇以及复杂度分析

开篇 你也许已经发现了,工作了几年,原以为已经是一只老鸟。但看到刚参加工作的同事,你发现,原来自己一直在原地踏步。跟新人相比,你的唯一优势就是对业务更熟悉而已,别的就没有什么优势了。 怎样才能够让自己

数据结构与算法分析——开篇以及复杂度分析

开篇你也许已经发现了,工作了几年,原以为已经是一只老鸟。但看到刚参加工作的同事,你发现,原来自己一直在原地踏步。跟新人相比,你的唯一优势就是对业务更熟悉而已,别的就没有什么优势了。怎样才能够让自己更上

JavaScript 的数据结构和算法

现在有个还不是好的项目,未来会成为好的项目的项目想介绍给大家。传送门https://github.com/MasterShu/JavaScript-Da...这个是本人在维护的一个项目。主要是使用Ja

数据结构与算法分析——链表

链表链表是一种常见的数据结构,是一组有序的数据,每个链表中的数据项称为元素。它跟数组很像,二者对比学习会更容易理解和记忆。数组是内存中连续的一块,不会间断。链表在内存中不一定是连续的一块。如果内存只剩

数据结构与算法分析——队列

定义队列,和栈类似,也是一种操作受限的线性表数据结构。与栈结构不同的是,可以对队列2端操作,要求数据从一端进(入队),从另一端出(出队)。队列遵循"先进先出"的原则,即最先进队列的数据元素,同样要最先

数据结构与算法分析——栈

定义栈是一种操作受限的线性表,只支持在一端进行插入和删除操作(入栈和出栈)。后进先出、先进后出是它最大的特点。当某个数据集合只在一端插入和删除数据,并满足先进后出的特性时,就可以选择栈这种数据结构。实

java与数据结构

数组与链表数组 数组是数据结构中的基本模块之一 数组是一种基本的数据结构,用于按顺序存储元素的集合。但是元素可以随机存取,因为数组中的每个元素都可以通过数组索引来识别。 数组可以有一个或多个维度

redis数据结构(二) - 字符串

基于redis5.0的版本。字符串编码:字符串对象的编码可以是int,raw或者embstr。1.rawraw就是redisObject+sds,即redisObject的ptr指针指向一个sds对象

Redis的数据结构和内部编码

redis是单线程,一次只执行一条命令,那为什么可以这么快: 纯内存 非阻塞IO 避免线程切换和竞态消耗 在使用过程中要注意: 一次只运行一条命令 避免长(慢)命令,例如keys、flushall、f

第一章:数据结构绪论

[[数据结构-第1章]绪论目录 [1数据结构有什么用?] [2基本概念和术语] [3逻辑结构与存储结构] [3.1逻辑结构] [3.2存储结构] [4抽象数据类型] [4.1数据类型] [

TPC-C解析系列01_TPC-C benchmark测试介绍

作者:阳振坤2019.10导语:自从蚂蚁金服自研数据库OceanBase获得TPC-C测试第一名后,引起了行业内外大量关注,我们衷心的感谢大家对OceanBase的支持与厚爱,也虚心听取外界的意见和建

【Git入门5】Git远程仓库 - GitHub常用操作流程1_配置

=================================== 本地仓库和远程仓库是完全隔开的 代码存储在云端GitHub SSHkey验证身份使用场景:可以避免我们重复的输入密码,提高开发效

建立开放的大数据精准扶贫平台,让全社会参与进来!

精准扶贫”的重要思想最早是在2013年11月,习近平主席到湖南湘西考察时首次作出了“实事求是、因地制宜、分类指导、精准扶贫”的重要指示。2015年6月,习近平主席在贵州召开部分省区市党委主要负责同志座

SACC2019:爱奇艺的大数据中台战略(附演讲实录)

  孙斌爱奇艺高级总监主要负责爱奇艺的大数据中台、商业智能、内容智能制作等业务。在互联网产品设计和研发方面有十多年经验,曾就职于微软、hulu、雅虎等公司。摘要:爱奇艺的业务已经从单一的视频业务发展为

HPE收购MapR,以Hadoop供应商为首的大数据时代落幕

Hadoop三驾马车之一的MapR陷入困境后终于有了着落,今年5月底MapR宣布由于“业绩极差”将被迫关闭公司,MapR给自己设定寻找资金的最后期限是7月3日,一个月后MapR被HPE收购。8月5日,

为什么85%的大数据项目总是失败?

企业在推行大数据项目时往往把项目规模和范围做得很大,但是事实却是,很多大数据项目通常都会失败。2016年,Gartner估算约60%的大数据项目都会失败。一年后,Gartner分析师NickHeude

5G迎来黄金时代 WLAN市场的大动作

5G已经到了呼之欲出的时候,WLAN市场又有什么大动作呢?2019Navigate领航者峰会于近日在重庆完美落幕。回顾此届大会,作为中国企业级WLAN市场的领导者,新华三无线领域有哪些重磅发布?展望未