赞
踩
- #include<iostream>
- using namespace std;
- const int MAXQSIZE = 5;
- //队列类
- template<class T>
- struct LinkList
- {
- T * data;//指向连续的数据存储区域
- int front;//头指针 指向第一个元素
- int rear;//尾指针 如果队列不为空指向最后元素的下一个位置
- };
-
- //构造一个空队列
- template<class T>
- void InitQueue(LinkList<T> & que)
- {
- que.data = (T *)malloc(MAXQSIZE*sizeof(T));
- if(!que.data) exit(0);
- que.front = que.rear= 0;
- }
- //销毁队列
- template<class T>
- void DestroyQueue(LinkList<T>& que)
- {
- free(que.data);
- }
- //清空队列
- template<class T>
- void ClearQueue(LinkList<T>& que)
- {
- que.front = que.front= 0;
- }
- //返回队列的长度
- template<class T>
- int QueueLength(LinkList<T>& que)
- {
- return (que.rear - que.front + MAXQSIZE)%MAXQSIZE;
- }
- //返回队列的队首元素
- template<class T>
- T GetHead(LinkList<T>& que)
- {
- if(que.front==que.rear)
- throw runtime_error("");
- return que.data[que.front];
- }
- //元素入队
- template<class T>
- bool EnQueue(LinkList<T>& que,T t)
- {
- if((que.rear+1)%MAXQSIZE == que.front)
- {
- return false;
- }
- que.data[que.rear] = t;
- que.rear = (que.rear+1)%MAXQSIZE;
- return true;
- }
- //元素出队
- template<class T>
- bool DeQueue(LinkList<T>& que,T & t)
- {
- if(que.front==que.rear)
- return false;
- t = que.data[que.front];
- que.front = (que.front + 1)%MAXQSIZE;
- return true;
- }
- //从对头到队尾元素遍历调用visit函数
- template<class T>
- void VisitQueue(LinkList<T>& que,void (*visit)(T &t))
- {
- int p = que.front;
- while (p!=que.rear)
- {
- (*visit)(que.data[p]);
- p = (p+1)%MAXQSIZE;
- }
- }
- //测试函数
- template<class T>
- void Print(T &t)
- {
- cout<<t<<endl;
- }
- template<class T>
- void AddOne(T &t)
- {
- t++;
- }
- int main()
- {
- //创建一个空的队列
- LinkList<int> queue;
- //初始化队列
- InitQueue(queue);
- //元素入队
- EnQueue(queue,1);
- EnQueue(queue,2);
- EnQueue(queue,3);
- EnQueue(queue,4);
- //返回队列的长度
- cout<<"队列的长度: "<<QueueLength(queue)<<endl;
- //输出所有元素
- VisitQueue(queue,Print<int>);
-
- //返回队列的队首元素
- cout<<"队列的队首元素: "<<GetHead(queue)<<endl;
- //元素出队
- int a ;
- if(DeQueue(queue,a))
- {
- cout<<"出队元素: "<<a<<endl;
- }
- //返回队列的长度
- cout<<"队列的长度: "<<QueueLength(queue)<<endl;
- //输出所有元素
- VisitQueue(queue,Print<int>);
- //元素出队
- if(DeQueue(queue,a))
- {
- cout<<"出队元素: "<<a<<endl;
- }
- //返回队列的长度
- cout<<"队列的长度: "<<QueueLength(queue)<<endl;
- //输出所有元素
- VisitQueue(queue,Print<int>);
-
- //元素入队
- EnQueue(queue,5);
- EnQueue(queue,6);
- cout<<"5、6元素入队"<<endl;
- //返回队列的长度
- cout<<"队列的长度: "<<QueueLength(queue)<<endl;
- //输出所有元素
- VisitQueue(queue,Print<int>);
-
- //将所有元素加一
- cout<<"将所有元素加一"<<endl;
- VisitQueue(queue,AddOne<int>);
- //输出所有元素
- VisitQueue(queue,Print<int>);
-
- //清空队列
- ClearQueue(queue);
- //销毁队列
- DestroyQueue(queue);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。