• -----2.3队列及其实现------


    队列是一种受限制的线性表。

    日常生活中的排队:  入队  出对    

    队列:受操作约束的线性表。

    和堆栈相比堆栈只能在一段插入,删除。

    然而队列实在分别得两端进行插入和删除。

    先进来先服务

    先进先出(First in first out)、(FIFO)。

    类型名称:队列(Queue)
    数据对象集:一个有0个或者多个元素的有穷线性表。
    操作集:长度为MaxSize的队列Q∈Queue,队列元素item∈ElementType。
    1,Queue CreatQueue(int MaxSize):生成长度为MaxSize的空队列。
    2,int IsFullQ(Queue Q,int MaxSize);判断队列是否已满。
    3,void AddQ(Queue Q,ElementType item);将数据元素item插入到队列Q中。
    4,int IsEmptyQ(Queue Q);判断队列是否为空。
    5,、ElementType DeleteQ(Queue Q);将队列火速据中的元素从队列中删除并返回。

    队列的储存实现

    1:顺序存储:

    队列的顺序存储结构通常由一个一维数组和一个记录队列头元素的位置的变量front以及一个记录队尾元素未知的变量rear组成
    #defined MaxSize<储存数据元素的最大个数>
    typedef tsruct

      ElementType Date[MaxSize];
      int rear; //尾元素。
      int front; //首元素。
    }Queue;

     下面开始一维数组储存队列

     蛋疼的事经过一系列操作,现在明明有位置但是放不进去人了。怎么办呢?。。。。。。。。

    现在就解决了,上一个问题。队列弯了之后就能继续储存了。哈哈。但是完成了么?。。。。。。

    以前我们判别堆栈满的情况是看rear和front是否相等,判断数据个数是通过他们的差值但是,为什么总是有一个空位不能用呢?why?

    原因就是如果用rear和front 的差值来表示的话,只有n-1种情况。想用n-1中情况来表示n中状态。明显是扯淡。

    解决方法有两种

    1:就用n-1个空间

    2:使用额外标记:size或者tag。

    男生的话就应该大气一点,大不了就用n-1个空间。  下面附上代码

    /*入队列*/
    void AddQ(Queue *PtrQ,ElementType item)  //将iten 这个元素加入    *PtrQ 这个队列里面去
    {
        if((PtrQ->rear+1)%MaxSzie==PtrQ->front)//动动脑子就有了。  //判断队列是否已满
        {
            printf("队列满
    ");
        }
        else   //没有满的话
        {
            PtrQ->rear=(PtrQ->rear+1)%MaxSize;  //  找到他要去的地方
            PtrQ->Date[PtrQ->rear]=item;             //找到地方了,开始在哪里赋值。
        }
    }

    -----------------下面再附上出队列。。---------------

    ElementType DeleteQ(Queue *PtrQ)  //返回的类型是   ElementType    传送一个队列    
    {
        if(PtrQ->rear==PtrQ->front)  //判断队列是否为空。
        {
            printf("队列空
    ");
            return error ;
        }    
        else                           //不为空的话。
        {
            PtrQ->front=(PtrQ->front+1)%MaxSize;  
            return PtrQ->Date[PtrQ->front];
        }
    }
  • 相关阅读:
    vika维格表的新 CP ,飞书集成入口上线
    OKR落地四部曲:vika维格表帮你快速养成OKR思维
    ASP.NET, IIS, and Visual Web Developer 技巧与窍门
    VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中
    VS2008 Tips #007 如何用 ListView 控件将数据排序
    VS2008 Tips #005 – 如何绑定 ListView 控件
    VS2008 Tip #001 创建、管理和运用样式的强大 CSS 工具
    VS2008 Tips #006 关于“标记导航”的特性
    VS2008 Tips #003 – VS 2008 的拆分视图可以设置为垂直分割
    VS2008 Tips #004 – 您可以通过“浏览方式…”添加浏览器到 Visual Web Developer
  • 原文地址:https://www.cnblogs.com/A-FM/p/5139689.html
Copyright © 2020-2023  润新知