首页 > 编程知识 正文

数据结构散列表,循环链表是线性结构吗

时间:2023-05-06 04:50:20 阅读:159955 作者:3411

链表和顺序表的不同之处在于,链表数据元素之间的逻辑关系是通过节点之间的指针来实现的。 逻辑上相邻的两个元素之间的物理地址与顺序表不同,不是相邻的。

线性链表的存储结构包括数据域和指针域。 例如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 ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。