• 循环顺序队列


    #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);
    }

  • 相关阅读:
    javaweb学习总结(二十三)——jsp自定义标签开发入门
    javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
    MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器
    XML学习总结(二)——XML入门
    XML学习总结(一)——XML介绍
    使用java中replaceAll方法替换字符串中的反斜杠
    MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
    MyEclipse使用总结——修改MyEclipse默认的Servlet和jsp代码模板
    使用js加载器动态加载外部Javascript文件
    JavaScript获取浏览器类型与版本
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6753254.html
Copyright © 2020-2023  润新知