C++数据结构之链表

来源:互联网 发布:彩妆淘宝店找货源 编辑:程序博客网 时间:2024/06/06 20:31

C++数据结构------链表

体会引用的强大,

定义一个Node 存放一个data和指向下一个节点的指针next;

定义一个类 存放链表的头指针

      typedef int T;      struct Node{      T data;       Node* next;       Node(const T& d=T()):data(d),next(NULL){}};class List{          Node* head;};


插入删除一个节点:获取某个成员的成员指针,引用!

经典insert&&getptr函数:

 

    Node*&  List::getptr(int pos)//返回第K个成员的成员指针引用!      {     if(pos>size()||pos<0) return head;     if(pos==0)  return head;      Node* p=head;      for(int i=1;i<pos;i++)      {        p=p->next;      }      return  (*p).next;      }       void List::insert(const T& d,int pos)       {          Node*& pn = getptr(pos);//注意引用!一直引用!          Node* p=new Node(d);          p->next = pn->next;          pn=p;      }

链表提供增删查改功能,注意内存释放clear()

  void List::clear()  {  while(head)        {          Node* p=head->next;          delete head;          head=p;            }   }


  删除节点:

        假设删除第K个节点,getptr()获得指向第K个节点的指针的引用pn,

        ptemp=pn;

        delete ptemp;//释放第K个节点.

        pn=pn->next;

  倒置一个链表:

       我的算法:开辟数组Node* ptr[size()],遍历链表依次将各个指向节点的指针存放到数组中,循环交换 size()/2 次节点的data。

      Node* ptr[len];      for(i=1;i<len;i++)       ptr[i]=ptr->next;      for(i=0;i<len/2;i++)       SWAP(ptr[i]->data,ptr[len-i-1]->data); 

   SWAP交换实现:int a,b;a^=b;b^=a;a^=b;巧用异或运算。


   


0 0
原创粉丝点击