• 链式队列


    QueueNode.h

    template<typename Type> class LinkQueue;
    
    template<typename Type> class QueueNode{
    private:
    	friend class LinkQueue<Type>;
    	QueueNode(const Type item,QueueNode<Type> *next=NULL)
    		:m_data(item),m_pnext(next){}
    private:
    	Type m_data;
    	QueueNode<Type> *m_pnext;
    };
    

    LinkQueue.h

    #include "QueueNode.h"
    
    template<typename Type> class LinkQueue{
    public:
    	LinkQueue():m_prear(NULL),m_pfront(NULL){}
    	~LinkQueue(){
    		MakeEmpty();
    	}
    	void Append(const Type item);   //insert data
    	Type Delete();                  //delete data
    	Type GetFront();                //get data
    	void MakeEmpty();               //make the queue empty
        void Print();                   //print the queue
    
    	bool IsEmpty() const{
    		return m_pfront==NULL;
    	}
    
    private:
    	QueueNode<Type> *m_prear,*m_pfront;
    };
    
    template<typename Type> void LinkQueue<Type>::MakeEmpty(){
    	QueueNode<Type> *pdel;
    	while(m_pfront){
    		pdel=m_pfront;
    		m_pfront=m_pfront->m_pnext;
    		delete pdel;
    	}
    }
    
    template<typename Type> void LinkQueue<Type>::Append(const Type item){
    	if(m_pfront==NULL){
    		m_pfront=m_prear=new QueueNode<Type>(item);
    	}
    	else{
    		m_prear=m_prear->m_pnext=new QueueNode<Type>(item);
    	}
    }
    
    template<typename Type> Type LinkQueue<Type>::Delete(){
    	if(IsEmpty()){
    		cout<<"There is no element!"<<endl;
    		exit(1);
    	}
    	QueueNode<Type> *pdel=m_pfront;
    	Type temp=m_pfront->m_data;
    	m_pfront=m_pfront->m_pnext;
    	delete pdel;
    	return temp;
    }
    
    template<typename Type> Type LinkQueue<Type>::GetFront(){
    	if(IsEmpty()){
    		cout<<"There is no element!"<<endl;
    		exit(1);
    	}
    	return m_pfront->m_data;
    }
    
    template<typename Type> void LinkQueue<Type>::Print(){
    	QueueNode<Type> *pmove=m_pfront;
    	cout<<"front";
    	while(pmove){
    		cout<<"--->"<<pmove->m_data;
    		pmove=pmove->m_pnext;
    	}
    	cout<<"--->rear"<<endl<<endl<<endl;
    }
    

    Test.cpp
    #include <iostream>
    
    using namespace std;
    
    #include "LinkQueue.h"
    
    int main(){
    	LinkQueue<int> queue;
    	int init[10]={1,3,6,8,9,2,0,5,4,7};
    
    	for(int i=0;i<10;i++){
    		queue.Append(init[i]);
    	}
    	queue.Print();
    
    	queue.Delete();
    	queue.Print();
    
    	cout<<queue.GetFront()<<endl;
    	queue.Print();
    
    	queue.MakeEmpty();
    	queue.Print();
    
    	queue.Delete();
    
    	return 0;
    }
    
  • 相关阅读:
    Vue.config.productionTip = false;
    Node学习笔记
    Redux学习笔记------容器组件与展示组件分离
    Redux学习笔记------数据流
    Redux学习笔记------store
    Redux学习笔记------reducer
    Redux学习笔记------action
    Redux学习笔记------基础介绍
    过滤emoji表情
    textarea自适应高度
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2438206.html
Copyright © 2020-2023  润新知