数据结构基础知识

数据结构研究如何使用计算机内的存储位置

  • 通常情况研究的是怎么用多个存储位置来记录很多个相关数据以及如何使用这种数据
  • 数据结构关注数据之间的关系
  • 数据间的逻辑结构描述人对数据间关系的看法和认识,这个结构和计算机无关
  • 数据间的物理结构描述计算机中用来存储多个数据的存储位置之间的关系
逻辑结构分类
  1. 集合结构:多个数据可以看做一个整体
  2. 线性结构:多个数据可以按照统一规则排列成一条直线
  3. 树状结构:从任何一个数据可以扩展出另外几个数据(所有数据都从同一个数据扩展出来)
  4. 网状结构:任何两个数据间都可能有直接联系
物理结构分类
  1. 顺序结构:所有存储位置在计算机里连续排列

    • 顺序结构中任何一个存储位置可以用一个编号表示,所有这种物理结构支持随机访问。
    • 特点:
      • 插入、删除数据非常浪费时间
      • 顺序存储结构一旦存在很难再改变大小,所以容易造成存储位置的浪费
  2. 链式结构:多个存储位置之间互相独立,任意两个存储位置之间可以使用指针链接

    • 链式结构中每个存储位置叫一个节点

    • 单向线性链式存储结构中任何一个节点只可以导向另外一个节点,可以从一个起点走到任何一个节点

    • 单向线性链式结构中每个节点需要包含一个指针,这个指针负责记录下一个节点的地址

    • 单向线性链式结构中最后一个节点里的指针必须记录NULL

    • 可以在开头虚构一个头节点,头节点只作为起点使用而不记录有效数据

    • 可以采用一个for循环完成对所有节点的处理
      如下:

      for(p_nade = &head;p_node;p_node=p_node->p_next)
      {
      	.....(对下一结点做处理)		
      }
      

链式存储结构中所有节点都应该是动态分配的

逻辑结构和物理结构的关系:任何一个逻辑结构可以采用多种物理结构实现,一个物理结构也可以用来实现多种逻辑结构

数据结构中处理存储位置以外通常要提供一组函数,这组函数实现对这些存储位置的常见操作

  1. 创建/销毁
  2. 插入/删除
  3. 获取/修改
  4. 排序/查找

数据结构举例:

  1. 栈:采用后进先出的方式管理内部数据一段位置固定,另外一段随着数据的进出随时改变位置(固定端叫栈底,活动端叫栈顶)
    • 基本操作函数:push,pop
  2. 队列:采用先进先出的方式管理数据,放置数字和取数字是在两个不同的端点实现的,采用顺序存储结构实现队列时需要记录两个端点的位置
    • 基本操作:push,pop
  3. 链表:包含一个线性链式存储结构和一组相关的操作函数,基本功能包括插入,删除和遍历
  4. 树:
    • 属于链式存储结构,从树中的每个节点可以走到另外多个节点
    • 如果书中的所有节点都最多只能走到另外两个节点则这个树叫二叉树
    • 所有的树都可以转换成二叉树
    • 所有树都从一个起点节点开始,这个起点节点叫做根节点
    • 如果某个节点B是另外一个节点A的左子节点,那么以节点B为根的树叫做节点A的左子树
    • 只能采用递归对树中所有节点依次进行处理,对数的处理可以采用三种不同的遍历顺序,分别叫做前序遍历,中序遍历和后序遍历
    • 有序二叉树中任何一个节点左子树上数字都比它小而右子树上的所有数字都比它大

算法研究一些通用问题的解决方法

  • 算法通常需要依赖某种数据结构
算法是解决某些通用问题的方法
  • 同一个问题,可以有多种不同的解决办法,分别使用在不同的场合下
  • 排序算法负责把一组数据按照固定的顺序排列好
  • 所有排序算法都是不停调整某两个数字间的顺序直到把所有数字的顺序都调整好
  • 不同排序算法的区别是在什么时候处理哪两个数字

排序:

  1. 冒泡排序

    • 冒泡排序任何时候只处理相邻的两个数字
    • 冒泡排序采用双重循环实现,外循环的循环变量从最后一个下表变化到第二个下标,内循环的循环变量从第二个下标变化到外循环的循环变量
    • 冒泡排序中任何一个数字从开始位置移动到结束位置的过程中会在所有中间位置上停留
  2. 选择排序

    • 每次选定一个位置,用这个位置上的数字和所有其他位置上的数字比较并调整顺序。
    • 然后换一个位置重复上面的操作直到所有数字的顺序都调整好
    • 采用双重循环实现
  3. 插入排序

    • 每次把一个位置上的数据插入到前边已经排序好的数字中合适的位置上形成一个新的已排序的数字序列
    • 重复这个操作直到所有数字都插入进去为止
    • 采用双重循环实现
posted @ 2016-10-17 22:02  呉语伦比  阅读(174)  评论(0)    收藏  举报