加入收藏 | 设为首页 | 会员中心 | 我要投稿 莱芜站长网 (https://www.0634zz.com/)- 云连接、建站、智能边缘云、设备管理、大数据!
当前位置: 首页 > 综合聚焦 > Linux > 正文

用Linux内核链表实现DTLib中的双向循环链表

发布时间:2023-02-20 10:28:44 所属栏目:Linux 来源:互联网
导读:本篇内容介绍了如何用Linux内核链表来实现DTLib中的双向循环链表的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 继承关系如下图所示 如何用Linux内核

          bool ret = true;
   
          i = mod(i);
   
          ret = ((0 <= i) && (i < this->m_length));
   
          if( ret )
          {
              e = list_entry(position(i)->next, Node, head)->value;
          }
   
          return ret;
      }
   
      int find(const T& e) const
      {
          int ret = -1;
          int i = 0;
          list_head* slider = NULL;
   
          list_for_each(slider, &m_header)
          {
              if( list_entry(slider, Node, head)->value == e )
              {
                  ret = i;
                  break;
              }
   
              i++;
          }
   
          return ret;
      }
   
      int length() const
      {
          return this->m_length;
      }
   
      void clear()
      {
          while( this->m_length > 0 )
          {
              remove(0);
          }
      }
   
      bool move(int i, int step = 1)
      {
          bool ret = (step > 0);
   
          i = mod(i);
   
          ret = ret && ((0 <= i) && (i < this->m_length));
   
          if( ret )
          {
              m_current = position(i)->next;
   
              this->m_step = step;
          }
   
          return ret;
      }
   
      bool end()
      {
          return (m_current == NULL) || (this->m_length == 0);
      }
   
      T current()
      {
          if( !end() )
          {
              return list_entry(m_current, Node, head)->value;
          }
          else
          {
              THROW_EXCEPTION(INvalidOPerationException, "No value at current position ...");
          }
      }
   
      bool next()
      {
          int i = 0;
   
          while( (i < this->m_step) && !end() )
          {
              if( m_current != &m_header )
              {
                  m_current  = m_current->next;
                  i++;
              }
              else
              {
                  m_current = m_current->next;
              }
          }
   
          if( m_current == &m_header )
          {
              m_current = m_current->next;
          }
   
          return (i == this->m_step);
      }
   
      bool pre()
      {
          int i =0;
   
          while( (i < this->m_step) && !end() )
          {
              if( m_current != &m_header )
              {
                  m_current  = m_current->next;
                  i++;
              }
              else
              {
                  m_current = m_current->prev;
              }
          }
   
          if( m_current == &m_header )

(编辑:莱芜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读