單鏈表之一元多項式求和C++實現

来源:http://www.cnblogs.com/zfc-java/archive/2017/04/03/6661458.html
-Advertisement-
Play Games

單鏈表之一元多項式求和 一元多項式求和單鏈表實現偽代碼1、工作指針 pre、p、qre、q 初始化2、while(p 存在且 q 存在)執行下列三種情況之一: 2.1、若 p->exp < q->exp:指針 p 後移; 2.2、若 p->exp > q->exp,則 2.2.1、將結點 q 插到結 ...


單鏈表之一元多項式求和

一元多項式求和單鏈表實現偽代碼

1、工作指針 pre、p、qre、q 初始化
2、while(p 存在且 q 存在)執行下列三種情況之一:
  2.1、若 p->exp < q->exp:指針 p 後移;
  2.2、若 p->exp > q->exp,則
    2.2.1、將結點 q 插到結點 p 之前
    2.2.2、指針 p 指向他原指結點的下一個結點;
  2.3、若 p->exp == q->exp,則
    2.3.1、p->coef = p->coef + q->coef
    2.3.2、若 p->coef == 0,則執行下列操作,否則指針 p 後移,
      2.3.2.1、刪除結點 p
      2.3.2.2、使指針 p 指向它原指結點的下一個結點
    2.3.3、刪除結點 q
    2.3.4、使指針 q 指向它原指結點的下一個結點
3、如果 q 不為空,將結點 q 鏈接在第一個單鏈表的後面。
一、一元多項式求和單鏈表實現頭文件:PolynomialOfOneIndeterminateAdd.h

  1 //一元多項式求和頭文件
  2 #include<iostream>
  3 using namespace std;
  4 template<class DataType>
  5 //定義單鏈表結點
  6 struct Node
  7 {
  8   //數據域:非零項的繫數和指數
  9   DataType coef, exp;
 10   //指針域
 11   Node<DataType> *next;
 12 };
 13 //定義存放一元多項式的類
 14 template<class DataType>
 15 class Linklist
 16 {
 17 private:
 18   Node<DataType> *first;
 19   //一元多項式的項數
 20   int size;
 21 public:
 22   //構造函數
 23   Linklist();
 24   //初始化一元多項式
 25   void Init();
 26   //輸出一元多項式
 27   void Print();
 28   //定義一元多項式的的加法操作
 29   Linklist<DataType> operator+(Linklist &p2);
 30 };
 31 
 32  
 33 
 34 //構造函數
 35 template<class DataType>
 36 Linklist<DataType>::Linklist()
 37 {
 38   first = new Node<DataType>;
 39   first = NULL;
 40   size = 0;
 41 }
 42 
 43  
 44 
 45 //實現一元多項式單鏈表的初始化
 46 template<class DataType>
 47 void Linklist<DataType>::Init()
 48 {
 49   cout << "多項式的元素個數為:";
 50   cin >> size;
 51   DataType x, y;
 52   cout << "請輸入第1項的繫數:";
 53   cin >> x;
 54   cout << "請輸入第1項的指數:";
 55   cin >> y;
 56   Node<DataType> *m;
 57   m = new Node<DataType>;
 58   m->coef = x;
 59   m->exp = y;
 60   m->next = NULL;
 61   first = m;
 62   for (int i = 2; i <= size; i++)
 63   {
 64     cout << "請輸入第" << i << "項的繫數:";
 65     cin >> x;
 66     cout << "請輸入第" << i << "項的指數:";
 67     cin >> y;
 68     Node<DataType> *n;
 69     n = new Node<DataType>;
 70     n->coef = x;
 71     n->exp = y;
 72     n->next = NULL;
 73     m->next = n;
 74     m = n;
 75   }
 76 }
 77 
 78  
 79 
 80 //實現一元多項式單鏈表實的輸出
 81 template<class DataType>
 82 void Linklist<DataType>::Print()
 83 {
 84   Node<DataType> *m = first;
 85   while (m != NULL)
 86   {
 87     if (m == first)
 88     {
 89       if (m->coef != 0 && m->exp != 0)
 90       {
 91         cout << m->coef << "x^" << m->exp;
 92       }    
 93       else if (m->coef != 0 && m->exp == 0)
 94       {
 95         cout << m->coef;
 96       }    
 97     }
 98     else
 99     {
100       if (m->coef > 0 && m->exp != 0){
101         cout << "+" << m->coef << "x^" << m->exp;
102       }    
103       else if (m->coef<0 && m->exp != 0)
104       {
105         cout << m->coef << "x^" << m->exp;
106       }    
107       else if (m->coef>0 && m->exp == 0)
108       {
109          cout << "+" << m->coef;
110       }    
111       else if (m->coef < 0 && m->exp == 0)
112       {
113         cout << m->coef;
114       }    
115     }
116     m = m->next;
117   }
118   cout << endl;
119 }
120 
121  
122 
123 //實現一元多項式單鏈表的相加
124 template<class DataType>
125 Linklist<DataType> Linklist<DataType>::operator+(Linklist &p2)
126 {
127   //聲明工作指針
128   Node<DataType> *pre, *p, *qre, *q;
129   //初始化工作指針
130   pre = this->first; 
131   p = pre->next;
132   qre = p2.first;
133   q = qre->next;
134   while (p != NULL&&q != NULL)
135   {
136     //p->exp < q->exp:指針 p 後移
137     if (p->exp < q->exp)
138     {
139       pre = p;
140       p = p->next;
141     }
142     //p->exp > q->exp:將結點 q 插到結點 p 之前,指針 p 指向他原指結點的下一個結點
143     if (p->exp > q->exp)
144     {
145       Node<DataType> *s;
146       s = q->next;
147       pre->next = q;
148       q->next = p;
149       q = s;
150     }
151     //p->exp == q->exp:
152     if (p->exp == q->exp)
153     {
154       //p->coef = p->coef + q->coef
155       p->coef = p->coef + q->coef;
156       if (p->coef == 0)
157       {
158         //使指針 p 指向它原指結點的下一個結點
159         pre->next = p->next;
160         //刪除結點 p
161         delete p;
162         p = p->next;
163       }
164       else
165       {
166         pre = p;
167         p = pre->next;
168       }
169       //使指針 q 指向它原指結點的下一個結點
170       qre->next = q->next;
171       //刪除結點 q
172       delete q;
173       q = qre->next;
174     }
175   }
176   //如果 q 不為空,將結點 q 鏈接在第一個單鏈表的後面。
177   if (q != NULL)
178   {
179     pre->next = q;
180     delete p2.first;
181   }
182   return *this;
183 }

