zoukankan      html  css  js  c++  java
  • 双向链表的查找与删除

    双向链表的查找工作

    解析:

    使用next指针遍历,直到找到数据为data的节点,如果找到节点,返回节点,否则返回NULL;

    1. //查找节点,成功则返回满足条件的节点指针,否则返回NULL;
    2. Dbnode *FindNode(Dbnode *head,int data)
    3. {

          Dbnode *pnode=head;

          if(head==null)

            return NULL;

          while(pnode->next!=NULL &&pnode->data!=data)

            pnode=pnode->next;

          if(pnode->next==NULL)

            return NULL;

          return pnode;

        }

      在双向链表中节点p之前插入一个节点的操作运算如下(c描述):

        void DINSERT(DLINKLIST *p,Datatye x)

        {

          DLINKLIST *s;//插入节点

          s=(DLINKLIST *)malloc(sizeof(DLINKLIST));

          s->data=x;//存储数据x

          s->next=p;//s的next指针指向p

          p->prior->next=s;//p的前面的节点的next指向s

          s->prior=p->prior;//

          p->prior=s;

        }

    在双向链表中删除节点p:

      void DELETE(DLINKLIST *p)

      {

         p->prior->next=p->next;

         p->next-prior=p->prior; 

         free(p);

      }

      循环链表的许多操作都是在首尾位置进行的,因此使用指向循环链表末尾节点的指针来标志一个线性表,实现某些操作会更容易。使用rear来标志循环链表的末尾节点;例如:将俩个线性链表L1,L2合并成一个表时,使用设立尾指针的循环链表表示时,设表L1用rear1表示,L2为rear2表示,L2从L1末尾开始接,只需要下面五句话;

    p=rear1->next;q=rear2->next;rear1->next=q->next;rear2->next=p;free(q);

  • 相关阅读:
    详解java定时任务
    Java之Exception
    Java设计模式
    Java中的static关键字解析
    浅析Java中的final关键字
    深入理解Java的接口和抽象类
    一个故事讲清楚NIO
    Java并发编程:线程池的使用
    Java垃圾回收机制
    ubuntu sublime text 2 破解版
  • 原文地址:https://www.cnblogs.com/hai5111/p/6228518.html
Copyright © 2011-2022 走看看