forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-05-06 64cf4a779ef5c16c79bbbee27370169dc8d69499
Soft/linked_list.c
New file
@@ -0,0 +1,112 @@
#include "linked_list.h"
#include "stdlib.h"
ALARM_NODE_T * pList_head = NULL;
uint8_t alarm_list_cnt = 0;
///*Á´±íÍ·Êý¾Ý¹¹Ôì*/
//ALARM_NODE_T * Alarm_List_Node_HeadCreated(ALARM_NODE_T * pHead,SYS_ALARM_VALVE_T alarm_id)
//{
//   if(pHead->list_data == AV_NORMAL && pHead->alarm_list_next == NULL)
//   {
//      pHead->list_data = alarm_id;
//   }
//   return pHead;
//}
/*ÉêÇ붯̬Á´±í¿Õ¼ä*/
ALARM_NODE_T * Alarm_List_Node_Add(SYS_ALARM_VALVE_T alarm_id)
{
   ALARM_NODE_T * ptr = (ALARM_NODE_T * )malloc(ALARM_LIST_NODE_LEN);
   if(ptr != NULL)
   {
      ptr->list_data = alarm_id;
      ptr->alarm_list_next = NULL;
      return ptr;
   }
   return NULL;
}
//µ¥Á´±íβ²å
//Ë«ÖØÖ¸Õ룺ָÏòÖ¸ÕëµÄÖ¸Õ룬Èç¹ûÐè¸Ä±äÖ¸ÕëµØÖ·µÄÖµ£¬Ôò¿ÉÓÃË«ÖØÖ¸Õë
void Alarm_List_Node_PushBack(ALARM_NODE_T ** ppList,SYS_ALARM_VALVE_T alarm_id)
{
   if(alarm_id != ALARM_ID_NORMAL)
   {
      alarm_list_cnt++;
      if(*ppList == NULL)
      {
         *ppList = Alarm_List_Node_Add(alarm_id);
      }
      else
      {
         ALARM_NODE_T * tail = *ppList;
         while(tail->alarm_list_next)
            tail = tail->alarm_list_next;
         tail->alarm_list_next = Alarm_List_Node_Add(alarm_id);
      }
   }
}
//µ¥Á´±íµÄβɾ
void Alarm_List_Node_PopBack(ALARM_NODE_T ** ppList)
{
   ALARM_NODE_T * tail = *ppList;
   while (tail->alarm_list_next->alarm_list_next)
   {
      tail = tail->alarm_list_next;
   }
   free(tail->alarm_list_next);
   tail->alarm_list_next = NULL;
}
////µ¥Á´±í²éÕÒ
//ALARM_NODE_T * Alarm_List_Node_Find(ALARM_NODE_T * pList,SYS_ALARM_VALVE_T alarm_id)
//{
//   ALARM_NODE_T * cur_ptr = pList;
//   while(cur_ptr)
//   {
//      if(cur_ptr->list_data == alarm_id)
//         return cur_ptr;
//      cur_ptr = cur_ptr->alarm_list_next;
//   }
//   return NULL;
//}
//µ¥Á´±íÖмäɾ³ý
void Alarm_List_Node_Deleted(ALARM_NODE_T ** ppHeadList,SYS_ALARM_VALVE_T alarm_id)
{
   if(alarm_id != ALARM_ID_NORMAL)
   {
      ALARM_NODE_T * last_ptr,* now_ptr;
      if(*ppHeadList == NULL)
         return;
      else
      {
         now_ptr = *ppHeadList;
         while(now_ptr->alarm_list_next != NULL && now_ptr->list_data != alarm_id)
         {
            last_ptr = now_ptr;
            now_ptr = now_ptr->alarm_list_next;
         }
         if(now_ptr->list_data == alarm_id)
         {
            alarm_list_cnt--;
            if(now_ptr == *ppHeadList)
               *ppHeadList = now_ptr->alarm_list_next;
            else
               last_ptr->alarm_list_next = now_ptr->alarm_list_next;
            free(now_ptr);
            now_ptr = NULL;
         }
      }
   }
}