数据结构第02章_线性表.ppt

数据结构第02章_线性表

* * * * * * * * * * * * * * * * * 显然,单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。同时,由于终端结点无后继,故终端结点的指针域为空,即null. * 显然,单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。同时,由于终端结点无后继,故终端结点的指针域为空,即null. * * * * * * * * * * * 设p,q分别指向A,B中某一结点,p,q初值是第一结点 比较 p-exp与q-exp p-exp q-exp: p结点是和多项式中的一项 p后移,q不动 p-exp q-exp: q结点是和多项式中的一项        将q插在p之前,q后移,p不动 p-exp = q-exp: 系数相加 0:从A表中删去p, 释放p,q,p,q后移 ?0:修改p系数域, 释放q,p,q后移 直到p或q为NULL 若q==NULL,结束 若p==NULL,将B中剩余部分连到A上 运算规则 Void AddPolyn( polynomial pa, polynomial pb ) { ha=GetHead(pa); hb=GetHead(pb) ; // ha和hb分别指向Pa和Pb的头结点 qa=NextPos(pa, ha); qb=NextPos(pb, hb) ; //qa和qb分别指向Pa和Pb中当前结点 ha qa qb 4 0 6 4 5 8 4 12 ∧ 2 3 - 5 8 3 12 7 15 ∧ 0 -1 hb 0 -1 while (qa qb ) { //Pa和Pb均非空 a=GetCurElem(qa); b=GetCurElem(qb); ?//a和b为两表中当前比较元素 switch(*cmp(a, b) ) { case -1; //pa当前的指数小于pb当前的指数 ha=qa; qa=NextPos(pa, qa); break; case 1; //pa当前的指数大于pb当前的指数 DelFirst(hb,qb); InsFirst(ha,qb); qb=NextPos(pb, hb); ha=NextPos(pa, ha); break; case 0; sum=a.coef+b.coef; if (sum!=0) { //修改pa当前结点系数 SetCurElem(qa,sum); ha=qa; } DelFirst(ha,qa); FreeNode(qa); } DelFirst(hb,qb); FreeNode(qb); qb=NextPos(pb,hb); qa=NextPos(pa,ha); break; else { //删除pa当前结点 7 if (!ListEmpty(pb)) Append(pa, qb) ; //链接pb剩余结点 FreeNode(hb); //释放pb头结点 pa 12 15 4 7 7 6 4 ) ( x x x x C + + + = 3 2 x + -两个一元多项式相加的算法- Void AddPolyn( polynomial pa, polynomial pb ) { ha=GetHead(pa); hb=GetHead(pb) ; // ha和hb分别指向Pa和Pb的头结点 qa=NextPos(pa, ha); qb=NextPos(pb, hb) ; //qa和qb分别指向Pa和Pb中当前结点 while (qa qb ) { //Pa和Pb均非空 a=GetCurElem(qa); b=GetCurElem(qb); ?//a和b为两表中当前比较元素 switch(*cmp(a, b) ) { case -1; //pa当前的指数小于pb当前的指数

文档评论(0)

1亿VIP精品文档

相关文档