数据结构和算法绪论 学习笔记(三)

继续学习数据结构和算法绪论,最近感觉有点乱,有点学不进去,但是算法基础这块还的继续。

  • 线性表基础
  • 算法小体验

线性表:一个线性表是 N 个数据元素组成的有限序列。

  • 它是一个序列,也就是说元素之间是有一个先来后到的, 存在唯一的第一个元素和最后一个元素。
  • 元素存在多个,第一个元素则无前驱(前件),而最后一个元素无后继(后件),其他元素都有前驱和后继。

不同表示:

  • 线性表的顺序表示
  • 线性表的链式表示

线性表的顺序表示:

指的是用一组地址连续的存储单元依次存储线性表的数据元素。

  • 特点:逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单、直观的公式来表示。
  • 缺点: 在作插入或删除操作是,需要移动大量元素。

线性表的链式表示:

  • 线性链表(单链表)
  • 循环链表
  • 双向链表

线性链表(单链表)
  • 特点: 一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
  • 由来:
    为了表示每个数据元素 a(i) 与其直接后继数据元素 a(i+1) 之间的逻辑关系,对数据元素 a(i) 之外,还需要存储一个指示其直接后继的信息。 这两部分信息组成数据元素 a(i) 的存储映像,称为结点
    • 它包括两个域:
      • 其中的存储数据元素信息的域称为数据域
      • 存储直接后继存储位置的域称为指针域
        指针域中存储的信息称做指针
  • 由 N 个结点 链 (指针)结成一个链表,就是线性表中链式存储结构。

由于每一个结点中只包含一个指针域,所以又称之线性链表 或单链表。

数据结构和算法绪论 学习笔记(三)_第1张图片
单链表 —— 图片源自:[数据结构---->线性表](http://blog.csdn.net/ncepuzhuang/article/details/8162891)
循环链表
  • 特点 : 表中最后一个结点的指针域指向头结点,整个链表形成一个环。
  • 优点: 从表中的任意一结点出发都可以找到表中其他的结点。
循环单链表—— 图片源自:[数据结构---->线性表](http://blog.csdn.net/ncepuzhuang/article/details/8162891)
循环双链表—— 图片源自:[数据结构---->线性表](http://blog.csdn.net/ncepuzhuang/article/details/8162891)
双向链表
  • 特点: 在双向链表中的结点中有两个指针域,其一指向后继,另一个指向前趋。
  • 优点:在查找时,即可以顺指针查找,也可以反向查找,避免了单链表单向性的缺点,可减少时间复杂度。
数据结构和算法绪论 学习笔记(三)_第2张图片
双向链表——图片源自:[数据结构---->线性表](http://blog.csdn.net/ncepuzhuang/article/details/8162891)

总结对比

常常用链表的原因:
  • 顺序表的长度是固定的,如果超出分配的长度就会造成溢出,如果存放的数据太少则会造成空间浪费。
  • 在插入元素和删除元素时(尤其不在尾部时),会移动大量的元素,造成性能和效率低下。
综合说,使用时的选择对比:
  • 如果在线性表的使用中主要操作是查找,那么应当选用顺序存储实现的线性表。
  • 如果在线性表的使用中主要操作是插入、删除操作,那么选用链式存储的线性表比较好。
笔记来源:

【数据结构---->线性表】
【数据结构】——严蔚敏 版本


算法再体验

  • 一个合并的排序,当然以上都是先直接转化后Model 进行处理
@[
    @{
        @"name"     : @"y01",
        @"number"   : @"1"

    },
    @{
        @"name"     : @"y02",
        @"number"   : @"1"

    },
    @{
        @"name"     : @"y01",
        @"number"   : @"1"

    },
    @{
        @"name"     : @"y02",
        @"number"   : @"1"

    },
    @{
        @"name"     : @"y03",
        @"number"   : @"1"

    }
]
@[
    @{
        @"name"     : @"y01",
        @"number"   : @"2"

    },
    @{
        @"name"     : @"y02",
        @"number"   : @"2"

    },
    @{
        @"name"     : @"y03",
        @"number"   : @"1"
    }
]

你可能感兴趣的:(数据结构和算法绪论 学习笔记(三))