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

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

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

详细介绍
环形链表初始化

 环形链表的初始化过程如下:
































  • //初始化链表  ---函数中分配内存,需要传入二级指针  void init_list(stData **pList, int len){    int i=0;    stData *pTmp1 = NULL; //临时指针1    stData *pTmp2 = NULL; //临时指针2
       //先为环形链表分配一个节点的内存    *pList=(stData*)malloc(sizeof(stData));    (*pList)->data=0;    (*pList)->pNext=NULL;
       //再为剩余的链表元素分配内存    pTmp1 = *pList; //临时指针1指向环形链表的头    for(i=0;i<len-1;i++){        //临时指针2用于逐个申请内存        pTmp2=(stData*)malloc(sizeof(stData));        pTmp2->data=0;        pTmp2->pNext=NULL;
           //临时指针1的next指向刚分配内存的临时指针2        pTmp1->pNext=pTmp2;        //然后临时指针1再指向临时指针2        pTmp1=pTmp2;        //printf("init_list i---%d\r\n",i);}
       //整个链表长度都分配好内存后,临时指针1再指向链表头,这样就构成了一个环形链表      pTmp1->pNext = *pList;}

     基本思路是:

  • 首先分配第一个节点,这也是整个环形链表的地址,即pList的指向

  • 然后使用两个临时指针,pTmp1用于连接各个节点(指定各节点的pNext指针指向下一个),pTmp2用于不断分配下一个节点的内存

  • 分配第1个节点







  • //先为环形链表分配一个节点的内存 *pList=(stData*)malloc(sizeof(stData));(*pList)->data=0;(*pList)->pNext=NULL;
    pTmp1 = *pList; //临时指针1指向环形链表的头

            第一个节点的内存先通过pList指针分配,然后临时指针pTmp1也先指向这个节点:

    分配第2个节点













  • for(i=0;i<len-1;i++){    //临时指针2用于逐个申请内存    pTmp2=(stData*)malloc(sizeof(stData));    pTmp2->data=0;    pTmp2->pNext=NULL;
       //临时指针1的next指向刚分配内存的临时指针2    pTmp1->pNext=pTmp2;    //然后临时指针1再指向临时指针2    pTmp1=pTmp2;}

  • pTmp2先分配一个节点内存

  • pTmp1使第1节点的pNext指向第2个节点

  • pTmp1再指向第2个节点,为下一次作准备

  • 分配第3个节点

    与分配第2个节点类似,后面的节点分配都是同样的循环操作:

    分配Zui后1个节点



  • //整个链表长度都分配好内存后,临时指针1再指向链表头,这样就构成了一个环形链表  pTmp1->pNext = *pList;

    例子中环形链表的长度为5,因此分配第5个之后,会退出循环,然后:

  • 将pTmp1的pNext指向pList,这样就构成了一个环形链表

  • 链表初始化函数退出后,两个临时指针也会被自动释放


  • 环形链表初始化完成

            初始化完成后的效果如下,一个5个节点,构成了一个环形,且初始状态,头节点与尾节点均指向pList指向的节点:



    相关产品

    联系方式

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