zoukankan      html  css  js  c++  java
  • c语言数据结构学习心得——队列

    队列

    只允许在一端进行插入,在另一端进行删除的线性表

    队头(Front):允许删除的一端(队首)

    队尾(Rear):允许插入的一端

    FIFO:先进先出

        不要求从数组首位开始存储队列

    #define MaxSize 50            //定义队列中元素的最大个数
    typedef struct{
        ElemType data[MaxSize];  //存放队列元素
        int front,rear;          //队头指针和队尾指针
    }SqQueue;

    循环队列

    其中,首尾相连的顺序存储的队列叫循环队列

    入队:rear=(rear+1)%MaxSize

    出队:front=(front+1)%MaxSize

    队空:front=rear

    队满:数组中仍有一个空余单元

    队满时:(rear-front+MaxSize)%MaxSize

    1.入队

    bool EnQueue(SqQueue &Q,ElemType x){
        if((Q.rear+1)%MaxSize==Q.front) return false;//队满
        Q.data[Q.rear]=x;
        Q.rear=(Q.rear+1)%MaxSize;
        return true;
    }

    2.出队

    bool DeQueue(SqQueue &Q,ElemType &x){
        if(Q.rear==Q.front) return false;//队满
        x=Q.data[Q.front];
        Q.rear=(Q.front+1)%MaxSize;
        return true;
    }

    链式队列

    typedef struct{  //链式队列结点
        ElemType data;  
        struct Link Node *next;  
    }Link Node;

    typedef struct{  //链式队列
        ElemType data;  
        Link Node *front,*rear;//队头和队尾指针
    }Link Queue;
     

    1.入队

    void EnQueue(LinkQueue &Q,ElemType x){
        s=(LinkNode *)malloc(sizeof(LinkNode));
        s->data=x;
        s->next=NULL;
        Q.rear->next=s;
        Q.rear=s;
    }

    2.出队

    bool DeQueue(LinkQueue &Q,ElemType &x){
       if(Q.front==Q.rear) return false;   //空队
       p=Q.front->next;
       x=p->data;
       Q.front->next=p->next;
       if(Q.rear==p) Q.rear=Q.front;       //原队列只有一个结点删后变空队
       free(p);
       return true;
    }

    双端队列

    具体见上传图片

    总结

  • 相关阅读:
    method-r
    dtrace
    轻用其芒,动即有伤,是为凶器;深藏若拙,临机取决,是为利器!
    Git---报错:git Please move or remove them before you can merge 解决方案
    Git----拉取远程分支,git pull,git rebase,git pull --rebase的区别
    Git----查看提交日志
    Git---tag
    Git----常见工作管理总结
    【线上监控】日志上报bug处理方式总结
    接口文档所需内容
  • 原文地址:https://www.cnblogs.com/suprechen/p/10597491.html
Copyright © 2011-2022 走看看