链表和顺序表的不同之处在于,链表数据元素之间的逻辑关系是通过节点之间的指针来实现的。 逻辑上相邻的两个元素之间的物理地址与顺序表不同,不是相邻的。
线性链表的存储结构包括数据域和指针域。 例如p-data、p-next等
示例:GetElem函数在单链表中的实现,找到第I个元素:
//2020.7.24GetElem单链表函数StatusGetElem_L(linklistL,int i,ElemType e ) (//首先将指针指向头节点的下一个元素p=L - next; j=1; while(pjI ) {p=p- next; j; (if (! p || j i )返回错误; e=p - data; 返回确定; )我认为主题的第I个元素是“p指针指向I”,如果存在头节点的话。 第I个位置也是指针指向I。 这个问题总是要好好考虑的。 是否加1的问题,很烹饪。
在第I个位置之前插入节点(实现代码)
//2020.7.24飞行单链接列表插入函数Statusinsert_L(linklistL,int i,ElemType e ) {p=L; j=0; wile(pjI-1 ) {p=p - next; j;//找到第I个位置之前的要素if (! p || j i - 1 )返回错误; //在先插入的节点c中分配存储器空间s=(linklist ) malloc ) sizeof ) lnode ); s - data=e; s - next=p - next; //s指针字段指向p的指针字段p - next=s; //p的指针字段指向s return OK; }删除第I个元素并返回
//2020.7.24飞行单链表删除节点函数statusdelete_l(linklistL,int i,ElemType e ) ({p=L - next; j=0; //首先找到要删除的节点的前一个节点while(PJI-1 ) {p=p - next; j; (if (! p || j i - 1 )返回错误; q=p - next; e=q - data,用于定义要删除的节点p - next=q - next; free(q; //q释放空间return OK算法:将2个有序的链表合并为1个链表
//2020.7.24飞行MergetList ()单链接列表函数voidmergelist_L(linklistla,LinkList LB,LinkList LC ) {pa=LA - next pb=LB - next; pc=LC=LA; //定义指针while(paPb ) if (pa-data p B- data ) ) {pc - next=pb; pc=pb; pb=pb - next; } else{pc - next=pa; pc=pa; pa=pa - next; }pc - next=pa? pa :pb; //? 当3360运算符3360pa为真时,表达式的值为pa,当pa为假时,表达式的值为Pbfree(lb ); }