⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.h

📁 数据结构实例 可以学一下。。
💻 H
字号:
#pragma once
#include "mylib.h" 

namespace mylib {
	template<typename elemtype>
	class list_item {
	public:
		typedef elemtype value_type;

		list_item(elemtype, list_item<elemtype>*);   //构造函数
		list_item(const list_item<elemtype>&);       //拷贝构造函数
		const elemtype date () const;                //返回节点数据
		const list_item<elemtype>* next() const;     //返回下个节点
		void get_date (const elemtype);              //改写节点数据
		void get_next (const list_item<elemtype>*);  //改写下个节点

		const list_item<elemtype>&
			operator= (const list_item<elemtype>&);   //赋值
	
	private:
		elemtype  _date;//数据
		list_item<elemtype>* _next;//下个节点 
	};//单链表节点类
	//节点类代码实现
	template<typename elemtype>
		list_item<elemtype>::list_item(elemtype ia = 0,
		                               list_item<elemtype> *p = NULL) 
	{
		get_date(ia);
		if(p == NULL)
			get_next(NULL);
		else 
		{
			get_next(p->next());
			p->get_next(this);
		}
	}
	template<typename elemtype> list_item<elemtype>::
		list_item(const list_item<elemtype>& node)
	{
		get_date(node.ia);
		if(node.next() == NULL)
			get_next(NULL);
		else
		{
			get_next(node.next());
			node.get_next(this);
		}
	}

	template<typename elemtype>
		const list_item<elemtype>& list_item<elemtype>::
		operator= (const list_item<elemtype>& node)
	{
		if(this != &node)
		{
			get_date(node.ia);
			if(node.next() == NULL)
				get_next(NULL);
			else
			{
				get_next(node.next());
				node.get_next(this);
			}
		}
		return *this;
	}
	
	template<typename elemtype>
		const elemtype 
		list_item<elemtype>::date() const 
	{
		return _date;
	}
	template<typename elemtype> const 
		list_item<elemtype>* list_item<elemtype>::
		next(void) const  
	{
		return _next;
	}
	template<typename elemtype>
		void list_item<elemtype>::
		get_date(const elemtype de)
	{
		_date = de; 
    }
	template<typename elemtype>
		void list_item<elemtype>::
		get_next( const list_item<elemtype> *pev )
    { 
       _next = ( list_item<elemtype>* )pev;   
    }

	template<typename elemtype> 
	class list{
	public:
		list();                              //构造函数
		list( const list<elemtype>& );       //拷贝构造函数。只声明
		~list();                             //析构函数
		const int size() const              ;//返回长度
		bool empty() const;            //测试是否为空
		void insert( const elemtype, const elemtype);
		                                      //在某个位子插入
		void insert_front( const elemtype );  //在头部插入
		void insert_end( const elemtype );    //在尾部插入
		void remove( const elemtype );        //删除某个节点
		void remove_all();                    //删除所有
		void remove_front();                  //删除头节点
		void print() const;                   //打印
		const list_item<elemtype>* 
			find(const elemtype);           //查找
		const list<elemtype>&
			operator= (const list<elemtype>&);    //赋值。只声明
	
	private:
		//私有函数集合
		void down_size();
		void add_size();
		//私有数据集合
		list_item<elemtype> *at_front;
		list_item<elemtype> *at_end;
		list_item<elemtype> *at_move;
		int                _size;
	};//链表类定义
	//函数实现代码
	//私有函数集合
	template<typename elemtype>
		void list<elemtype>::add_size() 
    {
       ++_size; 
    }

	template<typename elemtype>
		void list<elemtype>::down_size() 
    {
       --_size; 
    }

	//公有函数集合
	template<typename elemtype>
		list<elemtype>::list(void)
    { 
       at_front = NULL;
       at_end = NULL;
       _size = 0;
    }

	template<typename elemtype>
		list<elemtype>::~list(void) 
    {
       remove_all();
    }

	template<typename elemtype>
		bool list<elemtype>::
		empty(void) const 
    {
       return size() == 0 ? true : false;
    }

	template<typename elemtype>
		const int list<elemtype>::
		size(void) const
    { 
       return _size;
    }

	template<typename elemtype>
		void list<elemtype>::insert_front(const elemtype iva)
    {
       list_item<elemtype> *pv = 
              new list_item<elemtype>(iva, 0);
       if(!at_front)
       {
           at_front = at_end = pv;
       }
       else 
       {
           pv->get_next(at_front);
           at_front = pv;
       }
       add_size();
    }

	template<typename elemtype>
		void list<elemtype>::insert_end(const elemtype iva) 
	{
       if( at_end == NULL) 
       {
           at_end = at_front =
                  new list_item( iva, 0 );
       }
       else 
           at_end = new list_item( iva, at_end ); 
       add_size();
    }

	template<typename elemtype> void list<elemtype>::
		insert( const elemtype ixa, const elemtype iva ) 
    {
       list_item<elemtype> *pev = 
              ( list_item<elemtype>* )find( iva );
       if( pev == NULL )
       {
           cerr << "err!" ;
           return;
       }
      if( pev == at_front ) 
           insert_front( ixa );
       else
	   {
           new list_item( ixa, pev );
           add_size();
       }
    }

	template<typename elemtype> const 
		list_item<elemtype>* list<elemtype>::
		find( const elemtype iva )
    {
       list_item *at_move = at_front;
       while( at_move != NULL ) 
       {
           if( at_move->date() == iva )
              return at_move;
           at_move = ( list_item<elemtype>* )at_move->next();
           
       }
           return NULL;
    }

	template<typename elemtype>
		void list<elemtype>::remove_front()
    {
       if( at_front )
       {
           list_item <elemtype> *pev = at_front;
           at_front = ( list_item<elemtype>* )at_front->next();
           delete pev;
           down_size();
       }
    }

	template<typename elemtype>
		void list<elemtype>::remove( elemtype iva )
    {
       list_item<elemtype> *pev = at_front;
       while(pev && (pev->date()==iva))
       {
           pev = ( list_item<elemtype>* )pev->next();
           remove_front();
       }
       if( !pev )
           return ;
       list_item *prv = pev;
       pev = ( list_item<elemtype>* )pev->next();
       while( pev ) 
       {
           if( pev->date() == iva ) 
           {
              prv->get_next( pev->next() );          
              down_size();
              delete pev;
              pev = ( list_item<elemtype>* )prv->next();
              if( pev != NULL )
              {
                  at_end = prv;
                  return;
              }
           }
           else 
           {
              prv = pev;
              pev = ( list_item<elemtype>* )pev->next();
           }
       }
    }

	template<typename elemtype>
		void list<elemtype>::remove_all()
    {
       while( at_front )
           remove_front();
       _size = 0;
       at_front = at_end = NULL;
    }

	template<typename elemtype>
		void list<elemtype>::print() const 
    {
       list_item<elemtype> *pev = at_front;
	   std::cout << '[' << size() << ']';
	   std::cout << '{';
       for( int ix = 0; pev && ix < size(); ++ix ) 
       {
		   std::cout << pev->date() << ' ';
           pev = (list_item<elemtype>*)pev->next();
       }
	   std:::cout << '}' << std::endl;
    }

}; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -