《数据结构》-第二章 线性表_第1页
《数据结构》-第二章 线性表_第2页
《数据结构》-第二章 线性表_第3页
《数据结构》-第二章 线性表_第4页
《数据结构》-第二章 线性表_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章线性表210STATUSDELETEKSQLISTFORCOUNT1ICOUNT1VALISTSIZERETURNERRORVALENGTHFORIVALENGTH1VAELEMIXIVAELEMI1VAELEMIVAELEMI1XRETURNOK/INSERT_SQLIST212INTLISTCOMPSQLISTA,SQLISTB/比较字符表A和B,并用返回值表示结果,值为正,表示AB值为负,表示ANEXTPPPNEXTRETURNP/LOCATE214INTLENGTHLINKLISTL/求链表的长度FORK0,PLPNEXTPPNEXT,KRETURNK/LENGTH215VOIDLISTCONCATLINKLISTHA,LINKLISTHB,LINKLISTPHAWHILEPNEXTPPNEXTPNEXTHB/LISTCONCAT216见书后答案217STATUSINSERTLINKLISTQLINKLISTMALLOCSIZEOFLNODEQDATABIFI1QNEXTPLQ/插入在链表头部ELSEWHILEI1PPNEXTQNEXTPNEXTPNEXTQ/插入在第I个元素的位置/INSERT218STATUSDELETELINKLIST/删除第一个元素ELSEPLWHILEI1PPNEXTPNEXTPNEXTNEXT/删除第I个元素/DELETE219STATUSDELETE_BETWEENLINKLISTWHILEPNEXTDATANEXT/P是最后一个不大于MINK的元素IFPNEXT/如果还有比MINK更大的元素QPNEXTWHILEQDATANEXT/Q是第一个不小于MAXK的元素PNEXTQ/DELETE_BETWEEN220STATUSDELETE_EQUALLINKLISTQPNEXT/P,Q指向相邻两元素WHILEPNEXTIFPDATAQDATAPPNEXTQPNEXT/当相邻两元素不相等时,P,Q都向后推一步ELSEWHILEQDATAPDATAFREEQQQNEXTPNEXTQPQQPNEXT/当相邻元素相等时删除多余元素/ELSE/WHILE/DELETE_EQUAL221VOIDREVERSESQLISTIAELEMJ/REVERSE222VOIDLINKLIST_REVERSELINKLIST为简化算法,假设表长大于2PLNEXTQPNEXTSQNEXTPNEXTNULLWHILESNEXTQNEXTPPQQSSSNEXT/把L的元素逐个插入新表表头QNEXTPSNEXTQLNEXTS/LINKLIST_REVERSE分析本算法的思想是,逐个地把L的当前元素Q插入新的链表头部,P为新表表头223VOIDMERGE1LINKLISTQBNEXTCAWHILEPPNEXTQ/将B的元素插入IFSTQNEXTQNEXTS/如A非空,将A的元素插入PSQT/WHILE/MERGE1224VOIDREVERSE_MERGELINKLISTPBBNEXTPRENULL/PA和PB分别指向A,B的当前元素WHILEPA|PBIFPADATADATA|PBPCPAQPANEXTPANEXTPREPAQ/将A的元素插入新表ELSEPCPBQPBNEXTPBNEXTPREPBQ/将B的元素插入新表PREPCCAANEXTPC/构造新表头/REVERSE_MERGE分析本算法的思想是,按从小到大的顺序依次把A和B的元素插入新表的头部PC处,最后处理A或B的剩余元素225VOIDSQLIST_INTERSECTSQLISTA,SQLISTB,SQLISTJ1K0WHILEAELEMIIFAELEMIBELEMJCELEMKAELEMI/当发现了一个在A,B中都存在的元素,IJ/就添加到C中/WHILE/SQLIST_INTERSECT226VOIDLINKLIST_INTERSECTLINKLISTA,LINKLISTB,LINKLISTQBNEXTPCLNODEMALLOCSIZEOFLNODEWHILEPELSEIFPDATAQDATAQQNEXTELSESLNODEMALLOCSIZEOFLNODESDATAPDATAPCNEXTSPCSPPNEXTQQNEXT/WHILECPC/LINKLIST_INTERSECT227VOIDSQLIST_INTERSECT_TRUESQLISTJ1K0WHILEAELEMIELSEIFAELEMIAELEMKAELEMKAELEMI/当发现了一个在A,B中都存在的元素IJ/且C中没有,就添加到C中/WHILEWHILEAELEMKAELEMK0/SQLIST_INTERSECT_TRUE228VOIDLINKLIST_INTERSECT_TRUELINKLISTQBNEXTPCAWHILEPELSEIFPDATAQDATAQQNEXTELSEIFPDATAPCDATAPCPCNEXTPCDATAPDATAPPNEXTQQNEXT/WHILE/LINKLIST_INTERSECT_TRUE229VOIDSQLIST_INTERSECT_DELETESQLISTJ0K0M0/I指示A中元素原来的位置,M为移动后的位置WHILEICELEMKKELSESAMEBELEMJ/找到了相同元素SAMEWHILEBELEMJSAMEJWHILECELEMKSAMEK/J,K后移到新的元素WHILEINEXTQCNEXTRANEXTWHILEPELSEIFPDATAQDATAQQNEXTELSEUPDATA/确定待删除元素UWHILERNEXTDATANEXT/确定最后一个小于U的元素指针RIFRNEXTDATAUSRNEXTWHILESDATAUTSSSNEXTFREET/确定第一个大于U的元素指针S/WHILERNEXTS/删除R和S之间的元素/IFWHILEPDATAUPPNEXTWHILEQDATAUQQNEXT/ELSE/WHILE/LINKLIST_INTERSECT_DELETE231STATUSDELETE_PRECILNODES/删除单循环链表中结点S的直接前驱PSWHILEPNEXTNEXTSPPNEXT/找到S的前驱的前驱PPNEXTSRETURNOK/DELETE_PRE232STATUSDULNODE_PREDULINKLISTPNEXTPREPPNEXTPNEXTPREPRETURNOK/DULNODE_PRE233STATUSLINKLIST_DIVIDELINKLISTACILISTMALLOCSIZEOFCILNODEPABCILISTMALLOCSIZEOFCILNODEQBCCILISTMALLOCSIZEOFCILNODERC/建立头结点WHILESIFISALPHABETSDATAPNEXTSPSELSEIFISDIGITSDATAQNEXTSQSELSERNEXTSRS/WHILEPNEXTAQNEXTBRNEXTC/完成循环链表/LINKLIST_DIVIDE234VOIDPRINT_XORLINKEDLISTXORLINKEDLISTL/从左向右输出异或链表的元素值PLLEFTPRENULLWHILEPPRINTF“D“,PDATAQXORPPLRPTR,PREPREPPQ/任何一个结点的LRPTR域值与其左结点指针进行异或运算即得到其右结点指针/PRINT_XORLINKEDLIST235STATUSINSERT_XORLINKEDLISTXORLINKEDLISTPRENULLRXORNODEMALLOCSIZEOFXORNODERDATAXIFI1/当插入点在最左边的情况PLRPTRXORPPLRPTR,RRLRPTRPLLEFTRRETURNOKJ1QPLRPTR/当插入点在中间的情况WHILEJLRPTR,PREPREPPQ/WHILE/在P,Q两结点之间插入IFQRETURNINFEASIBLE/I不可以超过表长PLRPTRXORPXORPPLRPTR,Q,RQLRPTRXORPXORPQLRPTR,P,RRLRPTRXORPP,Q/修改指针RETURNOK/INSERT_XORLINKEDLIST236STATUSDELETE_XORLINKEDLISTXORLINKEDLISTPRENULLIFI1/删除最左结点的情况QPLRPTRQLRPTRXORPQLRPTR,PLLEFTQFREEPRETURNOKJ1QPLRPTRWHILEJLRPTR,PREPREPPQ/WHILE/找到待删结点QIFQRETURNINFEASIBLE/I不可以超过表长IFLRIGHTQ/Q为最右结点的情况PLRPTRXORPPLRPTR,QLRIGHTPFREEQRETURNOKRXORPQLRPTR,P/Q为中间结点的情况,此时P,R分别为其左右结点PLRPTRXORPXORPPLRPTR,Q,RRLRPTRXORPXORPRLRPTR,Q,P/修改指针FREEQRETURNOK/DELETE_XORLINKEDLIST237VOIDOEREFORMDULINKEDLISTWHILEPNEXTLPPNEXT/此时P指向最后一个奇数结点IFPNEXTLPNEXTLPREPREELSEPNEXTLPREPPNEXT/此时P指向最后一个偶数结点WHILEPPREPRELPNEXTPPREPREPPNEXTPNEXTL/按题目要求调整了NEXT链的结构,此时PRE链仍为原状FORPLPNEXTLPPNEXTPNEXTPREPLPREP/调整PRE链的结构,同232方法/OEREFORM分析NEXT链和PRE链的调整只能分开进行如同时进行调整的话,必须使用堆栈保存偶数结点的指针,否则将会破坏链表结构,造成结点丢失238DULNODELOCATE_DULISTDULINKEDLISTWHILEPDATAXIFPLRETURNNULL/没找到PFREQQPPREWHILEQFREQFREQQQPRE/查找插入位置IFQPPREPPRENEXTPNEXTPNEXTPREPPREQNEXTPREPPNEXTQNEXTQNEXTPPPREQ/调整位置RETURNP/LOCATE_DULIST239FLOATGETVALUE_SQPOLYSQPOLYP,INTX0/求升幂顺序存储的稀疏多项式的值POLYTERMQXP1QPDATASUM0EX0WHILEQCOEFWHILEEXEXPXPX0SUMQCOEFXPQRETURNSUM/GETVALUE_SQPOLY240VOIDSUBTRACT_SQPOLYSQPOLYP1,SQPOLYP2,SQPOLYCREATE_SQPOLYP3/建立空多项式P3PP1DATAQP2DATARP3DATAWHILEPCOEFREXPPEXPPRELSEIFPEXPEXPRCOEFQCOEFREXPQEXPQRELSEIFPCOEFQCOEF0/只有同次项相减不为零时才需要存入P3中RCOEFPCOEFQCOEFREXPPEXPR/IFPQ/ELSE/WHILEWHILEPCOEF/处理P1或P2的剩余项RCOEFPCOEFREXPPEXPPRWHILEQCOEFRCOEFQCOEFREXPQEXPQR/SUBTRACT_SQPOLY241VOIDQIUDAO_LINKEDPOLYLINKEDPOLYIFPDATAEXPLNEXTPNEXTPPNEXT/跳过常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论