【C语言数据结构】单链表
?
LinkList.h?
#ifndefLINK_LIST_H#defineLINK_LIST_H//鏈表節(jié)點(diǎn)typedefstruct_LinkListNode{struct_LinkListNode*next;}LinkListNode;//單鏈表typedefvoidLinkList;/**創(chuàng)建單鏈表*@return返回單鏈表的指針*/LinkList*LinkList_Create();/**銷毀單鏈表*@paramlist單鏈表的指針*/voidLinkList_Destroy(LinkList*list);/**清空單鏈表*@paramlist單鏈表的指針*/voidLinkList_Clear(LinkList*list);/**向單鏈表pos位置處插入元素*@paramlist單鏈表指針*@paramnode元素指針*@parampos插入的索引*/intLinkList_Insert(LinkList*list,LinkListNode*node,intpos);/**獲取單鏈表中索引位置處的元素*@paramlist單鏈表指針*@parampos單鏈表索引值*@paramreturn元素指針*/LinkListNode*LinkList_Get(LinkList*list,intpos);/**刪除單鏈表中索引位置處的值*@paramlist單鏈表的指針*@parampos單鏈表索引*@paramreturn非0表示刪除成功*/intLinkList_Remove(LinkList*list,intpos);/**獲取單鏈表當(dāng)前已存儲(chǔ)元素的個(gè)數(shù)*@paramlist單鏈表的指針*@return單鏈表中已存儲(chǔ)元素的個(gè)數(shù)*/intLinkList_Length(LinkList*list);#endif//LINKLIST_HLinkLink.c?
#include"Linklist.h"#include<malloc.h>//單鏈表typedefstruct_LinkList{LinkListNodeheader;//鏈表頭節(jié)點(diǎn)intlength;//鏈表長(zhǎng)度}TLinkList;/**創(chuàng)建單鏈表*@return返回單鏈表的指針*/LinkList*LinkList_Create(){TLinkList*list=(TLinkList*)malloc(sizeof(LinkList));if(list!=0){list->header.next=0;//初始化頭結(jié)點(diǎn)的后繼指針為空list->length=0;}returnlist;}/**銷毀單鏈表*@paramlist單鏈表的指針*/voidLinkList_Destroy(LinkList*list){free(list);}/**清空單鏈表*@paramlist單鏈表的指針*/voidLinkList_Clear(LinkList*list){if(list!=0){TLinkList*l_list=(TLinkList*)list;l_list->header.next=0;l_list->length=0;}}/**向單鏈表pos位置處插入元素*@paramlist單鏈表指針*@paramnode元素指針*@parampos插入的索引*/intLinkList_Insert(LinkList*list,LinkListNode*node,intpos){//類型轉(zhuǎn)換TLinkList*l_list=(TLinkList*)list;//判斷鏈表指針和節(jié)點(diǎn)指針不能為空,當(dāng)前插入的位置是否合法intret=((list!=0)&&(node!=0)&&(pos>=0)&&(pos<=l_list->length));if(ret){LinkListNode*current=(LinkList*)l_list;inti;//移動(dòng)到需要插入的位置的前驅(qū)for(i=0;i<pos;i++){current=current->next;}node->next=current->next;//被插入節(jié)點(diǎn)的后繼指針指向前驅(qū)節(jié)點(diǎn)的后繼指針current->next=node;//前驅(qū)節(jié)點(diǎn)的后繼指針指向被插入節(jié)點(diǎn)l_list->length++;}returnret;}/**獲取單鏈表中索引位置處的元素*@paramlist單鏈表指針*@parampos單鏈表索引值*@paramreturn元素指針*/LinkListNode*LinkList_Get(LinkList*list,intpos){LinkListNode*node=0;TLinkList*l_list=(TLinkList*)list;//判斷鏈表指針不為空,且獲取的索引合法if((l_list!=0)&&(pos>=0)&&(pos<l_list->length)){LinkListNode*current=(LinkList*)l_list;inti;for(i=0;i<pos;i++){current=current->next;}node=current->next;}returnnode;}/**刪除單鏈表中索引位置處的值*@paramlist單鏈表的指針*@parampos單鏈表索引*@paramreturn非0表示刪除成功*/intLinkList_Remove(LinkList*list,intpos){TLinkList*l_list=(TLinkList*)list;intret=((l_list!=0)&&(pos>=0)&&(pos<l_list->length));if(ret){LinkListNode*current=(LinkList*)l_list;inti;for(i=0;i<pos;i++){current=current->next;}//被刪除元素的前驅(qū)元素的后繼指針,指向被刪除元素的后繼指針current->next=current->next->next;l_list->length--;}returnret;}/**獲取單鏈表當(dāng)前已存儲(chǔ)元素的個(gè)數(shù)*@paramlist單鏈表的指針*@return單鏈表中已存儲(chǔ)元素的個(gè)數(shù)*/intLinkList_Length(LinkList*list){intret=-1;if(list!=0){TLinkList*l_list=(TLinkList*)list;ret=l_list->length;}returnret;}測(cè)試代碼?
#include<stdio.h>#include"Linklist.h"typedefstruct_node{LinkListNodenode;intv;}Node;intmain(void){inti;Noden[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);}return0;}?
?海外專線有很多產(chǎn)品類型,每種類型的作用都不一樣,今天和大家就一起討論下海外專線。第一類:國(guó)際數(shù)據(jù)鏈路產(chǎn)品,包括IPLC和IEPL。適用于兩點(diǎn)間的組網(wǎng),也是運(yùn)營(yíng)商提供給企業(yè)最多的專線產(chǎn)品,因網(wǎng)絡(luò)問題,可靠性高 ,被企業(yè)廣泛接受。第二類:VPLS和MPLS 虛擬專用網(wǎng)組網(wǎng)產(chǎn)品。
總結(jié)
以上是生活随笔為你收集整理的【C语言数据结构】单链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .top域名应注意什么
- 下一篇: 使用数组,求出下列数列的前&nb