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;
    }
  • 相关阅读:
    Supervisor
    JS操作JSON总结
    电脑连接海信电视 HDMI
    upupw nginx服务器 rewrite设置
    PHP实现远程图片下载
    web页面调用IOS的事件
    composer更新不成功,启用国内镜像网站的配置更改办法
    Oracle中的一连接语句
    Oracle 树操作(select…start with…connect by…prior)
    MyEclipse下Tomcat无法部署项目 finish按钮无法点击
  • 原文地址:https://www.cnblogs.com/xiaoxue126/p/9041256.html
Copyright © 2011-2022 走看看