c++之双向链表

自己参考书籍写的双向链表模板代码:

#include 
   
   
    
    
#include 
    
    
     
     
#ifndef LIST_H
#define LIST_H
template 
     
     
      
      
class List
{
private:
	struct Node
	{
		Node* front;
		Node* next;
		T item;
	};
	Node* first;
	Node* rear;
	int listsize;
public:
	List();
	~List();
	bool isempty();//判断空链表
	bool isfull();//判断是否满
	int length();
	bool insert(T &t);//尾部追加元素
	bool findinsert(T &t1,T &t2);//查找插入元素:在t1之后插入t2
	bool denode(T &t);//按查找内容删除元素
	void display();//显示链表元素的item
};

template 
      
      
       
       
List
       
       
         ::List() { first=rear=0;//空指针最好使用0赋值,NULL不建议使用 listsize=0; }; template 
        
          List 
         
           ::~List() { Node* tem; while(first) { tem=first->next; delete first; first=tem; } } template 
          
            int List 
           
             ::length() { int i=0; Node* temp=new Node; temp=first; temp->next=first->next; temp->front=0; while(temp) { temp=temp->next; i++; } cout<<"链表长度为: "< 
            <<"\n"; return i; } template 
             
               bool List 
              
                ::findinsert(T &t1,T &t2)//按查找位置插入元素 { Node* add=new Node; add->item=t2; Node* temp=new Node; temp=first; temp->next=first->next; temp->front=0; while(temp) { if(temp->item==t1) { add->next=temp->next;//把查找到的元素的next赋值给add的next temp->next=add;//将查找到的元素的next指向add add->front=first;//将add的前指针指向查找到的元素 add->next->front=add;//将查找到的元素的下一个元素的front指向add; temp=0; } else temp=temp->next; } return true; } template 
               
                 bool List 
                
                  ::insert(T &t)//尾部追加元素 { Node* add=new Node; add->item=t; add->next=0; if(first==0)//空链表 { first=add; rear=first; } else { rear->next=add; add->front=rear; rear=add; rear->front=add->front; rear->next=0; } return true; } template 
                 
                   bool List 
                  
                    ::denode(T &t)//删除所有iten为t的节点 { Node* temp=new Node; Node* dele=new Node; dele->front=dele->next=0; dele->item=NULL; temp=first; temp->next=first->next; temp->front=0; while(temp) { if(temp->item==t) { dele=temp; temp->front->next=temp->next; temp->next->front=temp->front; temp=temp->next; delete dele; } else { temp=temp->next; } } return true; } template 
                   
                     void List 
                    
                      ::display()//显示链表 { if(first==0) { cout<<"空链表\n"; } else { while(first) { cout< 
                     
                       item<<","; first=first->next; } } } #endif int arr[10]= {10,5,8,7,6,5,4,3,5,1}; int a=5; int b=100; List 
                      
                        list; for(int i=0; i<10; ++i) { list.insert(arr[i]); } list.findinsert(a,b); list.length(); list.denode(a); list.display(); system("pause"); 
                       
                      
                     
                    
                   
                  
                 
                
               
              
            
           
          
         
       
      
      
     
     
    
    
   
   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值