数据结构基础:链表

listtools.h

 

#ifndef LISTTOOLS_H
#define  LISTTOOLS_H
namespace  LinkedListSavitch
{
    template
<class T>
    
class Node
    
{
      
private:
          T data;
          Node
<T> *link;
       
public:
           Node()
{};
          Node(
const T& theData,Node<T>* theLink):data(theData),link(theLink){}
          Node
<T>* getLink() const{return link;}
          
const T getData() const {return data;}
          
void setData(const T& theData){data=theData;}
          
void setLink(Node<T>* pointer){link=pointer;}
    }
;
    template
<class T>
    
void headInsert(Node<T>*& head,const T& theData);
    
//前提条件:指针变量head指向
    
//链表的头节点.
    
//执行结果:一个包含数据theData的新节点
    
//被添加到链表的头部

    template
<class T>
    
void insert(Node<T>* afterMe,const T& theData);
    
//前提条件: afterMe指向链表中的某个节点。
    
//执行结果:  一个包含数据theData的新节点被添加到链表中afterMe所指向的
    
//节点之后。
    
    template
<class T>
    
void deleteNode(Node<T>* before);
    
//前提条件:指针before所指向的节点不是链表的最后一个节点。
    
//执行结果:指针before所指向的下一个节点已经从链表删除,
    
//并且相应的内存交还给自由堆。

    template
<class T>
    
void deleteFirstNode(Node<T>*& head);
    
//前提条件:指针head指向链表的第一个节点,
    
//并且链表中至少有一个节点。
    
//执行结果:指针head所指向的节点已经从链表中删除,
    
//并且相应的内存交还给自由堆。

    template
<class T>
    Node
<T>* search(Node<T>* head,const T& target);
    
//前提条件:指针head指向链表的头节点。
    
//最后一个节点中的指针变量值为NULL。
    
//==为类型T定义。
    
//(==操作符用作判断是否相等的准则)。
    
//如果链表为空,则head等于NULL.
    
//返回一个指针,该指针指向数据等于target的第一个节点。
    
//如果没有节点等于target,
    
//则函数返回NULL。
}
// LinkListSavitch
#endif // LISTTOOLS_H

 listtools.cpp

 

#include  " listtools.h "
#include 
< cstddef >
namespace  LinkedListSavitch
{
    template
<class T>
    
void headInsert(Node<T>*& head,const T& theData)
    
{
        head
=new Node<T>(theData,head);
    }

    template
<class T>
    
void insert(Node<T>* afterMe,const T& theData)
    
{
        afterMe
->setLink(new Node<T>(theData,afterMe->getLink()));
    }

    template
<class T>
    
void deleteNode(Node<T>* before)
    
{
         Node
<T> *discard;
         discard
=before->getLink();
         before
->setLink(discard->getLink());
         delete discard;
    }

    template
<class T>
    
void deleteFirstNode(Node<T>*& head)
    
{
        Node
<T> *discard;
        discard
=head;
        head
=head->getLink();
        delete discard;
    }

    
//使用cstddef;
    template<class T>
    Node
<T>* search(Node<T>* head,const T& target)
    
{
        Node
<T>* here=head;

        
if(here==NULL)//如果是空链表
        {
            
return  NULL;
        }

        
else
        
{
             
while (here->getData()!=target && here->getLink()!=NULL)
                  here
=here->getLink();
             
if(here->getData()==target)
                 
return here;
             
else
                 
return  NULL;
        }

    }

}
// LinkedListSavitch

TestList.cpp

 

#include  < iostream >
using  std::cout;
using  std::cin;
using   namespace  std;
#include 
" listtools.h "
#include 
" listtools.cpp "
using   namespace   LinkedListSavitch;

int  main( char *  EventArgs)
{
    Node
<int> *head=new Node<int>(1,NULL);
    
/* head->setData(1);
     head->setLink(NULL);
*/

  
     headInsert(head,
2);
     insert(head,
3);
      
//headInsert(head,4);
   
     Node
<int> *display=head;
     
while (display->getLink()!=NULL)
     
{
       cout
<<display->getData()<<" ";
       display
=display->getLink();
     }

   

     
int f;
     cin
>>f;
     
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值