• 队列的实现


    1. 基本操作

    操作 解释
    MakeNull(Q) 将队列置空
    Front(Q) 返回队列第一个元素
    EnQueue(x,Q) 将元素插入Q的后端
    DeQueue(Q) 删除第一个元素
    Empty(Q) 为空返回TRUE

    2. 队列的指针实现

        struct celltype {
            Elementtype element;
            celltype *next;
        };
        
        struct QUEUE {
            celltype *front;
            celltype *rear;
        };
        
        void MakeNull(QUEUE &Q)
        {
            Q.front = new celltype;
            Q.front->next = NULL;
            Q.rear = Q.front;
        }
        
        boolean Empty(QUEUE Q) 
        {
            if(Q.front == Q.rear)
                return TRUE;
            else
                return FALSE;
        }
        
        void EnQueue(Elementtype x, QUEUE &Q) 
        {
             Q.rear->next = new celltype;
             Q.rear = Q.rear->next;
             Q.rear->element = x;
             Q.rear->next = NULL; 
        }
        
        void DeQueue(QUEUE &Q)
        {
            celltype *tmp;
            if(Empty(Q))
                error("empty");
            else
            {
                tmp = Q.front->next;
                Q.front->next = tmp->next;
                delete tmp;
                if(Q.front->next == NULL)
                    Q.rear = Q.front;
            }
        }
        
    

    3. 队列的数组实现

        #define maxlength 100
        typedef struct {
            int front;
            int rear;
            Elementtype elements[maxlength];
        } QUEUE;
        
        int addone(int i )
        {
            return (i+1)%maxlength;
        }
        
        void MakeNull(QUEUE &Q)
        {
            Q.front = 0;
            Q.rear = maxlength - 1;
        }
        
        boolean Empty(QUEUE Q)
        {
            if(addone(Q.rear) == Q.front)
                return TRUE;
            else
                return FALSE;
        }
        
        Elementtype Front(QUEUE Q)
        {
            if(Empty(Q))
                return NULL;
            else
                return Q.elemenmts[Q.front];
        }
        
        void EnQueue(elementtype x, QUEUE &Q)
        {
            if(addone(addone(Q.rear)) == Q.front)
                error("queue is full");
            else {
                Q.rear = addone(Q.rear);
                Q.elements[Q.rear] = x;
            }
        }
        
        void DeQueue(QUEUE &Q)
        {
            if(Empty(Q))
                error("queue is empty");
            else
                Q.front = addone(Q.front);
        }
        
    

    部分资料来自《数据结构与算法--张岩》

  • 相关阅读:
    nginx 配置文件详解
    nginx的location匹配规则
    mysql常用函数
    jquery封装的ajax请求
    docker
    in与exists和not in 与 not exists的区别
    mysql授权
    线程池
    springboot+rediscluster
    常用网址
  • 原文地址:https://www.cnblogs.com/vachester/p/6682583.html
Copyright © 2020-2023  润新知