链表

在C++中,可以用结构类型来描述单链表的结点 ,由于结点的元素类型不确定,所以采用C++的模板机制。 template <typename T> struct Node {   T data;   Node<T> *next; 

单链表的实现

template <class T>

class LinkList { 

  public: 

  LinkList ( ) {first=new Node<T>; first -> next= NULL ;}

     LinkList ( T a[ ], int n ) ; 

  ~LinkList ( ) ; 

  int Length ( ) ;

  T Get ( int i ) ; 

  int Locate ( T x ) ;

  void Insert ( int i, T x ) ;

  T Delete ( int i ) ; 

  void PrintList ( ) ; 

  private: 

   Node<T>  *first; // 单链表的头指针  , <T>可以省略

}; 

尾插template <class T>  
LinkList<T>:: LinkList(T a[ ], int n) {
    Node<T> *r,*s;      //尾指针
    first=new Node<T>;   //生成头结点
r=first;          
    for (int i=0; i<n; i++)
        s=new Node<T>; 
        s->data=a[i];  //为每个数组元素建立一个结点
        r->next=s; r=s;      //插入到终端结点之后
}
    r->next=NULL;    //单链表建立完毕,将终端结点的指针域置空
 }
 
1 工作指针p初始化,计数器初始化 2 查找第i-1个节点,并使工作指针p指向该节点 3 若查找不成功(P==NULL),说明位置错误,抛出位置异常,否则 3.1 生成一个元素值为x的新节点s 3.2 将s插入到p之后

析构函数template <class T>

LinkList<T>:: ~LinkList()

{

   Node<T> *q;

   while (first)

   {

       q=first->next;

       delete first;

       first=q;

    }

}

循环列表将单链表或者双链表的头尾结点链接起来,就是一个循环链表。
不增加额外存储花销,却给不少操作带来了方便
从循环表中任一结点出发,都能访问到表中其他结点。
template <class T> class CycleLinkList{ public: CycleLinkList( ); CycleLinkList(T a[ ], int n); CycleLinkList(T a[ ], int n,int i); ~CycleLinkList(); int Length(); T Get(int i); void Insert(int i, T x); T Delete(int i); void PrintList( ); private: Node<T> *first; };
头插循环列表template <class T>  
CycleLinkList<T>:: CycleLinkList(T a[ ], int n,int k)
 {
    first=new Node<T>;   //生成头结点
first->next=first;
Node<T> *s;
for (int i=1; i<n; i++)
      s=new Node<T>; 
 s->data=a[i];  //为每个数组元素建立一个结点
      s->next=first->next;
 first->next=s;
}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值