02-数据结构-线性表2.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五节 循环链表 尾结点的指针域指向首结点。 实际应用:手机菜单 遍历的终止条件? 例:La、Lb链表的合并 // 将Lb链表中的数据结点接在La链表末尾 void Connect(LNODE * La,LNODE * Lb) { LNODE *pa, *pb; for(pa=La-next; pa-next!=La; pa=pa-next); for(pb=Lb-next; pb-next!=Lb; pb=pb-next); pa-next=Lb-next; pb-next=La; free(Lb); } 第六节 双向链表 非空表          空表             typedef struct DuLNode { ElemType data; struct DuLNode *lLink, *rLink; }DuLinkNode; 1、在*p之后插入结点*q q-rLink=p-rLink; q-lLink=p; p-rLink=q; q-rLink-lLink=q 在*p之前插入结点*q ? 2、删除*p (p-lLink)-rLink=p-rLink; (p-rLink)-lLink=p-lLink; free(p); 删除*p的前驱结点? 删除*p的后继结点? 第七节 实例:一元多项式的存储、运算 多项式的存储结构 f(x) = anxn +......+a2x2 + a1x + a0 1、顺序结构 int coef[MAX]; f(x) = 14x101+ 5x50 - 3 2、链式结构 typedef struct polynode { int coef; int index; struct node *next; }PolyNode; 3、示例 输入数据(指数无序) 输出多项式 (指数降序) 多项式1 多项式2 count=2 coef=5,index=3 coef=1,index=5 count=3 coef=2,index=7 coef=7,index=2 coef=6,index=3 count=4 coef=2,index=7 coef=1,index=5 coef=11,index=3 coef=7,index=2 4、结构细节设计 带特殊头结点的单向链表; 结点按指数降序排列; 特殊头结点的index域:多项式的项数。 5、程序框架设计 main() { PolyNode *L1,*L2; L1=PolyNode_Create(); PolyNode_Print(L1); L2=PolyNode_Create(); PolyNode_Print(L2); PolyNode_Add(L1,L2); // L1+L2=L1 PolyNode_Print(L1); } void PolyNode_Print(PolyNode *head) { PolyNode *p; printf(count=%d\n,head-index); //打印项数 for(p=head-next; p; p=p-next) printf(coef=%d,index=%d\n,p-coef, p-index); } 二、以插入为基础的算法 1、将*newp插入到降序链表*head中 void PolyNode_Insert(PolyNode *head, PolyNode *newp); { PolyNode *p,*pre; // 定位 for(pre=head,p=pre-next; p; pre=p,p=p-next) if(p-index = newp-index) break; if(p==NULL || p-index newp-index) //在*pre之后插入 { newp-next=p; pre-next=newp; head-index++; } else { p-coef += newp-coef; //合并同类项 free(newp); if(p-coef==0) //删除 { pre-next=p-next; free(p); head-index--; } } } 2、利用PolyNode_Insert函数,建立有序链表 PolyNode *PolyNode_Create() { int i,count; PolyNode *head,*newp; scanf(%d\n,

文档评论(0)

飞扬的岁月 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档