码迷,mamicode.com
首页 > 其他好文 > 详细

循环队列的基本操作

时间:2014-10-24 16:39:44      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   io   os   ar   for   sp   on   

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


循环队列的基本操作

标签:des   style   blog   io   os   ar   for   sp   on   

原文地址:http://blog.csdn.net/bigbigship/article/details/40427407

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!