欢迎光临散文网 会员登陆 & 注册

【C语言数据结构】单链表

2021-08-20 10:56 作者:Vecloud_  | 我要投稿


LinkList.h 

#ifndefLINK_LIST_H#defineLINK_LIST_H//链表节点typedefstruct_LinkListNode{struct_LinkListNode*next;}LinkListNode;//单链表typedefvoidLinkList;/**创建单链表*@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);/**获取单链表当前已存储元素的个数*@paramlist单链表的指针*@return单链表中已存储元素的个数*/intLinkList_Length(LinkList*list);#endif//LINKLIST_HLinkLink.c 
#include"Linklist.h"#include<malloc.h>//单链表typedefstruct_LinkList{LinkListNodeheader;//链表头节点intlength;//链表长度}TLinkList;/**创建单链表*@return返回单链表的指针*/LinkList*LinkList_Create(){TLinkList*list=(TLinkList*)malloc(sizeof(LinkList));if(list!=0){list->header.next=0;//初始化头结点的后继指针为空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){//类型转换TLinkList*l_list=(TLinkList*)list;//判断链表指针和节点指针不能为空,当前插入的位置是否合法intret=((list!=0)&&(node!=0)&&(pos>=0)&&(pos<=l_list->length));if(ret){LinkListNode*current=(LinkList*)l_list;inti;//移动到需要插入的位置的前驱for(i=0;i<pos;i++){current=current->next;}node->next=current->next;//被插入节点的后继指针指向前驱节点的后继指针current->next=node;//前驱节点的后继指针指向被插入节点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;}//被删除元素的前驱元素的后继指针,指向被删除元素的后继指针current->next=current->next->next;l_list->length--;}returnret;}/**获取单链表当前已存储元素的个数*@paramlist单链表的指针*@return单链表中已存储元素的个数*/intLinkList_Length(LinkList*list){intret=-1;if(list!=0){TLinkList*l_list=(TLinkList*)list;ret=l_list->length;}returnret;}测试代码 
#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;} 

了解更多网络知识关注:http://www.vecloud.com/

【C语言数据结构】单链表的评论 (共 条)

分享到微博请遵守国家法律