⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xtjd2.htm

📁 严蔚民版的数据结构的完整课件
💻 HTM
📖 第 1 页 / 共 4 页
字号:
&nbsp;&nbsp;r-&gt;data=x;<br> 
&nbsp;&nbsp;if(i==1) //当插入点在最左边的情况<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;LRPtr=XorP(p.LRPtr,r);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;LRPtr=p;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;L.left=r;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;return OK;<br> 
&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;j=1;q=p-&gt;LRPtr; //当插入点在中间的情况<br> 
&nbsp;&nbsp;while(++j&lt;i&amp;&amp;q)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;q=XorP(p-&gt;LRPtr,pre);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;pre=p;p=q;<br> 
&nbsp;&nbsp;}//while //在p,q两结点之间插入<br> 
&nbsp;&nbsp;if(!q) return INFEASIBLE; //i不可以超过表长<br> 
&nbsp;&nbsp;p-&gt;LRPtr=XorP(XorP(p-&gt;LRPtr,q),r);<br> 
&nbsp;&nbsp;q-&gt;LRPtr=XorP(XorP(q-&gt;LRPtr,p),r);<br> 
&nbsp;&nbsp;r-&gt;LRPtr=XorP(p,q); //修改指针<br> 
&nbsp;&nbsp;return OK;<br> 
}//Insert_XorLinkedList 
<p>2.36 
<p>Status Delete_XorLinkedList(XorlinkedList &amp;L,int i)//删除异或链表L的第i个元素<br> 
{<br> 
&nbsp;&nbsp;p=L.left;pre=NULL;<br> 
&nbsp;&nbsp;if(i==1) //删除最左结点的情况<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;q=p-&gt;LRPtr;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;LRPtr=XorP(q-&gt;LRPtr,p);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;L.left=q;free(p);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;return OK;<br> 
&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;j=1;q=p-&gt;LRPtr;<br> 
&nbsp;&nbsp;while(++j&lt;i&amp;&amp;q)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;q=XorP(p-&gt;LRPtr,pre);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;pre=p;p=q;<br> 
&nbsp;&nbsp;}//while //找到待删结点q<br> 
&nbsp;&nbsp;if(!q) return INFEASIBLE; //i不可以超过表长<br> 
&nbsp;&nbsp;if(L.right==q) //q为最右结点的情况<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;LRPtr=XorP(p-&gt;LRPtr,q);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;L.right=p;free(q);<br> 
&nbsp;&nbsp;&nbsp;&nbsp;return OK;<br> 
&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;r=XorP(q-&gt;LRPtr,p); //q为中间结点的情况,此时p,r分别为其左右结点<br> 
&nbsp;&nbsp;p-&gt;LRPtr=XorP(XorP(p-&gt;LRPtr,q),r);<br> 
&nbsp;&nbsp;r-&gt;LRPtr=XorP(XorP(r-&gt;LRPtr,q),p); //修改指针<br> 
&nbsp;&nbsp;free(q);<br> 
&nbsp;&nbsp;return OK;<br> 
}//Delete_XorLinkedList 
<p>2.37 
<p>void reform(DuLinkedList &amp;L)//按1,3,5,...4,2的顺序重排双向循环链表L中的所有结点<br> 
{<br> 
&nbsp;&nbsp;p=L.next;<br> 
&nbsp;&nbsp;while(p-&gt;next!=L&amp;&amp;p-&gt;next-&gt;next!=L)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;next=p-&gt;next-&gt;next;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p=p-&gt;next;<br> 
&nbsp;&nbsp;} //此时p指向最后一个奇数结点<br> 
&nbsp;&nbsp;if(p-&gt;next==L) p-&gt;next=L-&gt;pre-&gt;pre;<br> 
&nbsp;&nbsp;else p-&gt;next=l-&gt;pre;<br> 
&nbsp;&nbsp;p=p-&gt;next; //此时p指向最后一个偶数结点<br> 
&nbsp;&nbsp;while(p-&gt;pre-&gt;pre!=L)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;next=p-&gt;pre-&gt;pre;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p=p-&gt;next;<br> 
&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;p-&gt;next=L; //按题目要求调整了next链的结构,此时pre链仍为原状<br> 
&nbsp;&nbsp;for(p=L;p-&gt;next!=L;p=p-&gt;next) p-&gt;next-&gt;pre=p;<br> 
&nbsp;&nbsp;L-&gt;pre=p; //调整pre链的结构,同2.32方法<br> 
}//reform<br> 
分析:next链和pre链的调整只能分开进行.如同时进行调整的话,必须使用堆栈保存偶数结点的指针,否则将会破坏链表结构,造成结点丢失. 
<p>2.38 
<p>DuLNode* LOCATE(DuLinkedList &amp;L,int x)//带freq域的双向循环链表上的查找<br> 
{<br> 
&nbsp;&nbsp;p=L.next;<br> 
&nbsp;&nbsp;while(p.data!=x&amp;&amp;p!=L) p=p-&gt;next;<br> 
&nbsp;&nbsp;if(p==L) return NULL; //没找到<br> 
&nbsp;&nbsp;p-&gt;freq++;q=p-&gt;pre;<br> 
&nbsp;&nbsp;while(q-&gt;freq&lt;=p-&gt;freq) q=q-&gt;pre; //查找插入位置<br> 
&nbsp;&nbsp;if(q!=p-&gt;pre)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;pre-&gt;next=p-&gt;next;p-&gt;next-&gt;pre=p-&gt;pre;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;next-&gt;pre=p;p-&gt;next=q-&gt;next;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;q-&gt;next=p;p-&gt;pre=q; //调整位置<br> 
&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;return p;<br> 
}//LOCATE 
<p>2.39 
<p>float GetValue_SqPoly(SqPoly P,int x0)//求升幂顺序存储的稀疏多项式的值<br> 
{<br> 
&nbsp;&nbsp;PolyTerm *q;<br> 
&nbsp;&nbsp;xp=1;q=P.data;<br> 
&nbsp;&nbsp;sum=0;ex=0;<br> 
&nbsp;&nbsp;while(q-&gt;coef)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;while(ex&lt;q-&gt;exp) xp*=x0;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;sum+=q-&gt;coef*xp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;q++;<br> 
&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;return sum;<br> 
}//GetValue_SqPoly 
<p>2.40 
<p>void Subtract_SqPoly(SqPoly P1,SqPoly P2,SqPoly &amp;P3)//求稀疏多项式P1减P2的差式P3<br> 
{<br> 
&nbsp;&nbsp;PolyTerm *p,*q,*r;<br> 
&nbsp;&nbsp;Create_SqPoly(P3); //建立空多项式P3<br> 
&nbsp;&nbsp;p=P1.data;q=P2.data;r=P3.data;<br> 
&nbsp;&nbsp;while(p-&gt;coef&amp;&amp;q-&gt;coef)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;if(p-&gt;exp&lt;q-&gt;exp)<br> 
&nbsp;&nbsp;&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;coef=p-&gt;coef;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;exp=p-&gt;exp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p++;r++;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;else if(p-&gt;exp&lt;q-&gt;exp)<br> 
&nbsp;&nbsp;&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;coef=-q-&gt;coef;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;exp=q-&gt;exp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q++;r++;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;else<br> 
&nbsp;&nbsp;&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((p-&gt;coef-q-&gt;coef)!=0) //只有同次项相减不为零时才需要存入P3中<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;coef=p-&gt;coef-q-&gt;coef;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;exp=p-&gt;exp;r++;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//if<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p++;q++;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;}//else<br> 
&nbsp;&nbsp;}//while<br> 
&nbsp;&nbsp;while(p-&gt;coef) //处理P1或P2的剩余项<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;coef=p-&gt;coef;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;exp=p-&gt;exp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p++;r++;<br> 
&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;while(q-&gt;coef)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;coef=-q-&gt;coef;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;r-&gt;exp=q-&gt;exp;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;q++;r++;<br> 
&nbsp;&nbsp;}<br> 
}//Subtract_SqPoly 
<p>2.41 
<p>void QiuDao_LinkedPoly(LinkedPoly &amp;L)//对有头结点循环链表结构存储的稀疏多项式L求导<br> 
{<br> 
&nbsp;&nbsp;p=L-&gt;next;<br> 
&nbsp;&nbsp;if(!p-&gt;data.exp)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;L-&gt;next=p-&gt;next;p=p-&gt;next; //跳过常数项<br> 
&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;while(p!=L)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p-&gt;data.coef*=p-&gt;data.exp--;//对每一项求导<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p=p-&gt;next;<br> 
&nbsp;&nbsp;}<br> 
}//QiuDao_LinkedPoly 
<p>2.42 
<p>void Divide_LinkedPoly(LinkedPoly &amp;L,&amp;A,&amp;B)//把循环链表存储的稀疏多项式L拆成只含奇次项的A和只含偶次项的B<br> 
{<br> 
&nbsp;&nbsp;p=L-&gt;next;<br> 
&nbsp;&nbsp;A=(PolyNode*)malloc(sizeof(PolyNode));<br> 
&nbsp;&nbsp;B=(PolyNode*)malloc(sizeof(PolyNode));<br> 
&nbsp;&nbsp;pa=A;pb=B;<br> 
&nbsp;&nbsp;while(p!=L)<br> 
&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;if(p-&gt;data.exp!=2*(p-&gt;data.exp/2))<br> 
&nbsp;&nbsp;&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pa-&gt;next=p;pa=p;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;else<br> 
&nbsp;&nbsp;&nbsp;&nbsp;{<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pb-&gt;next=p;pb=p;<br> 
&nbsp;&nbsp;&nbsp;&nbsp;}<br> 
&nbsp;&nbsp;&nbsp;&nbsp;p=p-&gt;next;<br> 
&nbsp;&nbsp;}//while<br> 
&nbsp;&nbsp;pa-&gt;next=A;pb-&gt;next=B;<br> 
}//Divide_LinkedPoly</p> 
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0" align="left"> </p>  
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0" align="left"> </p>  
<hr>  
<p align="left"><b><span style="font-size:24.0pt;font-family:宋体;  
mso-ascii-font-family:&quot;Times New Roman&quot;;mso-hansi-font-family:&quot;Times New Roman&quot;;  
mso-bidi-font-family:&quot;Times New Roman&quot;;color:blue;mso-font-kerning:1.0pt;  
mso-ansi-language:EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA">数据结构辅导站</span><span style="mso-spacerun: yes; font-size: 24.0pt; font-family: Times New Roman; mso-fareast-font-family: 宋体; color: blue; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA" lang="EN-US">&nbsp;  
</span></b><span lang="EN-US" style="font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:宋体;    
mso-bidi-font-family:&quot;Times New Roman&quot;;mso-font-kerning:1.0pt;mso-ansi-language:    
EN-US;mso-fareast-language:ZH-CN;mso-bidi-language:AR-SA"><a href="index.htm">返回主页</a></span></p>  
  
</body>  
  
</html>  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -