zoukankan      html  css  js  c++  java
  • 7.王道考研数据结构-队列

    一、队列的基本操作

    图片

    二、队列(顺序队)的实现

    
    #define MaxSize 50
    
    #define ElemType int
    
    typedef struct
    
    {
    
        int front;//队首
    
        int rear;//队尾
    
        ElemType data[MaxSize];
    
    }SqQueue;
    
    

    2.1 队列的初始化

    queue->front = queue.rear = 0

    
    void InitQueue(SqQueue *&queue){
    
        queue = (SqQueue*)malloc(sizeof(SqQueue));
    
        queue->front = queue.rear = 0;
    
    }
    
    

    2.2 入队和出队

    
    bool enQueue(SqQueue *&q,ElemType e)
    
    {	if (q->rear == MaxSize-1)	//队满上溢出
    
    		return false;
    
    	q->rear=(q->rear+1)%MaxSize;
    
    	q->data[q->rear]=e;
    
    	return true;
    
    }
    
    bool deQueue(SqQueue *&q,ElemType &e)
    
    {	if (q->front==q->rear)		//队空下溢出
    
    		return false;
    
    	q->front=(q->front+1)%MaxSize;
    
    	e=q->data[q->front];
    
    	return true;
    
    }
    
    

    三、循环队列(顺序队)

    图片

    注意,此时Q.rear 指向一个没有数据的单元

    • 队空条件:Q.rear == Q.front
    • 队满条件:Q.front == (Q.rear+1)%MaxSize

    3.1 循环队列的初始化

    
    void InitQueue(CircleQueue *&cq){
    
        cq->front = cq->rear = 0;
    
    }
    
    

    3.2 判断队空

    
    bool IsEmpty(CircleQueue *&cq){
    
        if(cq->front == cq->rear)
    
            return true;
    
        return false;
    
    }
    
    

    3.3 入队

    
    bool EnQueue(CircleQueue *&cq, ElemType e){
    
        //判断队列是否满
    
        if((cq->rear+1)%MaxSize == cq->front)
    
            return false;
    
        cq->data[cq->rear] = e;
    
        cq->rear = (cq->rear+1)%MaxSize;
    
        return true;
    
    }
    
    

    3.4 出队

    
    bool DeQueue(CircleQueue *&cq, ElemType &e){
    
        //判断是否空
    
        if(cq->front == cq->rear)
    
            return false;
    
        e = cq->data[cq->front];
    
        cq->front = (cq->front+1)%MaxSize;
    
        return true;
    
    }
    
    

    四、链队

    图片

    
    //节点
    
    typedef struct
    
    {
    
        ElemType data;
    
        struct LinkNode *next;
    
    }LinkNode;
    
    //队列
    
    typedef struct 
    
    {
    
        LinkNode *front,*rear;
    
    }LinkQueue;
    
    

    4.1 链队的初始化

    
    void InitQueue(LinkQueue *&q){
    
        q->front = (LinkNode*)malloc(sizeof(LinkNode));
    
        q->rear = q->front;
    
        q->front->next = NULL;
    
    }
    
    

    4.2 判断队列是否为空

    
    bool IsEmpty(LinkQueue *&q){
    
        return q->front == q->rear;
    
    }
    
    

    4.3 入队和出队

    
    void EnQueue(LinkQueue *&q, ElemType e){
    
        LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
    
        s->data = e;
    
        s->next = NULL;
    
        q->rear->next = s;
    
        q->rear = s;
    
    }
    
    bool DeQueue(LinkQueue *&q, ElemType &e){
    
        if(q->front == q->rear)
    
            return false;
    
        LinkNode *p = q->front->next;
    
        e = p->data;
    
        q->front->next = p->next;
    
        //如果p是最后一个元素,则让尾部指针指向头指针
    
        if(q->rear == p)
    
            q->rear = q->front;
    
        free(p);
    
        return true;
    
    }
    
    
  • 相关阅读:
    Kubernetes
    桥接模式
    原型模式
    工厂模式
    生成器模式
    Java-Sentinel限流中间件
    python模拟发送、消费kafka消息
    使用idea搭建springBoot项目
    linux 虚拟机不能启动不了系统,虚拟机更改linux初始启动5,出现无法启动现象
    vwware workstation虚机网络配置NAT
  • 原文地址:https://www.cnblogs.com/theory/p/13338747.html
Copyright © 2011-2022 走看看