加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161

SIEMENS山东省聊城市 西门子代理商——西门子华北一级总代理

更新时间
2024-11-16 07:00:00
价格
请来电询价
西门子总代理
PLC
西门子一级代
驱动
西门子代理商
伺服电机
联系电话
15903418770
联系手机
15915421161
联系人
张经理
立即询价

详细介绍
查询环形链表中有效数据的长度

        链表初始化后各节点的数据均为0,查询环形链表中有效数据的长度,用于指示在向链表写入数据时,头指针与尾指针是否需要移动,然后在合适的位置写入新的数据,以及用于在数据使用的是否,只有链表数据满了之后,才对整个环形链表中的数据进行使用。

















//查询当前链表中数据的长度 -----初始时pHead = pTail = pList static int check_list_isfull(stData *pHead,stData *pTail){    int cnt = 0;    stData *pTmp = NULL; //临时指针    if(pHead==NULL||pTail==NULL) return -1;
   pTmp = pHead;//临时指针指向头指针    while(pTmp!=pTail && pTmp!=NULL)//计算的是pHead到pTail间的距离    {        cnt++;//开始存入第1个数据之后,pHead与pTail不会再次指向同一节点,所以cntZui大是(LIST_LEN-1)        pTmp=pTmp->pNext;    }
   return cnt;}

        基本思路是:首先使用一个临时指针指向头节点指向的节点,然后判断该节点是否是尾节点指向的节点。

链表刚初始时

        环形链表刚初始化时,有效数据为0个:

写入1个数据后

        写入1个数据后,尾指针向后移动一个节点,此时查询有效数据为1:

写入4个数据后

        写入4个数据后,此时查询有效数据为4,之后若再写入1个数据,环形链表的有效数据就满了


3环形链表写入数据






























//添加数据到链表  ---函数中需要改变指针的指向,也要传入二级指针  int add_data2list(stData **pHead,stData **pTail, float val){    int ret = -1;    int cnt = 0;    stData *pTmp = NULL; //临时指针    if(pHead==NULL||pTail==NULL) return -1;
   cnt = check_list_isfull(*pHead, *pTail);    //printf("......cnt:%d\r\n",cnt);    if((LIST_LEN-1) == cnt)//只剩一个可以存了 (或是pTail已经绕了一圈与pHead相邻了){        //则 pHead向后移动一个        *pHead = (*pHead)->pNext;        ret = 0;//表示环形链表存满了(虽然现在还剩一个位置,但本函数退出前会将这个位置填入数据) }    else{        ret = -1;//表示环形链表中的数据还未添满 }
   //临时指针指向尾指针,并填入数据,即在环形链表的尾部更新了一个数据    pTmp=(*pTail);    pTmp->data=val;
   *pTail=(*pTail)->pNext;//pTail向后移动一个
   return ret;}

基本思路是:

通过check_list_isfull()函数检查当前链表中有效数据的个数

若有效数据的个数是(LIST_LEN-1),则将头指针向后移动一个几点,且该函数Zui终返回0,表示此次添加数据后,链表数据为满的状态

若有效数据的个数少于(LIST_LEN-1),即刚开始向链表中写入数据的阶段,则该函数Zui终返回-1,表示此次写入数据后链表未满

将临时指针pTmp指向尾节点pTail指向的节点,并将数据写入该节点

尾节点pTail指向下一个节点

下次写入数据时按照上面过程循环执行

写入第1个数据

写入第1个数据分3步:

pTmp指向尾节点pTail指向的节点

为该节点写入数据

pTail指向下一个节点

写入第2个数据

        步骤与写入第1个数据类似:

写入第4个数据

        步骤也与写入第1个数据类似:

写入第5个数据

      第5个数据,也是环形链表种的Zui后1个数据。

      注意此时环形链表数据已满,头指针pHead开始它的第1次向后移动:

check_list_isfull()判断为满,pHead指向下一个节点

临时指针pTmp指向pTail指向的节点

为该节点写入数据

pTail指向下一个节点

-

写入第6个数据

        第6个数据,则需要覆盖写入到环形链表中的第1个数据。

        其步骤实际与写入第5个数据类似,并且之后数据的写入,都与次步骤类似。



相关产品

联系方式

  • 电  话:15903418770
  • 联系人:张经理
  • 手  机:15915421161
  • 微  信:15915421161