• 队列的基本操作周期


    基本功能:1)初始化循环队列

                            2)求循环队列的长度

                            3)循环队列的插入删除操作

                            4) 推断循环队列是否为空。是否已经满了

                            5)遍历循环队列

    基本的原理:

    1)初始化 front = rear = 0;

    2)为空  front = rear   

    3)已满 front=(rear+1)%size 

    4)  插入 rear = (rear+1)%size 

    5)删除 front=(front+1)%size

    代码例如以下:

    /****************************************************************************
                              author---bigship
                             date----2014.10.24
    *****************************************************************************/
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    using namespace std;
    
    const int Size = 100;//循环队列的大小
    
    template <class T>
    
    struct Queue
    {
        T *base;
        int front;
        int rear;
        void init(){//初始化队列
            base = (T *)malloc(sizeof(T)*Size);
            front=rear=0;
        }
        bool empty(){//推断队列是否为空
            if(front==rear)
                return true;
            return false;
        }
        bool full(){//推断是否已经满了
            if((rear+1)%Size==rear)
                return true;
            return false;
        }
        void push(T x){//插入元素
            if(full()){
                printf("The queue is full
    ");
                return ;
            }
            base[rear] = x;
            rear = (rear + 1)%Size;
        }
        void pop(){//删除队首元素
            if(empty()){
                printf("The queue is empty
    ");
                return ;
            }
            front=(front+1)%Size;
        }
        T top(){//返回队首元素
            return base[front];
        }
        int length(){//队列长度
            return (rear-front+Size)%Size;
        }
        void destroy(){//销毁队列
            if(base) free(base);
            base = NULL;
            rear=front;
        }
        void visit(){//遍历队列
            if(empty()){
                printf("the queue is empty");
                return ;
            }
            int tmp = front;
            while(tmp!=rear){
                printf("%d ",base[tmp]);
                tmp=(tmp+1)%Size;
            }
            puts("");
        }
    };
    int main()
    {
        Queue<int > q;
        q.init();
        for(int i=0;i<20;i++)
            q.push(i);
        printf("top %d
    ",q.top());
        printf("length %d
    ",q.length());
        q.push(21);
        printf("length %d
    ",q.length());
        q.visit();
        q.pop();
        printf("top %d
    ",q.top());
        q.visit();
        q.destroy();
        q.visit();
        return 0;
    }
    


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    如何打造优秀的电商网页,吸引更多人“买买买”?
    快速排序
    JUnit单元测试
    算法学习(归并排序)
    用于理解Java的前8个图表
    时间与字符串的转化
    spring 的 切片Aspect
    过滤器 ;spring拦截器 切片 小结
    spring data jpa 注解
    mysql 解除安全模式
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4908880.html
Copyright © 2020-2023  润新知