1. 程式人生 > >連結串列學習

連結串列學習

//單個連結串列節點定義
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、查詢節點,更據自增序號查詢