zoukankan      html  css  js  c++  java
  • 数据结构 Via C# (1) 数据结构相关基础概念

    1、开始之前

      最近在学习数据结构,开始时主要通过看书来进行学习,但过一段时间老是容易忘记,本着好记性不如烂笔头的原则决定通过写博客的形式来记录学习数据结构的点滴。市面上很多关于数据结构的书,但大多都是基于C语言、C++或者JAVA语言的,基于C#语言的确少之又少,虽说数据结构的学习本质是与哪种语言无关的,但作为使用C#作为主要开发语言的人来说这不得不说是一大遗憾,我就是一位以C#作为主开发语言的程序员,所以就想用C#来实现一些基本的数据结构和算法。本篇为该系列的第一篇,首先介绍一些基本的数据结构相关概念。

    2、基本概念和术语

    2.1 数据

      数据是指描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别并输入给计算机处理的符号集合。数据不仅仅是指我们常见的整型、浮点型和实型等数值类型,还包括字符、声音、图像和视频等非数值类型。对于整型等数值类型,可以进行数值计算,而对于声音和图像等非数值类型则可以通过编码的手段变成字符数据来进行处理。

    2.2 数据元素

          数据元素是指组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。比如在人类中,什么是数据元呢?当然是人了;畜类呢?牛、羊、鸡、狗等这些动物就是数据元素。

    2.3 数据项

      数据项是指一个数据元素可以由若干个数据项组成。比如2.2中提到的人这个数据元素就由眼、耳、嘴、手等这些数据项,也可以说是由姓名、年龄、性别等这些数据项组成,具体有哪些数据项,要视你做的系统来决定。

       需要注意的是,数据项是数据不可分割的最小单位。但是虽然数据项是最小组成单位,一般在数据结构中,在真正讨论问题时,数据元素才是数据结构中建立数据模型的着眼点。

    2.4 数据对象

      数据对象是指性质相同的数据元素的集合,是数据的子集。什么叫性质相同呢,是指数据元素具有相同数量和类型的数据项,比如人都有姓名、生日、性别等相同的数据项。

    2.5 数据结构

      数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。在计算机中数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。数据元素之间存在的一种或多种特定关系,也就是数据的组织形式。

    3、逻辑结构与物理结构

    3.1 逻辑结构

      1 集合结构

       集合结构是指结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。各个元素是“平等”的,它们的共同属性是“同属于一个集合”。如下图所示:

      

      2 线性结构

      线性结构是指结构中的数据元素是一对一的关系,如下图所示:

      

      3 树形结构

      树形结构是指结构中的数据元素之间存在一种一对多的层次关系,如下图所示:

      

      4 图形结构

      图形结构是指结构中的数据元素是多对多的关系,如下图所示:

      

    3.2 物理结构

      物理结构是指数据的逻辑结构在计算机中的存储形式,即如何把数据元素存储到计算机的存储器中。

    1 顺序存储结构

      顺序存储结构是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的,就是数据元素依次存放,如下图所示:

      

    2 链式存储结构

      链式存储结构是指把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的,数据元素的存储关系并不能反映其逻辑关系,因此需要用一个指针或引用存放数据元素的地址,这样就可以通过地址找到相关联数据元素的位置了,如下图所示:

    4、算法的时间复杂度和空间复杂度

      说到数据结构,必然也就逃不开算法,算法是解决问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。算法具有输入、输出、有穷性、确定性和可行性五个基本特性。

        算法效率的度量方法有很多种,我们一般采用大O记法:

        在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级,算法的时间复杂度也就是算法的时间度量,记作:T(n)=O(f(n))。

        推导大O阶方法如下:

       

        算法的空间复杂度是指运行完某个算法过程中所需要的额外的存储空间,其表示同样可以通过大O表示法来表示。

    5、结尾

      本文主要介绍了数据结构中的一些相关的基础概念,很多内容主要参照程杰老师的《大话数据结构》一书,若要查看更加详细的内容可参看本书的第一章和第二章。

  • 相关阅读:
    UWP AppConnection.
    Qt 多线程使用moveToThread
    C#综合细说进程、应用程序域与上下文
    C++ std::function
    商品价格加价区间的实现(策略模式)
    学习web前端三个月感悟
    triangle leetcode C++
    Linux入门视频
    轻松学习Linux之进程监视与管理
    阻止缓冲区溢出攻击
  • 原文地址:https://www.cnblogs.com/aprilwarm/p/DataStructureViaCSharp_1.html
Copyright © 2011-2022 走看看