zoukankan      html  css  js  c++  java
  • 循环顺序队列

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

  • 相关阅读:
    JDBC 复习4 批量执行SQL
    JDBC 复习3 存取Oracle大数据 clob blob
    Oracle复习
    Linux命令(1)grep
    JDBC 复习2 存取mysql 大数据
    JDBC 复习1 DBUtil
    php 环境搭建问题
    Windows 批处理 bat 开启 WiFi 菜单选项 设置ID PWD
    Bat 批处理启动和停止Oracle 服务
    docker 学习1 WSL docker ,Windows docker
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6753254.html
Copyright © 2011-2022 走看看