标题:求助~~
只看楼主
alinwei88
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-8
 问题点数:0 回复次数:2 
求助~~
写出以下链表操作的算法
创建一个空的双向循环链表
status CreateList_Dul(DuLinkList &L);
取得双向循环链表中第i个数据元素的位置指针
status GetElemP_Dul(DuLinkList L, int i);
将单链表置逆
status ReverseList_L(LinkList &L);
搜索更多相关主题的帖子: status 元素 
2008-10-09 19:22
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
得分:0 
以下代码构造一个带附加头结点的双向链表:

/////////////////////////////////////////////////////////////
//构造函数
/////////////////////////////////////////////////////////////
template<class T>
DblList<T>::DblList<T>(T uniqueVal)
{
    //建立一个附加头结点,uniqueVal用于存放一些特殊用途的数
    first=new DblNode<T>(uniqueVal);
    if(first==NULL)
    {
        cerr<<"内存分配出错!"<<endl;
        exit(1);
    };
    //置为只含附加头结点的空链表
    first->lLink=first->rLink=first;
};
/////////////////////////////////////////////////构造函数结束

以下代码逆转一个链表的所有指针:

/////////////////////////////////////////////////////////////
//reverseList()函数
//逆转单链表
/////////////////////////////////////////////////////////////
template<class T>
void List<T>::reverseList()
{
    if(first==NULL)
    {
        cout<<"链表为空!"<<endl;
        exit(1);
    };
    if(first->link==NULL)
    {
        cout<<"链表中只有一个元素!";
        exit(1);
    }
    LinkNode<T>* pre;
    LinkNode<T>* p;
    LinkNode<T>* next;
    pre=first;
    p=first->link;
    next=first->link;
    
    while(p!=NULL)
    {
        //指向断点后的第二个结点
        next=next->link;
        //让断点后的第一个结点的指针域指向
        //断点前的最后一个结点
        p->link=pre;
        //pre向后推进一格
        pre=p;
        //p和next指向断点后的第一个结点
        p=next;
    }
    //把逆转后的尾结点(即原来的头结点)
    //的指针域设为NULL
    first->link=NULL;
    //显示逆转后的的链表的所有元素
    //因为本链表在逆转前是含有附加头结点的、
    //所以反向遍历的时候可以不用遍历附加头结点
    while(pre->link!=NULL)
    {
        cout<<pre->data<<" ";
        pre=pre->link;
    }
    cout<<endl;
}
////////////////////////////////////////reverseList()函数结束

得到双向链表第i个元素的指针(有左右之分)

/////////////////////////////////////////////////////////////
//Locate()函数
//在得到序号为i的结点的指针,d=0按前驱方向,d!=0按后继方向
/////////////////////////////////////////////////////////////
template<class T>
DblNode<T>* DblList<T>::Locate(int i,int d)
{
    //游标
    DblNode<T>* ptr=first;

    //越界情况处理
    if(i<0||i>Length())
    {
        cout<<"给出的序号越界!"<<endl;
        exit(1);
    };

    //如果不越界
    //如果按前驱遍历
    if(d==0)
    {
        for(int k=0;k<i;k++)
        {
            //指针向左推进一格
            ptr=ptr->lLink;
        }
        return ptr;
    }
    //如果按后继遍历
    else
    {
        for(int k=0;k<i;k++)
        {
            //指针向右推进一格
            ptr=ptr->rLink;
        }
        return  ptr;
    }
};
/////////////////////////////////////////////Locate()函数结束
2008-10-09 19:34
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
得分:0 

2008-10-09 22:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-237264-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019631 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved