{"id":551,"date":"2023-02-05T14:10:01","date_gmt":"2023-02-05T06:10:01","guid":{"rendered":"https:\/\/niuguodong.com\/?p=551"},"modified":"2025-12-24T22:42:06","modified_gmt":"2025-12-24T14:42:06","slug":"%e5%8a%a8%e6%80%81%e7%bb%84%e5%8c%85%e9%93%be%e8%a1%a8%e5%ba%93","status":"publish","type":"post","link":"https:\/\/niuguodong.com\/index.php\/2023\/02\/05\/%e5%8a%a8%e6%80%81%e7%bb%84%e5%8c%85%e9%93%be%e8%a1%a8%e5%ba%93\/","title":{"rendered":"\u52a8\u6001\u7ec4\u5305\u7a0b\u5e8f\uff08C\uff09"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u529f\u80fd\u7279\u6027<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u53ef\u5b58\u50a8\u4efb\u610f\u683c\u5f0f\u6570\u636e\n<ul class=\"wp-block-list\">\n<li>\u57fa\u7840\u7c7b\u578b\u6570\u636e\u4f7f\u75288\u5b57\u8282\u5b58\u50a8<\/li>\n\n\n\n<li>\u81ea\u5b9a\u4e49\u6784\u9020\u7c7b\u578b\u4f7f\u7528\u6307\u9488\uff08\u652f\u6301\u5f15\u7528\u4e0e\u5b9e\u4f53\u4e24\u79cd\u65b9\u5f0f\uff09<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u53ef\u81ea\u52a8\u6839\u636eid\u987a\u5e8f\u5c06\u6709\u6548\u6570\u636e\u6253\u5305<\/li>\n\n\n\n<li>\u53ef\u5b9a\u4f4d\u81ea\u6307\u5b9aid\u5f00\u59cb\u540e\u7684\u6700\u5927\u8fde\u7eedid<\/li>\n\n\n\n<li>\u53ef\u83b7\u53d6\u81ea\u6307\u5b9aid\u540e8\u4e2a\u8282\u70b9\u7684id\u7684\u8fde\u7eed\u60c5\u51b5<\/li>\n\n\n\n<li>\u53ef\u6839\u636eid\u6392\u5e8f<\/li>\n\n\n\n<li>\u53ef\u67e5\u8be2\u6307\u5b9aid\u8303\u56f4\u5185\u7684\u8282\u70b9\u6570\u91cf<\/li>\n\n\n\n<li>\u652f\u6301\u8ffd\u52a0\u3001\u63d2\u5165\uff08\u524d\u5411\uff0c\u540e\u5411\uff0c\u5934\uff0c\u5c3e\uff09\u3001\u5220\u9664<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u4ee3\u7801<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5934\u6587\u4ef6<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#ifndef MY_DS_H\n#define MY_DS_H\n\n#include &lt;stdint.h&gt;\n\n\n#define MY_D2LINK_LIST_ITEM_ITEM_NAME_USED  1\nstruct my_d2link_item\n{\n    int id;\n    #if MY_D2LINK_LIST_ITEM_ITEM_NAME_USED\n    char item_name&#91;32];\n    #endif\n    uint8_t data_type;\n    uint32_t data_len;\n    uint64_t data_uint64;\n    uint8_t p_data_type;\n    void* p_data;\n    struct my_d2link_item* next_item;\n    struct my_d2link_item* pri_item;\n};\ntypedef struct my_d2link_item my_d2link_item_t;\n\n#define MY_D2LINK_LIST_LIST_NAME_USED  1\ntypedef struct\n{\n    int list_item_num;\n    uint32_t list_data_len;\n    #if MY_D2LINK_LIST_LIST_NAME_USED\n    char list_name&#91;32];\n    #endif\n    my_d2link_item_t* first_item;\n    my_d2link_item_t* end_item;\n}my_d2link_t;\n\n\n\/**\n * @brief \u521b\u5efa\u4e00\u4e2a\u5143\u7d20\n * @param id \u5143\u7d20\u7684id,\u9700\u81ea\u5b9a\u4e49\n * @param p_data \u6570\u636e\u6307\u9488,\u53ef\u4e3aNULL(\u4e3aNULL\u65f6,p_data_type\u81ea\u52a8\u5931\u6548,\u4e14data_uint64\u6709\u6548)\n * @param p_data_type p_data\u7684\u7c7b\u578b,0:\u5f15\u7528(\u539f\u59cb\u6570\u636e\u4e0d\u53ef\u5220\u9664,\u5426\u5219\u5f15\u7528\u5931\u6548),1:\u62f7\u8d1d(\u539f\u6570\u636e\u53ef\u5220\u9664)\n * @param data_uint64 0-8\u5b57\u8282\u7684int\u578b\u6570\u636e\n * @param data_len p_data\u6216data_uint64\u4e2d\u5b9e\u9645\u6709\u6548\u7684\u6570\u636e\u957f\u5ea6, 0-sizeof(uint32_t), \u5355\u4f4dByte\n * @param item_name \u5143\u7d20\u540d\u79f0\n * @return \u975eNULL:\u6210\u529f, NULL:\u5931\u8d25\n *\/\nmy_d2link_item_t* My_D2Link_Create_Item(int id, void* p_data, uint8_t p_data_type, uint64_t data_uint64, uint32_t data_len, char* item_name);\n\n\/**\n * @brief \u521b\u5efa\u4e00\u4e2ap_data\u5143\u7d20\n * @param id \u8981\u8ffd\u52a0\u7684\u5143\u7d20\u7684id,\u9700\u81ea\u5b9a\u4e49\n * @param p_data \u6570\u636e\u6307\u9488\n * @param p_data_type p_data\u7684\u7c7b\u578b,0:\u5f15\u7528(\u539f\u59cb\u6570\u636e\u4e0d\u53ef\u5220\u9664,\u5426\u5219\u5f15\u7528\u5931\u6548),1:\u62f7\u8d1d(\u539f\u6570\u636e\u53ef\u5220\u9664)\n * @param data_len p_data\u4e2d\u6709\u6548\u6570\u636e\u957f\u5ea6, \u5355\u4f4dByte\n * @param item_name \u5143\u7d20\u540d\u79f0\n * @return \u975eNULL:\u6210\u529f, NULL:\u5931\u8d25\n *\/\nmy_d2link_item_t* My_D2Link_Create_Item_pt(int id, void* p_data, uint8_t p_data_type, uint32_t data_len, char* item_name);\n\n\/**\n * @brief \u521b\u5efa\u4e00\u4e2a\u5f15\u7528\u7c7b\u578b\u7684p_data\u5143\u7d20\n * @param id \u8981\u8ffd\u52a0\u7684\u5143\u7d20\u7684id,\u9700\u81ea\u5b9a\u4e49,\u4e0d\u53ef\u91cd\u590d\n * @param p_data \u6570\u636e\u6307\u9488\n * @param data_len p_data\u4e2d\u6709\u6548\u6570\u636e\u957f\u5ea6, \u5355\u4f4dByte\n * @param item_name \u5143\u7d20\u540d\u79f0\n * @return \u975eNULL:\u6210\u529f, NULL:\u5931\u8d25\n *\/\nmy_d2link_item_t* My_D2Link_Create_Item_pt_ref(int id, void* p_data, uint32_t data_len, char* item_name);\n\n\/**\n * @brief \u521b\u5efa\u4e00\u4e2a\u5b9e\u4f53\u7c7b\u578b\u7684p_data\u5143\u7d20\n * @param id \u8981\u8ffd\u52a0\u7684\u5143\u7d20\u7684id,\u9700\u81ea\u5b9a\u4e49,\u4e0d\u53ef\u91cd\u590d\n * @param p_data \u6570\u636e\u6307\u9488\n * @param data_len p_data\u4e2d\u6709\u6548\u6570\u636e\u957f\u5ea6, \u5355\u4f4dByte\n * @param item_name \u5143\u7d20\u540d\u79f0\n * @return \u975eNULL:\u6210\u529f, NULL:\u5931\u8d25\n *\/\nmy_d2link_item_t* My_D2Link_CreateItem_pt_ent(int id, void* p_data, uint32_t data_len, char* item_name);\n\n\/**\n * @brief \u521b\u5efa\u4e00\u4e2a0-8\u5b57\u8282\u7684int\u5143\u7d20\n * @param id \u8981\u8ffd\u52a0\u7684\u5143\u7d20\u7684id,\u9700\u81ea\u5b9a\u4e49,\u4e0d\u53ef\u91cd\u590d\n * @param data_uint64 0-8\u5b57\u8282\u4ee5\u5185\u6570\u636e\n * @param data_len data_uint64\u4e2d\u5b9e\u9645\u6709\u6548\u7684\u6570\u636e\u957f\u5ea6, 0-sizeof(uint32_t), \u5355\u4f4dByte\n * @param item_name \u5143\u7d20\u540d\u79f0\n * @return \u975eNULL:\u6210\u529f, NULL:\u5931\u8d25\n *\/\nmy_d2link_item_t* My_D2Link_Create_Item_int(int id, uint64_t data_uint64, uint32_t data_len, char* item_name);\n\n\/**\n * @brief \u5411my_d2link_t\u53cc\u5411\u94fe\u8868\u4e2d\u8ffd\u52a0\u4e00\u4e2a\u5143\u7d20\n * @param p_list \u94fe\u8868\u6307\u9488\n * @param newitem \u65b0\u5143\u7d20\u6307\u9488\n * @return 0:\u6210\u529f, -1:p_list\u65e0\u6548, -2:newitem\u65e0\u6548, -3:item-&gt;id\u91cd\u590d\n *\/\nint My_D2Link_Append_Item(my_d2link_t* p_list, my_d2link_item_t* newitem);\n\n\/**\n * @brief \u76f4\u63a5\u5411\u53cc\u5411\u94fe\u8868\u4e2d\u8ffd\u52a0\u4e00\u4e2a\u5143\u7d20\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param id \u8981\u8ffd\u52a0\u7684\u5143\u7d20\u7684id,\u9700\u81ea\u5b9a\u4e49,\u4e0d\u53ef\u91cd\u590d\n * @param p_data \u6570\u636e\u6307\u9488,\u53ef\u4e3aNULL(\u4e3aNULL\u65f6,p_data_type\u81ea\u52a8\u5931\u6548,\u4e14data_uint64\u6709\u6548)\n * @param p_data_type p_data\u7684\u7c7b\u578b,0:\u5f15\u7528(\u539f\u59cb\u6570\u636e\u4e0d\u53ef\u5220\u9664,\u5426\u5219\u5f15\u7528\u5931\u6548),1:\u62f7\u8d1d(\u539f\u6570\u636e\u53ef\u5220\u9664)\n * @param data_uint64 \u5f53p_data==NULL\u65f6\u6709\u6548\n * @param data_len p_data\u6216data_uint64\u4e2d\u5b9e\u9645\u6709\u6548\u7684\u6570\u636e\u957f\u5ea6, 0-sizeof(uint32_t), \u5355\u4f4dByte\n * @param item_name \u5143\u7d20\u540d\u79f0\n * @return 0:\u6210\u529f, -1:p_list\u4e0d\u5b58\u5728, -2:id\u91cd\u590d, -3:\u65b0\u5143\u7d20\u8282\u70b9\u5185\u5b58\u7533\u8bf7\u5931\u8d25\n *\/\nint My_D2Link_Create_And_Append_Item(my_d2link_t* p_list, int id, void* p_data, uint8_t p_data_type, uint64_t data_uint64, uint32_t data_len, char* item_name);\n\n\/**\n * @brief \u5411\u53cc\u5411\u94fe\u8868\u4e2d\u63d2\u5165\u4e00\u4e2a\u5143\u7d20\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param insert_direct \u63d2\u5165\u65b9\u5411, 0:\u63d2\u5165insert_id\u4e4b\u524d, 1:\u63d2\u5165insert_id\u4e4b\u540e, -1:\u63d2\u5165p_list\u5934\u90e8, -2:\u63d2\u5165p_list\u5c3e\u90e8\n * @param insert_id \u94fe\u8868\u4e2d\u5df2\u6709\u7684\u5143\u7d20id,\u4ece\u8be5\u4f4d\u7f6e\u63d2\u5165\n * @return 0:\u6210\u529f, -1:p_list\u65e0\u6548, -2:newitem\u65e0\u6548, -3:item-&gt;id\u91cd\u590d\n * @note \u5982\u679c\u672a\u627e\u5230insert_id, \u5219\u4f1a\u8ffd\u52a0\u5230p_list\u5c3e\u90e8\n *\/\nint My_D2Link_Insert_Item(my_d2link_t* p_list, int insert_direct, int insert_id, my_d2link_item_t* newitem);\n\n\/**\n * @brief \u4ece\u53cc\u5411\u94fe\u8868\u4e2d\u5220\u9664\u6307\u5b9aid\u7684\u5143\u7d20\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param id \u8981\u5220\u9664\u7684\u5143\u7d20\u7684id\n * @return 0:\u6210\u529f, -1:\u94fe\u8868\u4e0d\u5b58\u5728, 1:\u94fe\u8868\u957f\u5ea6\u4e3a0, 2:\u672a\u627e\u5230\u5bf9\u5e94id\u7684\u5143\u7d20\n *\/\nint My_D2Link_Delete_Item(my_d2link_t* p_list, int id);\n\n\/**\n * @brief \u5220\u9664\u94fe\u8868\n * @param p_list \u94fe\u8868\u6307\u9488\n *\/\nint My_D2Link_Delete(my_d2link_t** p_list);\n\n\/**\n * @brief \u4ece\u6307\u5b9amy_d2link_t\u94fe\u8868\u4e2d\u7edf\u8ba1\u5728\u67d0\u4e2aid\u533a\u95f4\u5185\u6709\u591a\u5c11\u5143\u7d20,\u95ed\u533a\u95f4\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param id_begin \u8d77\u59cbid\n * @param id_end \u7ed3\u675fid\n * @return -1:\u94fe\u8868\u4e0d\u5b58\u5728, -2:\u7a7a\u94fe\u8868, &gt;=0:\u5339\u914d\u5230\u7684\u5143\u7d20\u4e2a\u6570\n * @note id_begin\u4e0eid_end\u5927\u5c0f\u5173\u7cfb\u65e0\u9650\u5236,\u5982\u679c\u8d85\u51fa\u5b9e\u9645\u5b58\u5728\u7684id\u8303\u56f4,\u5219\u4f1a\u81ea\u52a8\u6309\u5b9e\u9645\u622a\u53d6\n *\/\nint My_D2Link_match_id_count_statistic(my_d2link_t* p_list, int id_begin, int id_end);\n\n\/**\n * @brief \u5c06\u6307\u5b9amy_d2link_t\u4e2d\u7684\u6709\u6548\u6570\u636e\u6253\u5305\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param saving \u6253\u5305\u540e\u7684\u5b58\u50a8\u533a\u6307\u9488\n * @param saving_len saving\u5b58\u50a8\u533a\u5927\u5c0f\n * @return 0:\u6210\u529f, -1:\u94fe\u8868\u4e0d\u5b58\u5728, -2:saving\u65e0\u6548, -3:\u7a7a\u94fe\u8868, -4:saving_len\u8fc7\u5c0f(\u5c0f\u4e8e\u94fe\u8868\u6570\u636e\u5927\u5c0f), 1:\u90e8\u5206\u6210\u529f\n *\/\nint My_D2Link_Data_Packer(my_d2link_t* p_list, void* saving, uint32_t saving_len);\n\n\/**\n * @brief \u5c06\u6307\u5b9amy_d2link_t\u4e2d\u7684\u6709\u6548\u6570\u636e\u6839\u636eid\u987a\u5e8f\u6253\u5305\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param saving \u6253\u5305\u540e\u7684\u5b58\u50a8\u533a\u6307\u9488\n * @param saving_len saving\u5b58\u50a8\u533a\u5927\u5c0f\n * @param direct 0:\u6839\u636eid\u4ece\u5c0f\u5230\u5927\u6253\u5305, 1:\u6839\u636eid\u4ece\u5927\u5230\u5c0f\u6253\u5305(\u6682\u672a\u5b9e\u73b0)\n * @return 0:\u6210\u529f, -1:\u94fe\u8868\u4e0d\u5b58\u5728, -2:saving\u65e0\u6548, -3:\u7a7a\u94fe\u8868, -4:saving_len\u8fc7\u5c0f(\u5c0f\u4e8e\u94fe\u8868\u6570\u636e\u5927\u5c0f), 1:\u90e8\u5206\u6210\u529f\n *\/\nint My_D2Link_Data_Packer_accordingID(my_d2link_t* p_list, void* saving, uint32_t saving_len, uint8_t direct);\n\n\/**\n * @brief \u5728\u6307\u5b9amy_d2link_t\u4e2d\u4ece\u6307\u5b9aid\u5f00\u59cb,\u5bfb\u627e\u6700\u5927\u7684\u8fde\u7eedid\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param start_id \u8d77\u59cbid\n * @return -1:\u94fe\u8868\u4e0d\u5b58\u5728, -2:\u7a7a\u94fe\u8868, \u5176\u4ed6:\u5339\u914d\u6210\u529f\u8fd4\u56de\u6700\u5927\u8fde\u7eedid+1\n * @note start_id\u4e0d\u9650\u5b9aid\u8303\u56f4,\u5982\u679c\u7ed9\u51fa\u4e0d\u5b58\u5728\u7684id,\u4f1a\u8fd4\u56de\u8be5\u4e0d\u5b58\u5728\u7684id\n *\/\nint My_D2Link_GetItem_ContinousMaxId_next(my_d2link_t* p_list, int start_id);\n\n\/**\n * @brief \u5728\u6307\u5b9amy_d2link_t\u4e2d\u4ece\u6307\u5b9aid\u5f00\u59cb,\u67e5\u8be2\u4ece\u8be5id\u5f00\u59cb\u7684\u540e8\u4e2aid\u7684\u8fde\u7eed\u60c5\u51b5\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param start_id \u8d77\u59cbid\n * @param end_id end_id&lt;=start_id:\u5c3e\u90e8\u4e0d\u586b\u51451, end_id&gt;start_id:\u5c3e\u90e8\u586b\u51451\n * @return -1:\u94fe\u8868\u4e0d\u5b58\u5728, -2:\u7a7a\u94fe\u8868, 0x00-0xff:\u6210\u529f\n *\/\nint My_D2Link_GetItem_ContinousDistribution_8_ByCurId(my_d2link_t* p_list, int start_id, int end_id);\n\n\/**\n * @brief \u521b\u5efa\u4e00\u4e2amy_d2link_t\u7c7b\u578b\u94fe\u8868\n * @param list_name \u94fe\u8868\u540d\u79f0\n * @return \u94fe\u8868\u6307\u9488\n *\/\nmy_d2link_t* My_D2Link_Creat(char* list_name);\n\n\/**\n * @brief \u521b\u5efa\u4e00\u4e2amy_d2link_t\u7c7b\u578b\u94fe\u8868\n * @param p_list \u6253\u5370\u94fe\u8868\n * @return 0:\u6210\u529f, -1:\u94fe\u8868\u4e0d\u5b58\u5728, -2:\u7a7a\u94fe\u8868\n *\/\nint My_D2Link_PrintList(my_d2link_t* p_list);\n\n\/**\n * @brief \u83b7\u53d6my_d2link_t\u94fe\u8868\u6307\u5b9aid\u7684\u5143\u7d20\u8282\u70b9\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param id \u6307\u5b9aid\n * @return NULL:\u5931\u8d25, \u5176\u4ed6:\u6210\u529f\n *\/\nvoid* My_D2Link_GetItem_Storage_ById(my_d2link_t* p_list, int id);\n\n\/**\n * @brief \u6839\u636eid\u5927\u5c0f\u6392\u5e8f\u94fe\u8868\u5143\u7d20\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param direct 0:\u4ece\u5c0f\u5230\u5927\u6392\u5e8f, 1:\u4ece\u5927\u5230\u5c0f\u6392\u5e8f\n * @return 0:\u6210\u529f, -1:\u5931\u8d25\n *\/\nint My_D2Link_Data_Sort_Data_accordingID(my_d2link_t* p_list, uint8_t direct);\n\n\/**\n * @brief \u5728\u94fe\u8868\u4e2d\u83b7\u53d6id\u6700\u5c0f\u7684\u5143\u7d20\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @return \u975eNULL:\u6210\u529f, NULL:\u5931\u8d25\n *\/\nvoid* My_D2Link_GetItem_MinId(my_d2link_t* p_list);\n\n\/**\n * @brief \u5728\u94fe\u8868\u4e2d\u83b7\u53d6id\u6700\u5927\u7684\u5143\u7d20\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @return \u975eNULL:\u6210\u529f, NULL:\u5931\u8d25\n *\/\nvoid* My_D2Link_GetItem_MaxId(my_d2link_t* p_list);\n\n\/**\n * @brief \u5728\u94fe\u8868\u4e2d\u83b7\u53d6\u6bd4\u6307\u5b9a\u5143\u7d20id\u5927\u7684\u76f8\u90bb\u5143\u7d20\n * @param p_list \u6307\u5b9a\u4e00\u4e2amy_d2link_t\u94fe\u8868\n * @param p_item my_d2link_item_t\u7c7b\u578b\u5143\u7d20\n * @return NULL:\u5931\u8d25, \u5176\u4ed6:\u6210\u529f\n * @note \u5982\u679cp_item\u5df2\u7ecf\u662f\u6700\u5927\u7684id\u9879,\u5219\u8fd4\u56deNULL\n *\/\nvoid* My_D2Link_GetItem_IdGreaterThan(my_d2link_t* p_list, my_d2link_item_t* p_item);\n\n\n#endif<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5177\u4f53\u5b9e\u73b0<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"my_ds.h\"\n\n#include &lt;stdio.h&gt;\n#include &lt;string.h&gt;\n#include &lt;stdlib.h&gt;\n\n\nmy_d2link_item_t* My_D2Link_Create_Item(int id, void* p_data, uint8_t p_data_type, uint64_t data_uint64, uint32_t data_len, char* item_name)\n{\n    my_d2link_item_t* newitem = NULL;\n    newitem = (my_d2link_item_t*)calloc(1, sizeof(my_d2link_item_t));\n    int item_name_len = 0;\n\n    if(newitem==NULL)\n    {\n        return NULL;\n    }\n\n    #if MY_D2LINK_LIST_ITEM_ITEM_NAME_USED\n    if(item_name!=NULL)\n    {\n        item_name_len = strlen(item_name);\n        if(item_name_len&gt;31)\n        {\n            item_name_len = 31;\n        }\n        memcpy(newitem-&gt;item_name, item_name, item_name_len);\n    }\n    #endif\n\n    newitem-&gt;id = id;\n    \/\/------------------------------------\n    if(p_data!=NULL)\n    {\n        newitem-&gt;data_type = 1;\n        newitem-&gt;p_data_type = p_data_type;\n        if(!p_data_type)\n        {\n            newitem-&gt;p_data = p_data;\n        }\n        else\n        {\n            newitem-&gt;p_data = calloc(1, data_len);\n            if(newitem-&gt;p_data!=NULL)\n            {\n                memcpy(newitem-&gt;p_data, p_data, data_len);\n            }\n        }\n    }\n    else\n    {\n        newitem-&gt;data_type = 0;\n        newitem-&gt;data_uint64 = data_uint64;\n        if(data_len&gt;8) data_len=8;\n        \n    }\n    newitem-&gt;data_len = data_len;\n    \n    newitem-&gt;next_item = NULL;\n    newitem-&gt;pri_item = NULL;\n\n    return newitem;\n}\n\nmy_d2link_item_t* My_D2Link_Create_Item_pt(int id, void* p_data, uint8_t p_data_type, uint32_t data_len, char* item_name)\n{\n    return My_D2Link_Create_Item(id, p_data, p_data_type, 0, data_len, item_name);\n}\n\nmy_d2link_item_t* My_D2Link_Create_Item_pt_ref(int id, void* p_data, uint32_t data_len, char* item_name)\n{\n    return My_D2Link_Create_Item(id, p_data, 0, 0, data_len, item_name);\n}\n\nmy_d2link_item_t* My_D2Link_CreateItem_pt_ent(int id, void* p_data, uint32_t data_len, char* item_name)\n{\n    return My_D2Link_Create_Item(id, p_data, 1, 0, data_len, item_name);\n}\n\nmy_d2link_item_t* My_D2Link_Create_Item_int(int id, uint64_t data_uint64, uint32_t data_len, char* item_name)\n{\n    return My_D2Link_Create_Item(id, NULL, 0, data_uint64, data_len, item_name);\n}\n\nint My_D2Link_Append_Item(my_d2link_t* p_list, my_d2link_item_t* newitem)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(newitem==NULL)\n    {\n        return -2;\n    }\n    int item_name_len = 0;\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n    \n    if(p_list-&gt;list_item_num&gt;0)\n    {\n        do\n        {\n            if(item_index-&gt;id==newitem-&gt;id)\n            {\n                break;\n            }\n            if(item_index-&gt;next_item!=NULL)\n            {\n                item_index = item_index-&gt;next_item;\n            }\n        } while (item_index!=p_list-&gt;end_item);\n        if(item_index-&gt;id==newitem-&gt;id)\n        {\n            free(newitem);\n            return -3;\n        }\n    }\n\n    p_list-&gt;list_data_len += newitem-&gt;data_len;\n    \/\/------------------------------------\n\n    if(p_list-&gt;list_item_num==0)\n    {\n        p_list-&gt;first_item = newitem;\n        newitem-&gt;pri_item = NULL;\n        newitem-&gt;next_item = NULL;\n    }\n    else\n    {\n        p_list-&gt;end_item-&gt;next_item = newitem;\n        newitem-&gt;pri_item = p_list-&gt;end_item;\n        newitem-&gt;next_item = NULL;\n    }\n    p_list-&gt;end_item = newitem;\n    p_list-&gt;list_item_num++;\n    return 0;\n}\n\nint My_D2Link_Create_And_Append_Item(my_d2link_t* p_list, int id, void* p_data, uint8_t p_data_type, uint64_t data_uint64, uint32_t data_len, char* item_name)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    my_d2link_item_t* newitem = NULL;\n    newitem = (my_d2link_item_t*)calloc(1, sizeof(my_d2link_item_t));\n    int item_name_len = 0;\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n    \n    if(p_list-&gt;list_item_num&gt;0)\n    {\n        do\n        {\n            if(item_index-&gt;id==id)\n            {\n                break;\n            }\n            if(item_index-&gt;next_item!=NULL)\n            {\n                item_index = item_index-&gt;next_item;\n            }\n        } while (item_index!=p_list-&gt;end_item);\n        if(item_index-&gt;id==id)\n        {\n            if(newitem!=NULL)free(newitem);\n                return -2;\n        }\n    }\n\n    if(newitem!=NULL)\n    {\n        #if MY_D2LINK_LIST_ITEM_ITEM_NAME_USED\n        if(item_name!=NULL)\n        {\n            item_name_len = strlen(item_name);\n            if(item_name_len&gt;31)\n            {\n                item_name_len = 31;\n            }\n            memcpy(newitem-&gt;item_name, item_name, item_name_len);\n        }\n        #endif\n\n        newitem-&gt;id = id;\n        \/\/------------------------------------\n        if(p_data!=NULL)\n        {\n            newitem-&gt;data_type = 1;\n            newitem-&gt;p_data_type = p_data_type;\n            if(!p_data_type)\n            {\n                newitem-&gt;p_data = p_data;\n            }\n            else\n            {\n                newitem-&gt;p_data = calloc(1, data_len);\n                if(newitem-&gt;p_data!=NULL)\n                {\n                    memcpy(newitem-&gt;p_data, p_data, data_len);\n                }\n            }\n        }\n        else\n        {\n            newitem-&gt;data_type = 0;\n            newitem-&gt;data_uint64 = data_uint64;\n        }\n        newitem-&gt;data_len = data_len;\n        p_list-&gt;list_data_len += data_len;\n        \/\/------------------------------------\n\n        newitem-&gt;next_item = NULL;\n        if(p_list-&gt;list_item_num==0)\n        {\n            p_list-&gt;first_item = newitem;\n            newitem-&gt;pri_item = NULL;\n            newitem-&gt;next_item = NULL;\n        }\n        else\n        {\n            p_list-&gt;end_item-&gt;next_item = newitem;\n            newitem-&gt;pri_item = p_list-&gt;end_item;\n            newitem-&gt;next_item = NULL;\n        }\n        p_list-&gt;end_item = newitem;\n        p_list-&gt;list_item_num++;\n        return 0;\n    }\n    else\n    {\n        return -3;\n    }\n    return 0;\n}\n\nint My_D2Link_Insert_Item(my_d2link_t* p_list, int insert_direct, int insert_id, my_d2link_item_t* newitem)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(newitem==NULL)\n    {\n        return -2;\n    }\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n    \n    if(p_list-&gt;list_item_num&gt;0)\n    {\n        do\n        {\n            if(item_index-&gt;id==newitem-&gt;id)\n            {\n                break;\n            }\n            if(item_index-&gt;next_item!=NULL)\n            {\n                item_index = item_index-&gt;next_item;\n            }\n        } while (item_index!=p_list-&gt;end_item);\n        if(item_index-&gt;id==newitem-&gt;id)\n        {\n            free(newitem);\n            return -3;\n        }\n    }\n\n    p_list-&gt;list_data_len += newitem-&gt;data_len;\n    \/\/------------------------------------\n\n    if(p_list-&gt;list_item_num==0)\/\/\u94fe\u8868\u4e3a\u7a7a\n    {\n        p_list-&gt;first_item = newitem;\n        newitem-&gt;pri_item = NULL;\n        newitem-&gt;next_item = NULL;\n        p_list-&gt;end_item = newitem;\n    }\n    else\/\/\u94fe\u8868\u4e0d\u4e3a\u7a7a\n    {\n        if(insert_direct==-1)\/\/\u6307\u5b9a\u63d2\u5165\u5230\u6700\u524d\u9762\n        {\n            newitem-&gt;pri_item = NULL;\n            newitem-&gt;next_item = p_list-&gt;first_item;\n            p_list-&gt;first_item-&gt;pri_item = newitem;\n            p_list-&gt;first_item = newitem;\n        }\n        else if(insert_direct==-2)\/\/\u6307\u5b9a\u8ffd\u52a0\u5230\u5c3e\u90e8\n        {\n            newitem-&gt;pri_item = p_list-&gt;end_item;\n            newitem-&gt;next_item = NULL;\n            p_list-&gt;end_item-&gt;next_item = newitem;\n            p_list-&gt;end_item = newitem;\n        }\n        else\/\/\u6307\u5b9a\u4e86id\n        {\n            my_d2link_item_t* find_id_item = NULL;\n            find_id_item = p_list-&gt;first_item;\n            for(int i=0; (i&lt;p_list-&gt;list_item_num)&amp;&amp;(find_id_item!=NULL); i++)\n            {\n                if(find_id_item-&gt;id!=insert_id)\n                {\n                    find_id_item = find_id_item-&gt;next_item;\n                }\n                else\n                {\n                    break;\n                }\n            }\n            if(find_id_item==NULL)\/\/\u672a\u627e\u5230\u76ee\u6807id\uff0c\u8ffd\u52a0\u5230\u5c3e\u90e8\n            {\n                newitem-&gt;pri_item = p_list-&gt;end_item;\n                newitem-&gt;next_item = NULL;\n                p_list-&gt;end_item-&gt;next_item = newitem;\n                p_list-&gt;end_item = newitem;\n            }\n            else\/\/\u627e\u5230\u4e86\u76ee\u6807id\n            {\n                if(insert_direct==0)\/\/\u524d\u5411\u63d2\u5165\n                {\n                    if(find_id_item==p_list-&gt;first_item)\/\/\u76ee\u6807id\u5df2\u7ecf\u662f\u7b2c\u4e00\u9879\n                    {\n                        newitem-&gt;pri_item = NULL;\n                        newitem-&gt;next_item = p_list-&gt;first_item;\n                        p_list-&gt;first_item-&gt;pri_item = newitem;\n                        p_list-&gt;first_item = newitem;\n                    }\n                    else\/\/\u76ee\u6807id\u4e0d\u662f\u7b2c\u4e00\u9879\n                    {\n                        newitem-&gt;pri_item = find_id_item-&gt;pri_item;\n                        newitem-&gt;next_item = find_id_item;\n                        find_id_item-&gt;pri_item-&gt;next_item = newitem;\n                        find_id_item-&gt;pri_item = newitem;\n                    }\n                }\n                else if(insert_direct==1)\/\/\u540e\u5411\u63d2\u5165\n                {\n                    if(find_id_item==p_list-&gt;end_item)\/\/\u76ee\u6807id\u5df2\u7ecf\u662f\u6700\u540e\u4e00\u9879\n                    {\n                        newitem-&gt;pri_item = p_list-&gt;end_item;\n                        newitem-&gt;next_item = NULL;\n                        p_list-&gt;end_item-&gt;next_item = newitem;\n                        p_list-&gt;end_item = newitem;\n                    }\n                    else\/\/\u76ee\u6807id\u4e0d\u662f\u6700\u540e\u4e00\u9879\n                    {\n                        newitem-&gt;pri_item = find_id_item;\n                        newitem-&gt;next_item = find_id_item-&gt;next_item;\n                        find_id_item-&gt;next_item-&gt;pri_item = newitem;\n                        find_id_item-&gt;next_item = newitem;\n                    }\n                }\n            }\n        }\n    }\n    p_list-&gt;list_item_num++;\n    return 0;\n}\n\nint My_D2Link_Delete_Item(my_d2link_t* p_list, int id)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return 1;\n    }\n\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n    do\n    {\n        if(item_index-&gt;id==id)\n        {\n            break;\n        }\n        if(item_index-&gt;next_item!=NULL)\n        {\n            item_index = item_index-&gt;next_item;\n        }\n    } while (item_index!=p_list-&gt;end_item);\n    if(item_index-&gt;id==id)\n    {\n        if((item_index!=p_list-&gt;first_item)&amp;&amp;(item_index!=p_list-&gt;end_item))\n        {\n            item_index-&gt;pri_item-&gt;next_item = item_index-&gt;next_item;\n            item_index-&gt;next_item-&gt;pri_item = item_index-&gt;pri_item;\n        }\n        else\n        {\n            if(item_index==p_list-&gt;first_item)\n            {\n                p_list-&gt;first_item = item_index-&gt;next_item;\n            }\n            if(item_index==p_list-&gt;end_item)\n            {\n                p_list-&gt;end_item = item_index-&gt;pri_item;\n                if(p_list-&gt;end_item!=NULL)\n                {\n                    p_list-&gt;end_item-&gt;next_item = NULL;\n                }\n            }\n        }\n\n        p_list-&gt;list_data_len -= item_index-&gt;data_len;\n\n        \/\/---------------------------------------------\n        if(item_index-&gt;p_data_type)\n        {\n            if(item_index-&gt;p_data!=NULL)\n            {\n                free(item_index-&gt;p_data);\n            }\n        }\n        \/\/---------------------------------------------\n        \n        free(item_index);\n        if(p_list-&gt;list_item_num&gt;0)\n        {\n            p_list-&gt;list_item_num--;\n        }\n        return 0;\n    }\n    else\n    {\n        return 2;\n    }\n    return 0;\n}\n\nint My_D2Link_Delete(my_d2link_t** p_list)\n{\n    if((*p_list)==NULL)\n    {\n        return -1;\n    }\n\n    my_d2link_item_t* p = (*p_list)-&gt;first_item;\n    my_d2link_item_t* p_next = NULL;\n    for(int i=0; (i&lt;(*p_list)-&gt;list_item_num)&amp;&amp;(p!=NULL); i++)\n    {\n        p_next = p-&gt;next_item;\n\n        \/\/-----------------------------------\n        if(p-&gt;p_data_type)\n        {\n            if(p-&gt;p_data!=NULL)\n            {\n                free(p-&gt;p_data);\n            }\n        }\n        \/\/-----------------------------------\n\n        free(p);\n        p = p_next;\n    }\n\n    free(*p_list);\n    *p_list = NULL;\n\n    return 0;\n}\n\nint My_D2Link_match_id_count_statistic(my_d2link_t* p_list, int id_begin, int id_end)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return -2;\n    }\n\n    if(id_begin&gt;id_end)\n    {\n        int temp = id_begin;\n        id_begin = id_end;\n        id_end = temp;\n    }\n\n    my_d2link_item_t* p = p_list-&gt;first_item;\n    int matching_id_counter = 0;\n    for(int i=0; (i&lt;p_list-&gt;list_item_num)&amp;&amp;(p!=NULL); i++)\n    {\n        if((p-&gt;id&gt;=id_begin)&amp;&amp;(p-&gt;id&lt;=id_end))\n        {\n            matching_id_counter++;\n        }\n        p = p-&gt;next_item;\n    }\n\n    return matching_id_counter;\n}\n\nint My_D2Link_Data_Packer(my_d2link_t* p_list, void* saving, uint32_t saving_len)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(saving==NULL)\n    {\n        return -2;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return -3;\n    }\n\n    if(p_list-&gt;list_data_len &gt; saving_len)\n    {\n        return -4;\n    }\n\n    my_d2link_item_t* p = p_list-&gt;first_item;\n\n    char* p_saving_byte = (char*)saving;\n    uint32_t copy_counter = 0;\n    uint32_t copy_size = 0;\n    for(int i=0; (i&lt;p_list-&gt;list_item_num)&amp;&amp;(p!=NULL); i++)\n    {\n        if((copy_size+p-&gt;data_len)&lt;=saving_len)\n        {\n            if(p-&gt;data_type==0)\n            {\n                memcpy(p_saving_byte, &amp;p-&gt;data_uint64, p-&gt;data_len);\n            }\n            else if(p-&gt;data_type==1)\n            {\n                if(p-&gt;p_data!=NULL)\n                {\n                    memcpy(p_saving_byte, p-&gt;p_data, p-&gt;data_len);\n                }\n            }\n            p_saving_byte += p-&gt;data_len;\n            copy_counter++;\n            copy_size += p-&gt;data_len;\n            p = p-&gt;next_item;\n        }\n        else\n        {\n            return 1;\n        }\n    }\n\n    return 0;\n}\n\nvoid* My_D2Link_GetItem_MinId(my_d2link_t* p_list)\n{\n    if(p_list==NULL)\n    {\n        return NULL;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return NULL;\n    }\n\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n\n    my_d2link_item_t* min_id_item = p_list-&gt;first_item;\n    for(int i=0; i&lt;p_list-&gt;list_item_num; i++)\n    {\n        if(min_id_item-&gt;id &gt; item_index-&gt;id)\n        {\n            min_id_item = item_index;\n        }\n        item_index = item_index-&gt;next_item;\n    }\n    return min_id_item;\n}\n\nvoid* My_D2Link_GetItem_MaxId(my_d2link_t* p_list)\n{\n    if(p_list==NULL)\n    {\n        return NULL;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return NULL;\n    }\n\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n\n    my_d2link_item_t* max_id_item = p_list-&gt;first_item;\n    for(int i=0; i&lt;p_list-&gt;list_item_num; i++)\n    {\n        if(max_id_item-&gt;id &lt; item_index-&gt;id)\n        {\n            max_id_item = item_index;\n        }\n        item_index = item_index-&gt;next_item;\n    }\n    return max_id_item;\n}\n\nvoid* My_D2Link_GetItem_IdGreaterThan(my_d2link_t* p_list, my_d2link_item_t* p_item)\n{\n    if(p_list==NULL)\n    {\n        return NULL;\n    }\n    if(p_item==NULL)\n    {\n        return NULL;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return NULL;\n    }\n\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n    my_d2link_item_t* next_min_id_item = My_D2Link_GetItem_MaxId(p_list);\n\n    if(p_item==next_min_id_item)\n    {\n        return NULL;\n    }\n\n    for(int i=0; (i&lt;p_list-&gt;list_item_num)&amp;&amp;(item_index!=NULL); i++)\n    {\n        if((item_index-&gt;id &gt; p_item-&gt;id) &amp;&amp; (item_index-&gt;id &lt; next_min_id_item-&gt;id))\n        {\n            next_min_id_item = item_index;\n        }\n        item_index = item_index-&gt;next_item;\n    }\n    return next_min_id_item;\n}\n\nint My_D2Link_Data_Packer_accordingID(my_d2link_t* p_list, void* saving, uint32_t saving_len, uint8_t direct)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(saving==NULL)\n    {\n        return -2;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return -3;\n    }\n\n    #if MY_D2LINK_LIST_LIST_NAME_USED\n    #endif\n\n    if(p_list-&gt;list_data_len &gt; saving_len)\n    {\n        return -4;\n    }\n\n    char* p_saving_byte = (char*)saving;\n    uint32_t copy_counter = 0;\n    uint32_t copy_size = 0;\n    if(direct==0)\n    {\n        my_d2link_item_t* start_item = My_D2Link_GetItem_MinId(p_list);\n        my_d2link_item_t* max_id_item = My_D2Link_GetItem_MaxId(p_list);\n        if(start_item!=NULL)\n        {\n            my_d2link_item_t* next_item = start_item;\n            for(int i=0; (i&lt;p_list-&gt;list_item_num)&amp;&amp;(next_item!=NULL); i++)\n            {\n                if((copy_size+next_item-&gt;data_len)&lt;=saving_len)\n                {\n                    if(next_item-&gt;data_type==0)\n                    {\n                        memcpy(p_saving_byte, &amp;next_item-&gt;data_uint64, next_item-&gt;data_len);\n                    }\n                    else if(next_item-&gt;data_type==1)\n                    {\n                        if(next_item-&gt;p_data!=NULL)\n                        {\n                            memcpy(p_saving_byte, next_item-&gt;p_data, next_item-&gt;data_len);\n                        }\n                    }\n                    p_saving_byte += next_item-&gt;data_len;\n                    copy_counter++;\n                    copy_size += next_item-&gt;data_len;\n                    next_item = My_D2Link_GetItem_IdGreaterThan(p_list, next_item);\n                }\n                else\n                {\n                    return 1;\n                }\n            }\n        }\n    }\n    else if(direct==1)\n    {\n\n    }\n    else\n    {\n\n    }\n\n    return 0;\n}\n\n\/**\n * @brief \u4ea4\u6362\u53cc\u5411\u94fe\u8868\u4e2d\u4e24\u4e2a\u76f8\u90bb\u7684\u8282\u70b9\n * @param list \u94fe\u8868\u6307\u9488 (\u7528\u4e8e\u66f4\u65b0\u5934\u6307\u9488)\n * @param item1 \u7b2c\u4e00\u4e2a\u8282\u70b9\n * @param item2 \u7b2c\u4e8c\u4e2a\u8282\u70b9 (item1\u7684\u4e0b\u4e00\u4e2a\u8282\u70b9)\n *\/\nstatic void My_D2Link_Swap_Items(my_d2link_t* list, my_d2link_item_t* item1, my_d2link_item_t* item2) {\n    if (item1 == item2 || item1 == NULL || item2 == NULL) {\n        return;\n    }\n\n    my_d2link_item_t* prev1 = item1-&gt;pri_item;\n    my_d2link_item_t* next2 = item2-&gt;next_item;\n\n    \/\/ \u91cd\u65b0\u8fde\u63a5\u6307\u9488\n    \/\/ item2 \u6307\u5411 item1 \u7684\u524d\u4e00\u4e2a\u8282\u70b9\n    item2-&gt;pri_item = prev1;\n    if (prev1) {\n        prev1-&gt;next_item = item2;\n    } else {\n        \/\/ item1 \u662f\u5934\u8282\u70b9\uff0c\u73b0\u5728 item2 \u6210\u4e3a\u65b0\u7684\u5934\u8282\u70b9\n        list-&gt;first_item = item2;\n    }\n\n    \/\/ item1 \u6307\u5411 item2 \u7684\u540e\u4e00\u4e2a\u8282\u70b9\n    item1-&gt;next_item = next2;\n    if (next2) {\n        next2-&gt;pri_item = item1;\n    } else {\n        \/\/ item2 \u662f\u5c3e\u8282\u70b9\uff0c\u73b0\u5728 item1 \u6210\u4e3a\u65b0\u7684\u5c3e\u8282\u70b9\n        list-&gt;end_item = item1;\n    }\n\n    \/\/ \u4ea4\u6362 item1 \u548c item2 \u4e4b\u95f4\u7684\u8fde\u63a5\n    item1-&gt;pri_item = item2;\n    item2-&gt;next_item = item1;\n}\n\nint My_D2Link_Data_Sort_Data_accordingID(my_d2link_t* p_list, uint8_t direct) {\n    \/\/ 1. \u53c2\u6570\u6821\u9a8c\n    if (p_list == NULL || p_list-&gt;first_item == NULL) {\n        return -1;\n    }\n\n    \/\/ \u5982\u679c\u94fe\u8868\u53ea\u6709\u4e00\u4e2a\u6216\u6ca1\u6709\u5143\u7d20\uff0c\u5219\u65e0\u9700\u6392\u5e8f\n    if (p_list-&gt;first_item-&gt;next_item == NULL) {\n        return 0;\n    }\n\n    int swapped;\n    my_d2link_item_t* current;\n    my_d2link_item_t* last_unsorted = NULL; \/\/ \u6807\u8bb0\u6bcf\u8d9f\u6392\u5e8f\u7684\u672b\u5c3e\n\n    \/\/ 2. \u5192\u6ce1\u6392\u5e8f\u4e3b\u5faa\u73af\n    do {\n        swapped = 0;\n        current = p_list-&gt;first_item;\n\n        \/\/ \u5185\u5c42\u5faa\u73af\uff0c\u8fdb\u884c\u4e00\u8d9f\u5192\u6ce1\n        while (current-&gt;next_item != last_unsorted) {\n            int condition_met = 0;\n            if (direct == 0 &amp;&amp; current-&gt;id &gt; current-&gt;next_item-&gt;id) {\n                condition_met = 1;\n            } else if (direct == 1 &amp;&amp; current-&gt;id &lt; current-&gt;next_item-&gt;id) {\n                condition_met = 1;\n            }\n\n            if (condition_met) {\n                \/\/ 3. \u5982\u679c\u987a\u5e8f\u9519\u8bef\uff0c\u5219\u4ea4\u6362\u8282\u70b9\n                My_D2Link_Swap_Items(p_list, current, current-&gt;next_item);\n                swapped = 1;\n                \/\/ \u4ea4\u6362\u540e\uff0ccurrent\u6307\u9488\u73b0\u5728\u6307\u5411\u7684\u662f\u539f\u6765\u7684item2\n                \/\/ \u4e0b\u4e00\u6b21\u5faa\u73af\u5c06\u4ece\u8fd9\u4e2a\u4f4d\u7f6e\u7ee7\u7eed\u6bd4\u8f83\n            } else {\n                \/\/ \u5982\u679c\u987a\u5e8f\u6b63\u786e\uff0c\u79fb\u52a8\u5230\u4e0b\u4e00\u4e2a\u8282\u70b9\n                current = current-&gt;next_item;\n            }\n        }\n        \/\/ \u6bcf\u8d9f\u6392\u5e8f\u540e\uff0c\u672b\u5c3e\u7684\u5143\u7d20\u5df2\u7ecf\u5c31\u4f4d\n        last_unsorted = current;\n    } while (swapped); \/\/ \u5982\u679c\u4e00\u8d9f\u4e0b\u6765\u6ca1\u6709\u4ea4\u6362\uff0c\u8bf4\u660e\u5df2\u7ecf\u6392\u597d\u5e8f\n\n    return 0;\n}\n\nint My_D2Link_GetItem_ContinousMaxId_next(my_d2link_t* p_list, int start_id)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return -2;\n    }\n\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n\n    int j=0;\n    for(; j&lt;p_list-&gt;list_item_num; j++)\n    {\n        int i=0;\n        item_index = p_list-&gt;first_item;\n        for(; i&lt;p_list-&gt;list_item_num&amp;&amp;(item_index!=NULL); i++)\n        {\n            if((start_id+j) == item_index-&gt;id)\n            {\n                break;\n            }\n            item_index = item_index-&gt;next_item;\n        }\n        if(!(i&lt;p_list-&gt;list_item_num))\n        {\n            return start_id+j;\n        }\n    }\n    \n    return start_id+j;\n}\n\nint My_D2Link_GetItem_ContinousDistribution_8_ByCurId(my_d2link_t* p_list, int start_id, int end_id)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return -2;\n    }\n\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n\n    int ret = 0;\n    int j=0;\n    for(; (j&lt;8); j++)\n    {\n        int i=0;\n        item_index = p_list-&gt;first_item;\n        for(; i&lt;p_list-&gt;list_item_num&amp;&amp;(item_index!=NULL); i++)\n        {\n            if((start_id+j) == item_index-&gt;id)\n            {\n                ret|=(1&lt;&lt;j);\n                break;\n            }\n            item_index = item_index-&gt;next_item;\n        }\n        if(!(i&lt;p_list-&gt;list_item_num))\n        {\n            \n        }\n        if(end_id &gt; start_id)\n        {\n            if(start_id+j &gt;= end_id)\n            {\n                break;\n            }\n        }\n    }\n    if(j&lt;8)\n    {\n        for(; j&lt;8; j++)\n        {\n            ret|=(1&lt;&lt;j);\n        }\n    }\n    \n    return ret;\n}\n\nvoid* My_D2Link_GetItem_Storage_ById(my_d2link_t* p_list, int id)\n{\n    if(p_list==NULL)\n    {\n        return NULL;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        return NULL;\n    }\n\n    my_d2link_item_t* item_index = p_list-&gt;first_item;\n    do\n    {\n        if(item_index-&gt;id==id)\n        {\n            break;\n        }\n        if(item_index-&gt;next_item!=NULL)\n        {\n            item_index = item_index-&gt;next_item;\n        }\n    } while (item_index!=p_list-&gt;end_item);\n    if(item_index-&gt;id==id)\n    {\n        return item_index-&gt;p_data;\n    }\n    else\n    {\n        return NULL;\n    }\n    return NULL;\n}\n\nint My_D2Link_PrintList(my_d2link_t* p_list)\n{\n    if(p_list==NULL)\n    {\n        return -1;\n    }\n    if(p_list-&gt;list_item_num==0)\n    {\n        printf(\"\\nMy_D2Link_PrintList():list already empty\\n\");\n        return -2;\n    }\n\n    printf(\"\\n\\nMy_D2Link_PrintList---------------------------\\n\");\n    #if MY_D2LINK_LIST_LIST_NAME_USED\n    printf(\"list_name=%s\\n\", p_list-&gt;list_name);\n    #endif\n    printf(\"list_item_num=%d\\n\", p_list-&gt;list_item_num);\n    printf(\"list_data_len=%dByte\\n\", p_list-&gt;list_data_len);\n    printf(\"\\n\");\n\n    my_d2link_item_t* p = p_list-&gt;first_item;\n    for(int i=0; i&lt;p_list-&gt;list_item_num; i++)\n    {\n        printf(\"p_list&#91;%d].id=0x%x(%d)\\n\", i, p-&gt;id, p-&gt;id);\n        #if MY_D2LINK_LIST_ITEM_ITEM_NAME_USED\n        printf(\"p_list&#91;%d].item_name=%s\\n\", i, p-&gt;item_name);\n        #endif\n        printf(\"p_list&#91;%d].data_len=0x%x(%d)\\n\", i, p-&gt;data_len, p-&gt;data_len);\n        printf(\"p_list&#91;%d].data_type=0x%x(%d)\\n\", i, p-&gt;data_type, p-&gt;data_type);\n        if(p-&gt;data_type==0)\n        {\n            printf(\"p_list&#91;%d].data_uint64=0x%lx(%ld)\\n\", i, p-&gt;data_uint64, p-&gt;data_uint64);\n        }\n        else if(p-&gt;data_type==1)\n        {\n            printf(\"p_list&#91;%d].*p_data_type=0x%x(%d)\\n\", i, p-&gt;p_data_type, p-&gt;p_data_type);\n            printf(\"p_list&#91;%d].*p_data(%p)=\", i, p-&gt;p_data);\n            char* p_data_byte = (char*)p-&gt;p_data;\n            if(p-&gt;data_len&lt;512)\n            {\n                for(int j=0; j&lt;p-&gt;data_len; j++)\n                {\n                    printf(\"%02x \", *(p_data_byte+j));\n                }\n                printf(\"\\n\");\n            }\n            else\n            {\n                printf(\"...\\n\");\n            }\n        }\n        printf(\"\\n\");\n        \n        p = p-&gt;next_item;\n    }\n    printf(\"\\nMy_D2Link_PrintList---------------------------\\n\\n\");\n\n    return 0;\n}\n\nmy_d2link_t* My_D2Link_Creat(char* list_name)\n{\n    my_d2link_t* new_d2link_list = calloc(1, sizeof(my_d2link_t));\n\n    new_d2link_list-&gt;first_item = NULL;\n    new_d2link_list-&gt;end_item = NULL;\n    new_d2link_list-&gt;list_item_num = 0;\n    new_d2link_list-&gt;list_data_len = 0;\n\n    #if MY_D2LINK_LIST_LIST_NAME_USED\n    if(list_name!=NULL)\n    {\n        if(strlen(list_name)&lt;sizeof(new_d2link_list-&gt;list_name))\n        {\n            memcpy(new_d2link_list-&gt;list_name, list_name, strlen(list_name));\n        }\n        else\n        {\n            memcpy(new_d2link_list-&gt;list_name, list_name, sizeof(new_d2link_list-&gt;list_name)-1);\n        }\n    }\n    else\n    {\n\n    }\n    #endif\n    \n\n    return new_d2link_list;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6d4b\u8bd5<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"my_ds.h\"\n#include \"my_log.h\"\n\n#include &lt;stdio.h>\n#include &lt;stdlib.h>\n#include &lt;string.h>\n\n\nvoid test_My_D2Link_Append_Item(void)\n{\n    my_d2link_t* link1 = My_D2Link_Creat(\"link1\");\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), \"\"));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), \"name\"));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), \"abcdefghijklnmopqrstuvwxyz12345678\"));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, 0, NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(4, 4, 10, NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 10, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(11, 11, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(12, 12, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(13, 13, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(14, 14, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(15, 15, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(16, 16, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(17, 17, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(18, 18, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(19, 19, sizeof(int), NULL));\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(19, 190, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 100, sizeof(int), NULL));\n\n\n    My_D2Link_PrintList(link1);\n\n    printf(\"link1=%p\\n\", link1);\n\n    My_D2Link_Delete(&amp;link1);\n\n    printf(\"link1=%p\\n\", link1);\n}\n\nvoid test_My_D2Link_Insert_Item(void)\n{\n    my_d2link_t* link1 = My_D2Link_Creat(\"link1\");\n    \n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 10, sizeof(int), NULL));\n\n    My_D2Link_Insert_Item(link1, 0, 10, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 0, 10, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 0, 9, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 0, 7, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 0, 6, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n\n    My_D2Link_Insert_Item(link1, 1, 10, My_D2Link_Create_Item_int(13, 13, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 1, 10, My_D2Link_Create_Item_int(11, 11, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 1, 11, My_D2Link_Create_Item_int(12, 12, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 1, 13, My_D2Link_Create_Item_int(14, 14, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 1, 14, My_D2Link_Create_Item_int(15, 15, sizeof(int), NULL));\n\n\n    My_D2Link_Insert_Item(link1, -1, 10, My_D2Link_Create_Item_int(4, 4, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, -1, 10, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 1, 2, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 0, 2, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, -1, 10, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n\n    My_D2Link_Insert_Item(link1, -2, 10, My_D2Link_Create_Item_int(16, 16, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, -2, 10, My_D2Link_Create_Item_int(18, 18, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 1, 16, My_D2Link_Create_Item_int(17, 17, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 1, 18, My_D2Link_Create_Item_int(19, 19, sizeof(int), NULL));\n\n    My_D2Link_Insert_Item(link1, 1, 18, My_D2Link_Create_Item_int(19, 190, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 0, 10, My_D2Link_Create_Item_int(7, 70, sizeof(int), NULL));\n\n\n\n    My_D2Link_PrintList(link1);\n\n    My_D2Link_Delete(&amp;link1);\n}\n\nvoid test_My_D2Link_Data_Sort_Data_accordingID(void)\n{\n    my_d2link_t* link1 = My_D2Link_Creat(\"link1\");\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(4, 4, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(19, 19, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(17, 17, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(14, 14, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(13, 13, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(16, 16, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(18, 18, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 10, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(11, 11, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(12, 12, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(15, 15, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n\n    My_D2Link_Data_Sort_Data_accordingID(link1, 0);\n\n    My_D2Link_PrintList(link1);\n\n    My_D2Link_Delete(&amp;link1);\n\n    \/\/-----------\n    link1 = My_D2Link_Creat(\"link1\");\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(100, 100, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(21, 21, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(4, 4, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(19, 19, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(17, 17, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(14, 14, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(13, 13, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(16, 16, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(18, 18, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 10, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(11, 11, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(12, 12, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    \/\/ My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n    \/\/ My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(15, 15, sizeof(int), NULL));\n\n    My_D2Link_Data_Sort_Data_accordingID(link1, 0);\n\n    My_D2Link_PrintList(link1);\n\n    My_D2Link_Delete(&amp;link1);\n\n    \/\/--------------------------------\n    link1 = My_D2Link_Creat(\"link1\");\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(4, 4, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(19, 19, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(17, 17, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(14, 14, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(13, 13, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(16, 16, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(18, 18, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 10, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(11, 11, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(12, 12, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(15, 15, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n\n    My_D2Link_Data_Sort_Data_accordingID(link1, 1);\n\n    My_D2Link_PrintList(link1);\n\n    My_D2Link_Delete(&amp;link1);\n\n    \/\/-----------\n    link1 = My_D2Link_Creat(\"link1\");\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(100, 100, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(21, 21, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(4, 4, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(19, 19, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(17, 17, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(14, 14, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(13, 13, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(16, 16, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(18, 18, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 10, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(11, 11, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(12, 12, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    \/\/ My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n    \/\/ My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(15, 15, sizeof(int), NULL));\n\n    My_D2Link_Data_Sort_Data_accordingID(link1, 1);\n\n    My_D2Link_PrintList(link1);\n\n    My_D2Link_Delete(&amp;link1);\n}\n\nvoid test_My_D2Link_match_id_count_statistic(void)\n{\n    my_d2link_t* link1 = My_D2Link_Creat(\"link1\");\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(100, 100, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(50, 50, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(40, 40, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 10, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(11, 11, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(12, 12, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(13, 13, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(60, 60, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(61, 61, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(80, 80, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(17, 17, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(18, 18, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(25, 25, sizeof(int), NULL));\n\n    My_D2Link_PrintList(link1);\n\n    printf(\"0 - 100:        %d\\n\", My_D2Link_match_id_count_statistic(link1, 0, 100));\n    printf(\"-1000 - 1000:   %d\\n\", My_D2Link_match_id_count_statistic(link1, -1000, 1000));\n    printf(\"20 - 100:       %d\\n\", My_D2Link_match_id_count_statistic(link1, 20, 100));\n    printf(\"20 - 80:        %d\\n\", My_D2Link_match_id_count_statistic(link1, 20, 80));\n    printf(\"70 - 75:        %d\\n\", My_D2Link_match_id_count_statistic(link1, 70, 75));\n    printf(\"50 - 50:        %d\\n\", My_D2Link_match_id_count_statistic(link1, 50, 50));\n    printf(\"-1000 - -50:    %d\\n\", My_D2Link_match_id_count_statistic(link1, -1000, -50));\n    printf(\"200 - 1000:     %d\\n\", My_D2Link_match_id_count_statistic(link1, 200, 1000));\n\n    printf(\"\\n\");\n\n    printf(\"100 - 0:        %d\\n\", My_D2Link_match_id_count_statistic(link1, 100, 0));\n    printf(\"1000 - -1000:   %d\\n\", My_D2Link_match_id_count_statistic(link1, 1000, -1000));\n    printf(\"100 - 20:       %d\\n\", My_D2Link_match_id_count_statistic(link1, 100, 20));\n    printf(\"80 - 20:        %d\\n\", My_D2Link_match_id_count_statistic(link1, 80, 20));\n    printf(\"75 - 70:        %d\\n\", My_D2Link_match_id_count_statistic(link1, 75, 70));\n    printf(\"50 - 50:        %d\\n\", My_D2Link_match_id_count_statistic(link1, 50, 50));\n    printf(\"-50 - -1000:    %d\\n\", My_D2Link_match_id_count_statistic(link1, -50, -1000));\n    printf(\"1000 - 200:     %d\\n\", My_D2Link_match_id_count_statistic(link1, 1000, 200));\n\n    My_D2Link_Delete(&amp;link1);\n}\n\nvoid test_My_D2Link_GetItem_ContinousMaxId_next(void)\n{\n    my_d2link_t* link1 = My_D2Link_Creat(\"link1\");\n\n    \/\/ 11010011 11111111 10000011 01010101\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(10, 10, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(11, 11, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(12, 12, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(13, 13, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(14, 14, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(15, 15, sizeof(int), NULL));\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(16, 16, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(22, 22, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(23, 23, sizeof(int), NULL));\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(25, 25, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(27, 27, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(29, 29, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(31, 31, sizeof(int), NULL));\n\n    My_D2Link_PrintList(link1);\n\n    printf(\"11010011 11111111 10000011 01010101\\n\");\n    printf(\"start_id=0:     %d\\n\", My_D2Link_GetItem_ContinousMaxId_next(link1, 0));\n    printf(\"start_id=-1:    %d\\n\", My_D2Link_GetItem_ContinousMaxId_next(link1, -1));\n    printf(\"start_id=100:   %d\\n\", My_D2Link_GetItem_ContinousMaxId_next(link1, 100));\n    printf(\"start_id=7:     %d\\n\", My_D2Link_GetItem_ContinousMaxId_next(link1, 7));\n    printf(\"start_id=8:     %d\\n\", My_D2Link_GetItem_ContinousMaxId_next(link1, 8));\n    printf(\"start_id=18:    %d\\n\", My_D2Link_GetItem_ContinousMaxId_next(link1, 18));\n\n    printf(\"ContinousDistribution: 0-100:   0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 0, 100));\n    printf(\"ContinousDistribution: -1-100:  0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, -1, 100));\n    printf(\"ContinousDistribution: 0-3:     0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 0, 3));\n    printf(\"ContinousDistribution: 7-12:    0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 7, 12));\n    printf(\"ContinousDistribution: 8-15:    0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 8, 15));\n    printf(\"ContinousDistribution: 15-23:   0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 15, 23));\n    printf(\"ContinousDistribution: 15-24:   0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 15, 24));\n    printf(\"ContinousDistribution: 24-31:   0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 24, 31));\n    printf(\"ContinousDistribution: 28-31:   0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 28, 31));\n    printf(\"ContinousDistribution: 24-100:  0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 24, 100));\n    printf(\"ContinousDistribution: 28-28:   0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 28, 28));\n    printf(\"ContinousDistribution: 28-0:    0x%X\\n\", My_D2Link_GetItem_ContinousDistribution_8_ByCurId(link1, 28, 0));\n\n    My_D2Link_Delete(&amp;link1);\n}\n\nvoid test_My_D2Link_GetItem_MinMaxId(void)\n{\n    my_d2link_t* link1 = My_D2Link_Creat(\"link1\");\n\n    my_d2link_item_t* minid_item = My_D2Link_GetItem_MinId(link1);\n    my_d2link_item_t* maxid_item = My_D2Link_GetItem_MaxId(link1);\n\n    if(minid_item!=NULL)\n    {\n        printf(\"minid_item->id=%d\\n\", minid_item->id);\n    }\n    else\n    {\n        printf(\"minid_item!=NULL\\n\");\n    }\n\n    if(maxid_item!=NULL)\n    {\n        printf(\"maxid_item->id=%d\\n\", maxid_item->id);\n    }\n    else\n    {\n        printf(\"maxid_item!=NULL\\n\");\n    }\n\n    printf(\"append id 2-7\\n\");\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(4, 4, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n\n    My_D2Link_PrintList(link1);\n\n    minid_item = My_D2Link_GetItem_MinId(link1);\n    if(minid_item!=NULL)\n    {\n        printf(\"minid_item->id=%d\\n\", minid_item->id);\n    }\n    else\n    {\n        printf(\"minid_item!=NULL\\n\");\n    }\n\n    maxid_item = My_D2Link_GetItem_MaxId(link1);\n    if(maxid_item!=NULL)\n    {\n        printf(\"maxid_item->id=%d\\n\", maxid_item->id);\n    }\n    else\n    {\n        printf(\"maxid_item!=NULL\\n\");\n    }\n\n    printf(\"append id 0, 1\\n\");\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n\n    minid_item = My_D2Link_GetItem_MinId(link1);\n    if(minid_item!=NULL)\n    {\n        printf(\"minid_item->id=%d\\n\", minid_item->id);\n    }\n    else\n    {\n        printf(\"minid_item!=NULL\\n\");\n    }\n\n    printf(\"insert id 8, 9\\n\");\n    My_D2Link_Insert_Item(link1, 0, 5, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Insert_Item(link1, 0, 5, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n\n    maxid_item = My_D2Link_GetItem_MaxId(link1);\n    if(maxid_item!=NULL)\n    {\n        printf(\"maxid_item->id=%d\\n\", maxid_item->id);\n    }\n    else\n    {\n        printf(\"maxid_item!=NULL\\n\");\n    }\n\n    My_D2Link_PrintList(link1);\n\n    My_D2Link_Delete(&amp;link1);\n}\n\nvoid test_My_D2Link_GetItem_IdGreaterThan(void)\n{\n    my_d2link_t* link1 = My_D2Link_Creat(\"link1\");\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(3, 3, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(4, 4, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(7, 7, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n    \n    My_D2Link_PrintList(link1);\n\n    my_d2link_item_t* next_max_item = My_D2Link_GetItem_MinId(link1);\n    while(next_max_item!=NULL)\n    {\n        printf(\"next_max_item->id=%d\\n\", next_max_item->id);\n        next_max_item = My_D2Link_GetItem_IdGreaterThan(link1, next_max_item);\n    }\n\n    My_D2Link_Delete(&amp;link1);\n}\n\nvoid test_My_D2Link_Data_Packer_accordingID(void)\n{\n    my_d2link_t* link1 = My_D2Link_Creat(\"link1\");\n\n    char* test_data_1 = calloc(1, 32);\n    memcpy(test_data_1, \"012345\", sizeof(\"012345\"));\n\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(5, 5, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(6, 6, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(9, 9, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_pt_ref(3, test_data_1, strlen(test_data_1), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(4, 4, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(0, 0, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(1, 1, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_CreateItem_pt_ent(7, test_data_1, strlen(test_data_1), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(8, 8, sizeof(int), NULL));\n    My_D2Link_Append_Item(link1, My_D2Link_Create_Item_int(2, 2, sizeof(int), NULL));\n\n    My_D2Link_PrintList(link1);\n\n    char* saving = calloc(1, link1->list_data_len);\n    My_D2Link_Data_Packer_accordingID(link1, saving, link1->list_data_len, 0);\n    Log_Show_Memory(saving, link1->list_data_len, NULL);\n\n\n    printf(\"change test_data_1\\n\");\n    memcpy(test_data_1, \"9876543210\", sizeof(\"9876543210\"));\n\n    My_D2Link_PrintList(link1);\n\n    memset(saving, 0, link1->list_data_len);\n    My_D2Link_Data_Packer_accordingID(link1, saving, link1->list_data_len, 0);\n    Log_Show_Memory(saving, link1->list_data_len, NULL);\n\n\n    printf(\"free test_data_1\\n\");\n    free(test_data_1);\n    test_data_1 = NULL;\n    My_D2Link_PrintList(link1);\n    My_D2Link_Data_Packer_accordingID(link1, saving, link1->list_data_len, 0);\n    Log_Show_Memory(saving, link1->list_data_len, NULL);\n\n    free(saving);\n\n    My_D2Link_Delete(&amp;link1);\n}\n\nint main()\n{\n    test_My_D2Link_Data_Packer_accordingID();\n\n    return 0;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u529f\u80fd\u7279\u6027 \u4ee3\u7801 \u5934\u6587\u4ef6 \u5177\u4f53\u5b9e\u73b0 \u6d4b\u8bd5<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,4,3,5],"tags":[],"class_list":["post-551","post","type-post","status-publish","format-standard","hentry","category-c","category-4","category-3","category-5"],"_links":{"self":[{"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/posts\/551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/comments?post=551"}],"version-history":[{"count":0,"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/posts\/551\/revisions"}],"wp:attachment":[{"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/media?parent=551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/categories?post=551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/niuguodong.com\/index.php\/wp-json\/wp\/v2\/tags?post=551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}