广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
SIEMENS山东省德州市 西门子代理商——西门子华北一级总代理

环形链表初始化

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
































//初始化链表  ---函数中分配内存,需要传入二级指针  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个节点类似,后面的节点分配都是同样的循环操作:

分配最后1个节点



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

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

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

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


环形链表初始化完成

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



展开全文
相关产品
拨打电话 微信咨询 发送询价