本文都是我个人的理解,很多定义是自己下的可能不大严谨,但是有助于把知识串联起来。若有原则性错误,希望能不吝指正。
要学习数据结构这门课,第一步遇到的问题是“数据结构这门学科是什么?” ,“为什么要有数据结构,它解决了什么问题?”
要解决这个问题我们需要理解,程序到底是什么?
背景知识: 程序是什么?计算机是一组机器,程序从本质上来看是对计算机的控制指令。就像我们控制汽车方向盘,把它用特殊的语言描述出来也可以理解成这是汽车的程序。那么转动方向盘这个程序,不可能只有左边右边两个方向,我们需要数据描述转动的具体角度。由此可以理解程序离不开数据。
计算机程序的特殊性在于它极端复杂, 程序的不同,用到的数据量也不同。既然有了数据,那么必然需要对数据的存储方式、操作进行管理,因此也就产生了数据结构这门学科。
有了以上的铺垫,现在我们可以对数据结构下定义。(定义可能不太严谨,但大概是那么个意思)
数据结构是什么? 数据结构是一门学习组织管理、以及操作数据的一门学科。
它的作用是什么? 对数据进行组织与管理,提高程序效率。
数据结构的一大作用是提高程序效率。
显然,完成一个功能时间越短,程序运行效率越高。
程序运行的时间与什么有关:1、算法 ,2、数据结构 ,3、与计算机硬件以及环境有关的因素。
为了了解数据结构到底是如何在提高程序效率起作用的,我们有必要理解什么是算法。
算法是完成目的的有限次步骤。我们把完成某项功能的步骤称为算法,算法是用来解决问题的,因此它具有几个特点。
1、有穷性(算法必须是能够被结束的,否则这件事情永远也完成不了)
2、算法一定有输入和输出
3、可行性(算法可以被执行)
4、确定性(算法不能有歧义)
有了数据结构与算法的概念,这两个概念是如何互相影响的。下面,有这样一个问题。
输入一串数字,对其进行排序后输出。
无论用什么算法,都需要将数据存储到计算机中,因此,会涉及到具体怎么样存储数据。
以下面两种存储方式为例:
1、使用数组存储。
2、使用单链表存储。
算法受到存储方式的限制,例如链式排序就无法使用快速排序、堆排序等方法。自然也就影响了解决问题的效率。
不存在一种通用最优的算法,算法的选择与问题本身的性质有很大关联。每个算法都有自身的特性,如快速排序的性能会在输入数字基本有序的时候退化成O(n^2),而堆排序不会。如果输入的数字很有特点,基本有序,这时候我们就不应该选择普通的快速排序,而应选择其它算法。
因此,通过对数据结构这么课程的学习,我们会得到一种分析问题的能力,这种能力帮助我们在遇到问题时,选择合适的存储方式,合适的算法来解决问题,尽可能提高解决问题的效率。
网友评论