熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 數據結構 >> 正文

數據結構學習講座(C++) 單鏈表(3)

2013-11-15 15:09:17  來源: 數據結構 

單鏈表()


下面將完成單鏈表的賦值運算的重載請把這部分加到List類的public部分的確這部分也可以放在多項式類裡實現但是復制一個多項式實際上就是復制一個單鏈表與其單單做一個多項式賦值還不如完成單鏈表的賦值讓派生類都能共享

operator = (const List<Type> &l)
{
 MakeEmpty();
 for (Node<Type> *p = lfirst>link; p != NULL; p = p>link) LastInsert(p>data);

  還記得List類的private裡面的這個List(const List<Type> &l)嗎?當初怕它惹禍直接將它禁用了既然現在=都能用了為了這種語法List<Type> b = a;順便也把它完成了吧現在可以把它從private放到public了

List(const List<Type> &l)
{
 first = current = last = new Node<Type>; prior = NULL;
 for (Node<Type> *p = lfirst>link; p != NULL; p = p>link) LastInsert(p>data);
}

  終於可以這樣寫了a = b + c * d

friend Polynomial operator + (Polynomial &polyA Polynomial &polyB)
{
 Polynomial tempA = polyA;Polynomial tempB = polyB;
 PolyAdd(tempA tempB);
 return tempA;
}

friend Polynomial operator * (Polynomial &polyA Polynomial &polyB)
{
 Node<Term> *pA = polyApGetFirst()>link;
 Node<Term> *pB = polyBpGetFirst()>link;
 Polynomial polyTempA polyTempB;
 int coef exp;
 if (pA == NULL || pB == NULL) return polyTempA;
 for (pA = polyApGetFirst()>link; pA != NULL; pA = pA>link)
 {
  for(pB = polyBpGetFirst()>link; pB != NULL; pB = pB>link)
  {
   coef = pA>datacoef * pB>datacoef;
   exp = pA>dataexp + pB>dataexp;
   Term term(coef exp);
   polyTempBLastInsert(term);
  }
  PolyAdd(polyTempA polyTempB);
  polyTempBInitialize();
 }
 return polyTempA;
}

  【後記】很顯然的處理上我偷懶了但這是最方便的乘法部分只要參照手工運算還是很簡單的我就不解釋了對於可以先完成(-a)這樣的算法然後就可以用加法完成了而你要是象我一樣懶很可能就會做這種事-a=-×a真的不提倡超低的效率對於除法如果你會用匯編寫多字節除法(跟手工計算很像)依樣畫葫蘆也能弄出來但首先要完成如果要寫又得好長留給你完成吧到這裡你明白原位加法的重要了吧這些運算實際上都是靠它實現的


From:http://tw.wingwit.com/Article/program/sjjg/201311/22942.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.