連結串列學習
阿新 • • 發佈:2018-11-28
//單個連結串列節點定義 struct _LinkedListSingle{ uint16_t id; /* 標識這個元素方便查詢 */ void *data; /* 連結串列中包含的資料指標 */ struct LinkedListSingle *next; /* 指向下一個連結串列的指標 */ }; typedef struct _LinkedListSingle LinkedListSingle; //總連結串列節點定義 typedef struct{ LinkedListSingle *head;//連結串列頭的地址 LinkedListSingle *tail;//最後一個節點的地址 int length; //總數量 } LinkedList;
先定義上面de連結串列資料型別,一個是單節點,一個是連結串列基資訊
接下來是連結串列操作
1·、建立連結串列函式
//新增連結串列 LinkedListSingle *LinkedList_add(LinkedList **list_base_ptr,void *data) { LinkedListSingle *list_ptr=(LinkedListSingle *)malloc(sizeof(LinkedListSingle)); //建立節點 LinkedList *list_all_ptr; list_ptr->next=NULL; //初始化節點資訊 ,注意新節點的下一個節點資訊是空的 list_ptr->data=data; //填充連結串列資料 if(*list_base_ptr==NULL) //首次建立連結串列 { list_all_ptr= (LinkedList *)malloc(sizeof(LinkedList)); *list_base_ptr=list_all_ptr; list_ptr->id=0; //自增ID序列號,方便查詢 list_all_ptr->head=list_all_ptr->tail=list_ptr; //首次建立之後填充第一個節點的資訊到連結串列頭 list_all_ptr->length=1; //連結串列頭數量 } else { list_all_ptr=*list_base_ptr; //獲得新增節點的上一接點的資訊 list_ptr->id = list_all_ptr->tail->id+1; //自增ID序列號 list_all_ptr->tail->next = list_ptr; //更新新增節點的,上一接點的,下個節點的資訊 list_all_ptr->tail=list_ptr; //更新連結串列尾部為當前節點 ++list_all_ptr->length; } return list_ptr; }
2、查詢節點,更據自增序號查詢