首页 > 代码库 > 循环队列的基本操作
循环队列的基本操作
主要的功能: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; }
循环队列的基本操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。