前言

  由于自己已经大四,开始决定写这个博客,记录下自己每一天一点一滴的进步,希望自己的收获能与大家一同分享。数据结构这门课是我在大二上学期所学的,由于之前学习C语言的时候已经接触了常用的一些数据结构,加之自己以前也看过不少数据结构方面的书,因此学习起来比较轻松。马上要参加2012年的研究生入学考试,数据结构作为专业课的一门,就要重新开始复习了。因此通过记录这个博客,来每天更新自己的复习成果。这是一个系列,希望自己能够坚持下去。所用的教材是清华大学出版的《数据结构(C语言版)》。

 

基本概念

  数据(data):客观事物的符号表示。【CS】指所有能输入到计算机中并被计算机程序处理的符号的总称。【注】一般来说,现实中的数据输入到计算机后,都会被转化为计算机的数据表示。

  数据元素(data element):数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。【注】比如C语言中的结构体,C++中的类等等。

  数据项(data item):数据元素的组成单位。【注】比如结构体中的成员等等。

  数据对象(data object):性质相同的数据元素的集合,是数据的一个子集。【注】比如,在C语言中,一个数组的元素的全体就是一个数据对象。按照概念来讲,这个数组并不属于数据对象,因为它只是存储数据对象一种数据结构的组织形式(下面会讲到数据结构的概念)。

  数据结构(data structure):相互之间存在一种或多种特定关系的数据元素的集合。存在以下四种基本结构(structure):(1)集合;(2)线性结构;(3)树形结构;(4)图状结构或网状结构。结构有逻辑结构和物理结构之分。逻辑结构是抽象角度来讲数据之间的关系,而物理结构又称为存储结构,是指数据结构在计算机中的实际表示。存在逻辑相关的数据不一定存在物理相关,十分明显的一个例子是链表。

  数据类型(data type):一个值的集合和定义在这个值即上的一组操作的总称。【注】看到它是不是很容易想起来类(class)的定义?

算法和算法分析

  算法(algorithm):对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。它具有以下5个重要特性:

    (1)有穷性。【注】必须能够结束。

    (2)确定性。【注】相同输入必须得到相同输出。

    (3)可行性。【注】算法操作必须通过已经实现的基本运算执行有限次来实现。

    (4)输入。【注】可以没有输入。

    (5)输出。【注】必须有输出。

  算法设计应该考虑的目标有:

    (1)正确性。

    (2)可读性。

    (3)健壮性。

    (4)效率与低存储量需求。【注】也许大家现在不注意存储量,对内存随意分配,有时候甚至对内存只申请而没有释放,这都是一种不好的习惯。

  在此小节中,比较重要的一个概念就是时间复杂度与空间复杂度,他们是衡量算法效率高低的重要指标。具体的不再介绍,如果对它们不了解,可以再次阅读课本上相关内容。需要提一点的是,在通常的计算机科学中,时间资源与空间资源往往“鱼与熊掌不可得兼”,所以当追求时间效率时,往往会牺牲大量的空间资源,但对于当前情况来说是可取的,因为硬件大大丰富的今天,人们不必为没有空间而感到捉襟见肘。当然,也可以通过牺牲时间来降低空间复杂度,但大多数情况下,这样的事情不会发生。毕竟时间的重要性要大于空间的重要性。

posted on 2011-09-06 19:33  Chenny Chen  阅读(183)  评论(0编辑  收藏  举报