数据结构

数据存储有几种

  • 线性

    • 连续存储 【数组】

      • 优点:

        存取速度很快。
      • 缺点:

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

      • 优点:

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

        存取速度很慢。
    • 线性结构的应用 【栈】

      • 定义:

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

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

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

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

      • 定义:

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

        • 链式队列。【链表实现】
        • 静态队列。【数组实现】
          静态队列通常都必须是循环队列
循环队列的讲解:
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)
{
    已满。
}

大话数据结构里面在讲循环队列的时候的图示还是 顺序存储的图,个人感觉还是郝斌老师的图比较形象,直接以圆形的方式来演示。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容