• 双向链表的查找与删除


    双向链表的查找工作

    解析:

    使用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);

  • 相关阅读:
    提高代码质量:如何编写函数
    如何写自我评价
    写简历注意事项
    Android开发注意细节
    Android:onNewIntent()触发机制及注意事项
    Atom与markdown
    Java程序性能优化总结
    Java中的继承与组合
    Fragment生命周期总结
    C# 生成随机姓名
  • 原文地址:https://www.cnblogs.com/hai5111/p/6228518.html
Copyright © 2020-2023  润新知