循环队列的基本操作实现
2016-03-07 19:58
591 查看
front:指向队头元素的前一个单元
rear:指向队尾元素
maxSize:数组的最大长度
元素入队的时候,将队尾的指针加1,然后元素入队;元素出队时,先将对头指针加1,然后元素出队。
队头指针进1:front=(front+1)%maxSize;
队尾指针进1:rear=(rear+1)%maxSize;
在循环队列的结构下,当front==rear时为空队列,当(rear+1)%maxSize==front 时为满队列,注意满队列实际上仍有一个元素的空间未使用。
rear:指向队尾元素
maxSize:数组的最大长度
元素入队的时候,将队尾的指针加1,然后元素入队;元素出队时,先将对头指针加1,然后元素出队。
队头指针进1:front=(front+1)%maxSize;
队尾指针进1:rear=(rear+1)%maxSize;
在循环队列的结构下,当front==rear时为空队列,当(rear+1)%maxSize==front 时为满队列,注意满队列实际上仍有一个元素的空间未使用。
#include<iostream> #include <malloc.h> //malloc using namespace std; const int max_size=100; typedef struct queue { int front,rear; int maxSize; int *q; }queue; //初始化空队列 void InitQueue(queue &s) { s.maxSize=max_size ; s.q=(int *)malloc(max_size*sizeof(int)); //动态申请一维数组 s.front=s.rear=0; } int isempty(queue &s) { return s.front==s.rear; } int isfull(queue &s) { return (s.rear+1)%s.maxSize==s.front; } //获取队首的元素 int getTop(queue &s) { int x; if(isempty(s)) { cout<<"empty"<<endl; } x=s.q[(s.front+1)%s.maxSize]; } //进队 void enqueue(queue &s,int x) { if(isfull(s)) { cout<<"Full"<<endl; } s.q[(s.rear=(s.rear+1)%s.maxSize)]=x; } //出队 void dequeue(queue &s) { if(isempty(s)) { cout<<"underflow"<<endl; } s.front=(s.front+1)%s.maxSize; } void print(queue &s) { if(isempty(s)) { cout<<"underflow"<<endl; exit(0); } else { while(s.front!=s.rear) { cout<<s.q[++s.front]<<" "; } cout<<endl; } } int main() { queue s; InitQueue(s); enqueue(s,2); enqueue(s,3); enqueue(s,4); enqueue(s,8); dequeue(s); dequeue(s); print(s); return 0; }
相关文章推荐
- 软件工程个人作业01
- OnTouch(),onTouchEvent(),onClick()的区别
- 文件类的写和读的方法详细讲解通熟易懂
- 动态转移方程 免费馅饼
- Eclipse中恢复已删除文件和还原到先前版本
- Google Zxing 二维码生成与解析
- Bootstrap新手常见问题
- POJ 1007
- 1036. Boys vs Girls (25)
- bootstrap小结
- 超炫黑客帝国字母雨效果
- arm看门狗的作用
- 《Java实战开发经典》第六章6.1
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
- python小点心--获取汉子拼音首字母
- LeetCode : Valid Parentheses [java]
- qsort函数用法
- JsonCpp的使用方法
- Bitmap优化问题
- 进程间通信总结