读书人

链表有关问题有没有什么办法可以加快

发布时间: 2012-09-10 11:02:32 作者: rapoo

链表问题,有没有什么办法可以加快链表的创建速度呢?
如题

C/C++ code
  LISTNAME* ListCreat(int ListSpace){  LISTNAME*p1,*p2;        p1=p2=new LISTNAME;    if(ListSpace==1)    { p1->Next=NULL; p1->Last=NULL ;                 return p1;        }          if(ListSpace==2)        {            p1->Last=NULL;            p1->Next=p2;             p2->Last=p1;              p2->Next=NULL;               return p1;        }    int tmp=ListSpace;    LISTNAME* Head=new LISTNAME;         while(ListSpace!=0)         {                    if(ListSpace+1==tmp)                    { Head->Last=NULL;    Head->Next=p1; }                            {p1->Next=p2;                     p2->Last=p1;                     p2->Next=NULL;                    }    {p1=p2;      p2=NULL;//清空节点      p2=new Student;//开辟新的节点      ListSpace--;    }         }p2->Next=NULL;//再次设置p2    return Head;}//funtion endint main(){     Student* a;    Student* b;    a=ListCreat(20);//如果我把这行写成65535或者更大的数字,怎么样可以利用算法加快链表创建呢?    b=a;    for(;a!=NULL;)    {    cout<<a<<endl;       a=a->Next;       }    cout<<endl;        return 0;}


[解决办法]
楼上的没有搞清楚问题前,就不要急于下结论哦。

如果是一次性对链表进行创建,那么不妨一次性申请内存。
ListCreat(LIST_COUNT)
.....
new Student[LIST_COUNT] // -- 一次性申请足够的内存单元
.....
然后再构造一个list结构关系。

这样子就可以避免申请内存的往复消耗。链表的耗时很大的一个环节就在不停的node节点创建上面。你可以一次性完成这个耗时的过程,list的结构再勾搭起来就快多了。

试试看。

读书人网 >C++

热点推荐