数据结构简单介绍

一、数据结构

       1、程序设计的实质是数据表示和数据处理。数据要能被计算机处理,首先必须能够存储在计算机的内存中,这项任务称为数据表示,其核心就是数据结构;一个实际问题的求解必须满足各项处理要求,这项任务称为数据处理,其核心是算法。

                      程序 =  数据结构 + 算法;

       2、数据:是信息的载体,在计算机科学中是指能输入到计算机中并能被计算机程序识别和处理的符号集合。可以将数据分为两大类:一类是整数、实数等数值数据;另一类是文字、声音、图像和图形等非数值数据。而非数值数据类型是数据结构的研究对象。

       3、数据元素是数据的基本单位,构成数据元素的不可分割的最小单位称为数据项。

       4、数据结构:是指相互之间存在一定关系的数据元素的集合。

       5、数据结构分为逻辑结构、存储结构以及结构的运算

       6、逻辑结构:是指数据元素之间逻辑关系的整体。它在形式上是一个二元组: 

                     Data_Structure = (D , R);

           根据数据元素之间逻辑关系的不同,数据结构分为四类:

           (1)集合:数据元素之间就是属于同一个集合,除此之外,没有任何关系。

           (2)线性结构:数据元素之间存在着一对一的线性关系。

           (3):数据元素之间存在一对多的层次关系。

           (4):数据元素之间存在多对多的任意关系。

             

        7、存储结构:又称物理结构,是数据及其逻辑结构在计算中的表示,存储结构除了存储数据元素之外,必须隐式或显式的存储数据元素之间的逻辑关系。通常分为顺序存储结构和链接存储结构。

        8、结构的运算:算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。数据的存储结构实质上是它的逻辑结构在计算机存储器中的实现,为了全面的反映一个数据的逻辑结构,它在存储器中的映象包括两方面内容,即数据元素之间的信息和数据元素之间的关系。不同数据结构有其相应的若干运算。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新和排序等。

           不同的数据结构其操作集不同,但下列操作必不可缺:

          (1)结构的生成;
          (2)结构的销毁;
          (3)在结构中查找满足规定条件的数据元素;
          (4)在结构中插入新的数据元素;
          (5)删除结构中已经存在的数据元素;
          (6)遍历。

        9、 抽象数据类型:一个数学模型以及定义在该模型上的一组操作。抽象数据类型实际上就是对该数据结构的定义。因为它定义了一个数据的逻辑结构以及在此结构上的一组算法。抽象数据类型可用以下三元祖表示:(D,S,P)。D是数据对象,S是D上的关系集,P是对D的基本操作集。ADT的定义为:
            ADT 抽象数据类型名:{数据对象:(数据元素集合),数据关系:(数据关系二元组结合),基本操作:(操作函数的罗列)};
            ADT抽象数据类型名;抽象数据类型有两个重要特性:
           (1)数据抽象,用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。 
           (2)数据封装,将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。
              

二、常见的数据结构

        1、数组 (Array)

        在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
        2、栈 (Stack)
        是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
        3、队列 (Queue)
        一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。
        4、链表 (Linked List)
        是一种物理存储单元上非连续、非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
         5、树 (Tree)
        是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
        (1)有且仅有一个结点 K0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。 
        (2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。
        (3)K中各结点,对关系N来说可以有m个后继(m>=0)。
        6、图 (Graph)
        图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
        应用:(1)最小生成树: 利用MST性质求得,普里姆(Prim:取连接点中代价最小的结点)算法和克鲁斯卡尔(Kruskal:取所有边中代价最小的边)算法。
                 (2)最短路径:Dijkstra算法(利用v0到各个终点的最短路径来求得,使用邻接矩阵存储)和Floyd算法。
        7、堆 (Heap)
        在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
        8、散列表 (Hash)
        若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。
三、算法基本概念
       1、 算法:是对特定问题求解步骤的一种描述,是指令的有限序列
       2、 5个必要特征:输入、输出、有穷性、确定性、可行性。
       3、好的算法除了五大特征外,还需满足:正确性、鲁棒性、简单性、抽象分级、高效性。
       4、描述算法的方式: 自然语言、流程图、程序语言、伪代码。
       5、同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从 时间复杂度空间复杂度来考虑。
            (1)时间复杂度
            算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做T(n)=Ο(f(n))。因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。
           (2)空间复杂度
           算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值