zoukankan      html  css  js  c++  java
  • 数据结构与算法分析

    1.描述:队列也是一种表,遵循先进先出的规则(FIFO)。

    队列头称为队头(front),可以取出元素,队列尾称为队尾(rear),允许插入元素。

    2.队列的实现

    链表实现和数组实现

    对于链表实现来说,和栈类似,所有链表的操作都是合法的

    主要看队列的数组实现

    3.队列ADT

    以上是队列支持的接口

    4. 链表实现

    队列可以看作由链表派生出来的子类

    简单地调用链表中的一些接口即可实现队列接口。略。

    5.数组实现

    数组实现队列的本质是创建一系列变量对数组的属性进行跟踪

    1 struct QueueRecord
    2 {
    3     int Capacity;
    4     int Front;
    5     int Rear;
    6     int Size;
    7     ElementType *Array;
    8 };

    检测队列是否为空:

    1 int IsEmpty(QueueRecord *Q)
    2 {
    3     return Q->Size==0;
    4 }

    构造空队列:

    1 void MakeEmpty(QueueRecord *Q)
    2 {
    3     Q->Size=0;
    4     Q->Front=1;
    5     Q->Rear=0;
    6 }

    循环数组:数组是大小固定的,所以,只要不断向列表中添加元素,数组肯定会有满的时候,这时候就需要用到循环数组。

    循环数组的Front和Rear,只要到达数组末尾,旋即绕回数组头部。

    入队:

     1 static int Succ(int Value,QueueRecord *Q)
     2 {
     3     if(++Value==Q->Capacity)
     4         Value=0;
     5     return Value;
     6 }
     7 
     8 void Enqueue(ElementType X,QueueRecord *Q)
     9 {
    10     if(IsFull(Q))
    11         Error("Full Queue");
    12     else
    13     {
    14         Q->Size++;
    15         Q->Rear=Succ(Q->Rear,Q);
    16         Q->Array[Q->Rear]=X;
    17     }
    18 }

    6.队列的应用

    略。

    参考资料【1】《数据结构(C++语言版)》  邓俊辉

        【2】《数据结构与算法分析——C语言描述》    Mark Allen Weiss

  • 相关阅读:
    COGS 577 蝗灾 线段树+CDQ分治
    BZOJ 1305 二分+网络流
    BZOJ 1066 Dinic
    BZOJ 3544 treap (set)
    BZOJ 3940 AC自动机
    BZOJ 1503 treap
    BZOJ 3172 AC自动机
    BZOJ 2553 AC自动机+矩阵快速幂 (神题)
    BZOJ1901 ZOJ2112 线段树+treap (线段树套线段树)
    BZOJ 3196 线段树套平衡树
  • 原文地址:https://www.cnblogs.com/CofJus/p/10327556.html
Copyright © 2011-2022 走看看