新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
【C語言數(shù)據(jù)結(jié)構(gòu)】單鏈表
LinkList.h
創(chuàng)新互聯(lián)建站長期為近1000家客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為北鎮(zhèn)企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都做網(wǎng)站,北鎮(zhèn)網(wǎng)站改版等技術(shù)服務。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
#ifndef LINK_LIST_H #define LINK_LIST_H //鏈表節(jié)點 typedef struct _LinkListNode { struct _LinkListNode *next; }LinkListNode; //單鏈表 typedef void LinkList; /* * 創(chuàng)建單鏈表 * @return 返回單鏈表的指針 */ LinkList* LinkList_Create(); /* * 銷毀單鏈表 * @param list 單鏈表的指針 */ void LinkList_Destroy(LinkList *list); /* * 清空單鏈表 * @param list 單鏈表的指針 */ void LinkList_Clear(LinkList *list); /* * 向單鏈表pos位置處插入元素 * @param list 單鏈表指針 * @param node 元素指針 * @param pos 插入的索引 */ int LinkList_Insert(LinkList *list,LinkListNode *node,int pos); /* * 獲取單鏈表中索引位置處的元素 * @param list 單鏈表指針 * @param pos 單鏈表索引值 * @param return 元素指針 */ LinkListNode* LinkList_Get(LinkList *list,int pos); /* * 刪除單鏈表中索引位置處的值 * @param list 單鏈表的指針 * @param pos 單鏈表索引 * @param return 非0表示刪除成功 */ int LinkList_Remove(LinkList *list,int pos); /* * 獲取單鏈表當前已存儲元素的個數(shù) * @param list 單鏈表的指針 * @return 單鏈表中已存儲元素的個數(shù) */ int LinkList_Length(LinkList *list); #endif // LINKLIST_H
LinkLink.c
#include "Linklist.h" #include//單鏈表 typedef struct _LinkList { LinkListNode header;//鏈表頭節(jié)點 int length;//鏈表長度 }TLinkList; /* * 創(chuàng)建單鏈表 * @return 返回單鏈表的指針 */ LinkList* LinkList_Create() { TLinkList * list = (TLinkList *)malloc(sizeof(LinkList)); if(list != 0) { list->header.next = 0; //初始化頭結(jié)點的后繼指針為空 list->length = 0; } return list; } /* * 銷毀單鏈表 * @param list 單鏈表的指針 */ void LinkList_Destroy(LinkList *list) { free(list); } /* * 清空單鏈表 * @param list 單鏈表的指針 */ void LinkList_Clear(LinkList *list) { if(list != 0) { TLinkList* l_list = (TLinkList *)list; l_list->header.next = 0; l_list->length = 0; } } /* * 向單鏈表pos位置處插入元素 * @param list 單鏈表指針 * @param node 元素指針 * @param pos 插入的索引 */ int LinkList_Insert(LinkList *list,LinkListNode *node,int pos) { //類型轉(zhuǎn)換 TLinkList* l_list = (TLinkList *)list; //判斷鏈表指針和節(jié)點指針不能為空,當前插入的位置是否合法 int ret = ((list != 0) && (node != 0) && (pos >= 0) && (pos <= l_list->length)); if(ret) { LinkListNode* current = (LinkList *)l_list; int i; //移動到需要插入的位置的前驅(qū) for(i = 0; i < pos;i++) { current = current->next; } node->next = current->next; //被插入節(jié)點的后繼指針指向前驅(qū)節(jié)點的后繼指針 current->next = node; //前驅(qū)節(jié)點的后繼指針指向被插入節(jié)點 l_list->length++; } return ret; } /* * 獲取單鏈表中索引位置處的元素 * @param list 單鏈表指針 * @param pos 單鏈表索引值 * @param return 元素指針 */ LinkListNode* LinkList_Get(LinkList *list,int pos) { LinkListNode* node = 0; TLinkList * l_list = (TLinkList *)list; //判斷鏈表指針不為空,且獲取的索引合法 if( (l_list != 0) && (pos >= 0) && (pos < l_list->length) ) { LinkListNode* current = (LinkList *)l_list; int i; for(i = 0; i < pos; i++) { current = current->next; } node = current->next; } return node; } /* * 刪除單鏈表中索引位置處的值 * @param list 單鏈表的指針 * @param pos 單鏈表索引 * @param return 非0表示刪除成功 */ int LinkList_Remove(LinkList *list,int pos) { TLinkList * l_list = (TLinkList *)list; int ret = ((l_list != 0) && (pos >= 0) && (pos < l_list->length)); if(ret) { LinkListNode* current = (LinkList *)l_list; int i; for(i = 0; i < pos; i++) { current = current->next; } //被刪除元素的前驅(qū)元素的后繼指針,指向被刪除元素的后繼指針 current->next = current->next->next; l_list->length--; } return ret; } /* * 獲取單鏈表當前已存儲元素的個數(shù) * @param list 單鏈表的指針 * @return 單鏈表中已存儲元素的個數(shù) */ int LinkList_Length(LinkList *list) { int ret = -1; if(list != 0) { TLinkList * l_list = (TLinkList *)list; ret = l_list->length; } return ret; }
測試代碼
#include#include "Linklist.h" typedef struct _node { LinkListNode node; int v; }Node; int main(void) { int i; Node n[5]; Node *node; for(i = 0;i < 5;i++) { n[i].v = i; } LinkList *list = LinkList_Create(); for(i = 0; i < 5;i++) { LinkList_Insert(list,(LinkListNode *)&(n[i]),0); } LinkList_Remove(list,2); for(i = 0; i < LinkList_Length(list);i++) { node = (Node *)LinkList_Get(list,i); printf("%d\n",node->v); } return 0; }
本文標題:【C語言數(shù)據(jù)結(jié)構(gòu)】單鏈表
當前鏈接:http://fisionsoft.com.cn/article/jgosei.html