数据结构:链表2

双链表

构造前因:

单链表的主要不足之处是:link字段仅仅指向后继结点,不能有效地找到前驱

双链表弥补了上述不足之处增加一个指向前驱的指针

双链表的结点结构:

前驱指针域llink+数据域data+后继指针域rlink

 

template <class T>

struct  DNode{

T  data;

DNode<T> *llink;

 DNode <T>*rlink;

};

 

双链表构建空表:

template <class T>

DoubleLink <T>::DoubleLink(){

head=new Node<T>;

head->rlink=NULL;

head->llink=NULL;

}

 

双链表析构函数:

template <class T>

DoubleLink<T>::~DoubleLink(){

Node<T>  *p,*q;

p=head;

while(p)

{

q=p->rlink;

delete p;

p=q;

}

}

 

 

双链表头插法:

template <class T>

void DoubleLink<T>::Append(T data){

      Node<T> *s;

      s=new Node<T>;

       s->data=data;

s->rlink=head->rlink;

head->rlink=s;

s->llink=head;

if (s->rlink)

s->rlink->llink=s;

return;

}

 

双链表遍历:

template <class T>

void DoubleLink<T>::Display(){

Node <T> *p;

p=head->rlink;

while(p) {

cout<<p->data<<"   ";

p=p->rlink;

}

cout<<endl;

return;

}

删除p:

         p->llink->rlink=p->rlink;

         p->rlink->llink=p->rlink;  

         delete(p);

循环链表

循环链表:将链表的头尾结点链接起来

构建空表:

template <class T>CycleLinkList<T>:: CycleLinkList( ){         

first=new Node<T>;

first->next=first;   //first的指针指向first  形成循环

}

 

尾插法构建循环链表只需将尾插法构建单链表最后尾指针指向first

头插法构建循环链表只需将尾插法构建空链表时的初始化单链表的first->next=NULL改为指向first

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值