计算机软件技术编程基础 链表幻灯片.pptVIP

计算机软件技术编程基础 链表幻灯片.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
链表的存储结构 链式存储结构是利用任意的存储单元来存放线性表中的元素,存储数据的单元在内存中可以连续,也可以零散分布。 由于线性表中各元素间存在着线性关系,每一个元素有一个直接前驱和一个直接后继。为了表示元素间的这种线性关系,在这种结构中不仅要存储线性表中的元素,还要存储表示元素之间逻辑关系的信息。所以用链式存储结构表示线性表中的一个元素时至少需要两部分信息,除了存储每一个数据元素值以外,还需存储其后继或前驱元素所在内存的地址。两部分信息一起构成链表中的一个结点。结点的结构如下所示。 链表结构示意图 从图中可见,每个结点的存储地址存放在直接前驱的指针域中。所以要访问链表中数据元素C,必须由头指针head得到第一个结点(数据A)的地址,由该结点的指针域得到第二个结点(数据B)的地址,再由其指针域得到存储数据C的结点地址,访问该结点的数据域就可以处理数据C了。链表这种顺着指针链依次访问数据元素的特点,表明链表是一种顺序存储结构,只能顺序操作链表中元素。不能像顺序表(数组)那样可以按下标随机存取。 在链表存储结构中,不要求存储空间的连续性,数据元素之间的逻辑关系由指针来确定。 单向链表 查找运算 的实现 设计思路:设置一个跟踪链表结点的指针p1,初始时p1指向链表中的第一个结点,然后顺着next域依次指向每个结点,每指向一个结点就判断其值是否等于i,若是则返回该结点地址,否则继续往后搜索. 要访问单链表中第i个元素值,必须从头指针开始遍历链表,依次访问每个结点,直到访问到第i个结点为止。其时间复杂度为O(n)。 2.线性表查找运算*getnode(linklist *head, int i)函数、链表元素输出运算print(linklist *head)函数中,循环遍历是否进行的条件由p!=NULL改为p!=head; 其余函数运算没有变化,请自行写出相关函数的定义。 在循环链表中,除了有头指针head外,有时还可加上一个尾指针tail。尾指针tail指向最后一结点,沿最后一个结点的指针又可立即找到链表的第一个结点。在实际应用中,使用尾指针来代替头指针进行某些操作往往会更简单。 【例】将两个循环链表首尾相接进行合并,La为第一个循环链表表尾指针,Lb为第二个循环链表表尾指针,合并后Lb为新链表的尾指针,head指向整个合并后的链表。 【解】算法思路: 对两个单循环链表La,Lb进行的连接操作,是将Lb的第一个数据结点接到La的尾部。操作时需要从La的头指针开始找到La的尾结点,其时间复杂性为O(n)。而在循环链表中若采用尾指针La,Lb来标识,则时间性能将变为O(1)。其连接过程如图2-14所示。 对两个一元多项式进行相加操作的运算规则是:假设指针qa和qb分别指向多项式A(x)和B(x)中当前进行比较的某个结点,则需比较两个结点数据域的指数项,有三种情况: (1) 指针qa所指结点的指数值<指针qb所指结点的指数值时,则保留qa指针所指向的结点,qa指针后移; (2) 指针qa所指结点的指数值>指针qb所指结点的指数值时,则将qb指针所指向的结点插入到qa所指结点前,qb指针后移; (3) 指针qa所指结点的指数值=指针qb所指结点的指数值时,将两个结点中的系数相加。若和不为零,则修改qa所指结点的系数值,同时释放qb所指结点;反之,从多项式A (x)的链表中删除相应结点,并释放指针qa和qb所指结点。 多项式相加算法: struct polynode *add_poly(polynode *Ah, polynode *Bh) {polynode *qa,*qb,*s,*r,*Ch; qa=Ah;qb=Bh; //qa和qb分别指向两个链表的第一结点 r=qa;Ch=Ah;     //将链表Ah作为相加后的结果链表 while(qa!=NULLqb!=NULL) //两链表均非空 { if(qa-exp==qb-exp) //两者指数值相等 { x=qa-coef+qb-coef; if(x!=0) { qa-coef=x;r-next=qa;r=qa; s=qb++;free(s);qa++; } //相加后系数不为零时 else{s=qa++;free(s);s=qb++;free(s);} }

文档评论(0)

mkt361 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档