首页 > 代码库 > 循环队列的基本操作

循环队列的基本操作

主要的功能: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\n");
            return ;
        }
        base[rear] = x;
        rear = (rear + 1)%Size;
    }
    void pop(){//删除队首元素
        if(empty()){
            printf("The queue is empty\n");
            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\n",q.top());
    printf("length %d\n",q.length());
    q.push(21);
    printf("length %d\n",q.length());
    q.visit();
    q.pop();
    printf("top %d\n",q.top());
    q.visit();
    q.destroy();
    q.visit();
    return 0;
}


循环队列的基本操作