ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据布局-2.单向链表的实现 [打印本页]

作者: 小小小幸运    时间: 2024-8-5 14:28
标题: 数据布局-2.单向链表的实现
节点布局体计划
  1. struct LinkNode
  2. {
  3.         // 数据域
  4.         void* data;
  5.         // 指针域
  6.         struct LinkNode * next;
  7. };
复制代码
链表布局体计划
  1. struct LList
  2. {
  3.         //头节点
  4.         struct LinkNode pHeader;
  5.         //链表长度
  6.         int m_size;
  7. };
复制代码
初始化链表
  1. LinkList init_LinkList()
  2. {
  3.         struct LList* myList = malloc(sizeof(struct LList));
  4.        
  5.         if (myList == NULL)
  6.         {
  7.                 return NULL;
  8.         }
  9.         myList->pHeader.data = NULL;
  10.         myList->pHeader.next = NULL;
  11.         myList->m_size = 0;
  12.         return myList;
  13. }
复制代码
插入链表
  1. void insert_LinkList(LinkList list, int pos, void* data)
  2. {
  3.         if (list == NULL)
  4.         {
  5.                 return;
  6.         }
  7.         if (data == NULL)
  8.         {
  9.                 return;
  10.         }
  11.         // 将list还原成struct LList数据类型
  12.         struct LList * myList = list;
  13.         if (pos <0 || pos > myList->m_size)
  14.         {
  15.                 //位置无效 强制尾插
  16.                 pos = myList->m_size;
  17.         }
  18.         //找到插入节点的前驱
  19.         struct LinkNode * pCurrent = &myList->pHeader;
  20.         for (int i = 0; i < pos; i++)
  21.         {
  22.                 pCurrent = pCurrent->next;
  23.         }
  24.         //创建新节点
  25.         struct LinkNode* newNode = malloc(sizeof(struct LinkNode));
  26.         newNode->data = data;
  27.         newNode->next = NULL;
  28.         //建立节点关系
  29.         newNode->next = pCurrent->next;
  30.         pCurrent->next = newNode;
  31.         //更新链表长度
  32.         myList->m_size++;
  33. }
复制代码
遍历链表
  1. void foreach_linkList(LinkList list,void(*myForeach)(void *))
  2. {
  3.         if (list == NULL)
  4.         {
  5.                 return;
  6.         }
  7.         struct LList* mylist = list;
  8.         struct LinkNode* pCurrent = mylist->pHeader.next;
  9.         for (int i = 0; i < mylist->m_size; i++)
  10.         {
  11.                 myForeach(pCurrent->data);
  12.                 pCurrent = pCurrent->next;
  13.         }
  14. }
复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4