数据结构

数据存储有几种

  • 线性

    • 连续存储 【数组】

      • 优点:

        存取速度很快。

      • 缺点:

        事先需要知道数组的长度。
        插入删除元素的效率极低。
        空间通常是有限制的。
        需要大块连续的内存块。

    • 离散存储 【链表】

      • 优点:

        空间没有限制。
        插入删除元素速度很快。

      • 缺点:

        存取速度很慢。

    • 线性结构的应用 【栈】

      • 定义:

      一种可以实现“新进后出”的存储结构。

      • 分类:

        • 静态栈。【以数组为内核的栈, 就是静态栈, 静态栈里面各个元素的物理内存地址是连续的】
        • 动态栈。【相应地, 以链表为内核的栈就是动态栈, 栈里面的元素是用尾部指针来联系的】
      • 算法:

        • 出栈。
        • 压栈。
      • 应用:

        • 函数调用。
    • 线性结构的应用【队列】

      • 定义:

      一种可以实现“先进先出”的存储结构。

      • 分类:

        • 链式队列。【链表实现】
        • 静态队列。【数组实现】
          静态队列通常都必须是循环队列
循环队列的讲解:
1. 静态队列为什么必须是循环队列。
2. 循环队列需要几个参数来确定。【两个参数:front(头) rear(尾)】
3. 循环对列各个参数的含义。【两个参数不同场合有不同含义】
    (1)队列初始化:
      front和rear的值都是零。
    (2)队列非空:
      front代表队列的第一个元素。
      rear代表队列的最后一个有效元素的下一个结点。
    (3)队列为空:
      front和rear的值相等,但不一定为零。
4. 循环队列入队伪算法讲解。
    入栈伪算法:
        入栈的时候,尾部需要加一位。直接 rear + 1 这样的写法是错误的,正确的写法应该是 rear = (rear +  1) % 数组的长度。
5. 循环队列出队为算法讲解。
     出栈的伪算法:
        出栈的时候,是从头部先出,所以front 会移到下一个位置。写法类似于入栈。直接 front + 1 是错误的,正确的写法应该是: front = (front + 1) % 数组的长度。
6. 如何判断循环队列是否为空。
   如果 front 与 rear的值相等,则循环对列 为空。
7. 如何判断循环队列是否已满。
    两种方式:
      1.多增加一种表标识参数。
     2. 少用一种元素,判断front 和 rear 是否相邻【通常使用这种方式】。伪算法表示:if((rear + 1) % 数组长度  == front)
{
    已满。
}

大话数据结构里面在讲循环队列的时候的图示还是 顺序存储的图,个人感觉还是郝斌老师的图比较形象,直接以圆形的方式来演示。
    原文作者:MRNAN_
    原文地址: https://www.jianshu.com/p/8b32900bd7bf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