迴圈佇列的基本操作

bigbigship發表於2014-10-24

主要的功能: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;
}


相關文章