zoukankan      html  css  js  c++  java
  • 数据结构之线性结构之队列

    三,队列

    队列(操作受限制的线性表):先进先出,一端插入,另一端输出

    队列的顺序存储实现:数组+对头变量+队尾变量

    typedef struct {
        int Data[MAXSIZE];
        int rear;   // rear指向的是真实的数组排序个数,是实际个数-1,front指向第一个数之前的位置
        int front;  //队尾变量rear和对头变量front最初都是指向-1
    }Queue;

    如果是正常的线状队列,前面删除数据部分的空间无法使用,会造成浪费;所有出现循环队列

      循环队列会出现的问题:空满时front==rear都是相等,无法区分

           原因:n种长度值对应n+1种情况

           解决方法:使用额外标记:size或者tag;仅仅使用n-1的数组空间

    void AddQ(Queue *PtrQ, int item)
    {//front 和rear 指针的移动采用“加1取余”法,体现了“循环使用”
        if ((PtrQ->rear + 1) % MAXSIZE == PtrQ->front)
        {
            printf("队列满");
            return;
        }
        PtrQ->rear = (PtrQ->rear + 1) % MAXSIZE;//在队列的尾部插入元素
        PtrQ->Data[PtrQ->rear] = item;
    }
    
    int DeleteQ(Queue *PtrQ)
    {
        if (PtrQ->front == PtrQ->rear)
        {
            printf("队列空");
            return -NAN; 
        }
        else
        {//此处在之前使front加1的原因是front原本指向的是第一个数之前的位置
            PtrQ->front = (PtrQ->front + 1) % MAXSIZE;
            return PtrQ->Data[PtrQ->front];
        }
    }

    队列的链式存储实现:单链表的实现

    typedef struct {
        LinkStack *rear; //指向队尾结点;
        LinkStack *front; //指向对头结点;
    }LinkQueue;

    int DeleteQ(LinkQueue *PtrQ)
    {
        LinkStack *First = new LinkStack;
        int result;
        if (PtrQ->front = NULL)
        {
            printf("队列空");
            return -NAN;
        }
        First = PtrQ->front;
        if (PtrQ->front == PtrQ->rear)
            PtrQ->front = PtrQ->rear = NULL;
        else
        {
            PtrQ->front = PtrQ->front->Next;
        }
        result = First->Data;
        delete(First);
        return result;
    }
  • 相关阅读:
    vs2017 项目调试浏览器网页闪退Bug
    “WebPageBase”在未引用的程序集中定义。必须添加对程序集“System.Web.WebPages, Version=1.0.0.0,Culture=neutral....."的引用
    SQL Server判断日期是否为周六 周日
    获取各国的日期时间
    .net Api项目初步搭建并移除XML格式
    鼠标滚轮事件
    js中if表达式判断规则
    原生轮播图
    C# uri
    SqlServer 备份还原教程
  • 原文地址:https://www.cnblogs.com/xiaoxue126/p/9041256.html
Copyright © 2011-2022 走看看