二、測試一元多項式單鏈表實現的源程式:TestPolynomialOfOneIndeterminateAdd.cpp

 1 #include<iostream>
 2 //引入一元多項式之單鏈表實現的頭文件
 3 #include "PolynomialOfOneIndeterminateAdd.h"
 4 using namespace std;
 5 
 6 int main()
 7 {
 8   //聲明一元多項式單鏈表
 9   Linklist<int> p1, p2, p3;
10   cout << "請按指數由小到大的順序定義多項式A(x):" << endl;
11   p1.Init();
12   cout << "輸入的多項式A(x)為:";
13   p1.Print();
14   cout << "\n請按指數由小到大的順序定義多項式B(x):" << endl;
15   p2.Init();
16   cout << "輸入的多項式B(x)為:";
17   p2.Print();
18   //一元多項式相加
19   p3 = p1 + p2;
20   cout << "\n多項式A(x)和多項式B(x)的和為:" << endl;
21   p3.Print();
22   return 0;
23 }

三、運行示例結果

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:Antonio Leiva 時間:Mar 28, 2017 原文鏈接:https://antonioleiva.com/lambdas-kotlin-android/ 雖然,我在其它文章講過一點Lambda表達式,我願意更深層次解釋Kotlin中Lambda表達式是怎樣工作的,以及當我們用Ja ...
  • 一、推流 1. 概念 推流,就是將採集到的音頻,視頻數據通過流媒體協議發送到流媒體伺服器。 2. 推流過程 推流前的工作:採集,處理,編碼壓縮 推流中做的工作: 封裝,上傳 3. 推流框架介紹 LFLiveKit (推薦):由Adobe公司開發。框架已經實現了 後臺錄製、美顏功能,支持H264(視頻 ...
  • Base class for maintaining global application state. You can provide your own implementation by creating a subclass and specifying the fully-qualified ...
  • 2017-04-02 鍵 類型 值 說明 Localization native development region String China/Canada/Japan/United State等 本地化,設成相應的值後,App中的顯示語言等信息變為相應國家的語言 Bundle display n ...
  • mysql主從複製原理 1)在mysql主庫上,將改變記錄到二進位日誌(binary log)中。 2)在mysql從庫上,IO線程將mysql主庫上二進位日誌(binary log)複製到中繼日誌(replay log)中。mysql從庫上開啟1個IO線程,併在mysql主庫上打開一個連接,然後開 ...
  • use mysql;/*創建原始數據表*/DROP TABLE IF EXISTS `articleinfo`;CREATE TABLE `articleinfo`(`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,`title` VA ...
  • 搜了一大堆做個總結,以下是Sql Server中的方法,備忘下 1,利用sysobjects系統表 在這個表中,在資料庫中創建的每個對象(例如約束、預設值、日誌、規則以及存儲過程)都有對應一行,我們在該表中篩選出xtype等於U的所有記錄,就為資料庫中的表了。 示例語句如下:: select * f ...
  • /*定義變數方式1:set @變數名=值;方式2:select 值 into @變數名;方式3:declare 變數名 類型(字元串類型加範圍) default 值; in參數 入參的值會僅在存儲過程中起作用out參數 入參的值會被置為空,存儲中計算的值會影響外面引用該變數的值inout參數 入參的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...