国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu):鏈表應(yīng)用:第1關(guān):基于鏈表的兩個(gè)一元多項(xiàng)式的基本運(yùn)算

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu):鏈表應(yīng)用:第1關(guān):基于鏈表的兩個(gè)一元多項(xiàng)式的基本運(yùn)算。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

任務(wù)描述

本關(guān)任務(wù):給定兩個(gè)一元多項(xiàng)式A(x)與B(x),利用鏈表表示A(x)與B(x),實(shí)現(xiàn)A(x)與B(x)的加法、減法、乘法和求導(dǎo)運(yùn)算。

編程要求

輸入

輸入多組數(shù)據(jù),總計(jì)n*( a+b+2)+1行。其中,第一行整數(shù)n代表總計(jì)有n組數(shù)據(jù),之后依次輸入n組數(shù)據(jù)。每組數(shù)據(jù)包括a+b+2行,其中第一行是兩個(gè)整數(shù)a和b,分別代表A(x)與B(x)的項(xiàng)數(shù)。之后緊跟a行,每行兩個(gè)整數(shù)a1和a2,分別代表A(x)每項(xiàng)的系數(shù)和指數(shù),再之后緊跟b行,每行兩個(gè)整數(shù)b1和b2,分別代表B(x)每項(xiàng)的系數(shù)和指數(shù),每組數(shù)據(jù)最后一行為一個(gè)字符(+、-、*、'),分別代表多項(xiàng)式的加法、減法、乘法和求導(dǎo)運(yùn)算。所有數(shù)據(jù)的絕對值小于100,指數(shù)大于等于0。

輸出

對于每組數(shù)據(jù)輸出一行,按照多項(xiàng)式次數(shù)從大到小排列,參考格式:5x^17+22x^7+11x^1+7。

測試說明

平臺會(huì)對你編寫的代碼進(jìn)行測試:

測試輸入: 4 1 1 1 0 1 1 + 4 3 7 0 3 1 9 8 5 17 8 1 22 7 -9 8 + 1 1 1 1 1 1 - 1 1 1 1 1 1 ' 預(yù)期輸出: 1x^1+1 5x^17+22x^7+11x^1+7 0 1 1文章來源地址http://www.zghlxwxcb.cn/news/detail-848967.html

#include <iostream>
#include <string>
using namespace std;
typedef struct LNode
{
    int coe;    //系數(shù)coe
    int exp;    //指數(shù)exp
    struct LNode *next;
}LNode,*LinkList;
void CreatePolynomial(LinkList &L,int n)
{//按指數(shù)exp從大到小存多項(xiàng)式
    L=new LNode;
    L->next=NULL;
    for(int i=0;i<n;i++)
    {
        LinkList p=new LNode;
        cin>>p->coe>>p->exp;
        LinkList pre=L,cur=L->next;      //pre和cur是多項(xiàng)式鏈表的工作指針,分別初始化為頭結(jié)點(diǎn)和首元結(jié)點(diǎn)
		while(cur&&p->exp<cur->exp)    //若待插入項(xiàng)的指數(shù)小于當(dāng)前結(jié)點(diǎn)的指數(shù),指針pre指向當(dāng)前結(jié)點(diǎn),當(dāng)前結(jié)點(diǎn)的指針cur后移
		{
			pre=cur;
			cur=cur->next;
		}
		p->next=cur;    //待插入項(xiàng)的指數(shù)不小于當(dāng)前結(jié)點(diǎn)的指數(shù)時(shí),用頭插法插入節(jié)點(diǎn)
		pre->next=p;
	}
}
void OutputPolynomial(LinkList L)
{//輸出多項(xiàng)式
	if(!L||!L->next) cout<<0;
	LinkList p=L->next;     //p是多項(xiàng)式鏈表的工作指針,初始化為首元結(jié)點(diǎn)
	while(p)
	{
		if(p==L->next)     //p指向首元結(jié)點(diǎn)時(shí),根據(jù)指數(shù)的情況輸出多項(xiàng)式
        {
			if (p->exp!=0)
				cout<<p->coe<<"x^"<<p->exp;
			else
				cout<<p->coe;
		}
		else      //p指向其他結(jié)點(diǎn)時(shí),根據(jù)系數(shù)的正負(fù)和指數(shù)的情況輸出多項(xiàng)式
        {
			if(p->coe>0) cout<<"+";
			if(p->exp!=0)
				cout<<p->coe<<"x^"<<p->exp;
			else
				cout<<p->coe;
		}
		p=p->next;
	}
	cout<<endl;
}
LinkList Add(LinkList LA,LinkList LB)
{//多項(xiàng)式的加法運(yùn)算
/**************begin************/
	//1.結(jié)點(diǎn)數(shù)據(jù)域有兩個(gè),指數(shù)與系數(shù) 
    /* 2.Opt(LinkList &LA,LinkList &LB,string s) 此函數(shù)調(diào)用了+、-、*和輸出多項(xiàng)式的函數(shù)   */
    // 3.return一個(gè)鏈表(因?yàn)橛泻喜⒘说呐c沒合并的)
    LinkList LC,pa,pb,pc;//pa,pb,pc用于指出當(dāng)前準(zhǔn)備操作的結(jié)點(diǎn)
    pa=LA->next;
    pb=LB->next;
    CreatePolynomial(LC,0);//需要建立LC這個(gè)鏈表,LinkList LC只是定義了LC指向一個(gè)結(jié)點(diǎn),沒有鏈表
    pc=LC;
    while(pa&&pb)//遍歷比較LA與LB的結(jié)點(diǎn),進(jìn)行合適操作后接在LC后面
    {
        if(pa->exp==pb->exp)//指數(shù)相同,系數(shù)相加后存在pa中,方便接在LC后面
        {
           int sum=pa->coe+pb->coe;
           if(sum)//判斷系數(shù)和是否不為0
           {
               pa->coe=sum;
               pc->next=pa;
               pc=pa;
               pa=pa->next;
               pb=pb->next;
           }
           else 
           {
               pa=pa->next;
               pb=pb->next;
           }
        }
        else if (pa->exp>pb->exp)//指數(shù)大的才接到LC后,pa=pa->next后繼續(xù)和之前的pb->exp比較
        {
            pc->next=pa;
            pc=pa;
            pa=pa->next;
        }
        else {
            pc->next=pb;
            pc=pb;
            pb=pb->next;
        }
    }
        pc->next=pa?pa:pb;//某個(gè)鏈表先遍歷完后,直接把另一個(gè)鏈表剩余部分接入LC后
        return LC;
    /**************end************/
}
void Minus(LinkList LA,LinkList LB)
 {//多項(xiàng)式的減法
/**************begin************/
	 LinkList p=LB->next;
     while(p)
     {
         p->coe*=-1;//減法則直接每個(gè)系數(shù)*-1然后調(diào)用剛寫的Add()
         p=p->next;
     }
     OutputPolynomial(Add(LA, LB));

    /**************end************/
 }
void Mul(LinkList LA,LinkList LB)
{//多項(xiàng)式的乘法
/**************begin************/
    LinkList LC;//LC為目標(biāo)多項(xiàng)式鏈表
    LinkList pa=LA->next;
    LinkList pb=LB->next;

    CreatePolynomial(LC, 0);
    LinkList temp;//記錄中間結(jié)果
     CreatePolynomial(temp, 0);
    while(pa)//遍歷比較LA與LB的結(jié)點(diǎn),進(jìn)行合適操作后接在LC后面
    {
        while(pb)//多項(xiàng)式乘法,就是從LA的第一個(gè)多項(xiàng)式起,遍歷LA的同時(shí),遍歷LB的多項(xiàng)式并相乘
        {
            LinkList p=new LNode;//p是記錄中間結(jié)果的輔助指針。只是一個(gè)結(jié)點(diǎn),不能取代可用于Add()的temp用于LC像sun一樣的循環(huán)自增
            p->next=NULL;
            p->coe=pa->coe*pb->coe;
            p->exp=pa->exp+pb->exp;
            temp->next=p;//每次兩個(gè)多項(xiàng)式相乘的結(jié)果,暫時(shí)用p指向,然后
            LC=Add(LC,temp);//pa和pb循環(huán)到最后,LC才是完全體LC。LC每次用自己加上temp,就像sum一樣
            pb=pb->next;
        }
        pb=LB->next;
        pa=pa->next;
    }
    OutputPolynomial(LC);


    /**************end************/
}
void Diff(LinkList L)
{//多項(xiàng)式的求導(dǎo)運(yùn)算
	LinkList p=L->next;  //p是鏈表L的工作指針,初始化為首元結(jié)點(diǎn)
	LinkList r=NULL;  //r是刪除操作的輔助指針
	while(p)
	{
		p->coe*=p->exp;
		p->exp--;
		if(p->exp<0)  //所有數(shù)據(jù)的指數(shù)大于等于0
        {
			r=p;
			p=p->next;
			delete r;
		}
		else
		{
			p=p->next;
		}
	}
	OutputPolynomial(L);
}
void Opt(LinkList &LA,LinkList &LB,string s)
{//依據(jù)字符選擇多項(xiàng)式的加法、減法、乘法和求導(dǎo)運(yùn)算
    if(s=="+") OutputPolynomial(Add(LA, LB));
    if(s=="-") Minus(LA, LB);
    if(s=="*") Mul(LA, LB);
    if(s=="'")
    {
        Diff(LA);
        Diff(LB);
    }
}
int main()
{
    int n;    //總計(jì)有n組數(shù)據(jù)
    cin>>n;
    while(n--)
    {
        int a,b;
        cin>>a>>b;
        LinkList LA,LB;
        CreatePolynomial(LA,a);
        CreatePolynomial(LB,b);
        string s;
        cin>>s;
        Opt(LA,LB,s);
    }
    return 0;
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu):鏈表應(yīng)用:第1關(guān):基于鏈表的兩個(gè)一元多項(xiàng)式的基本運(yùn)算的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • <數(shù)據(jù)結(jié)構(gòu)> 鏈表 - 鏈表的概念及結(jié)構(gòu)

    <數(shù)據(jù)結(jié)構(gòu)> 鏈表 - 鏈表的概念及結(jié)構(gòu)

    概念: 鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的 邏輯順序 是通過鏈表中的 指針鏈接 次序?qū)崿F(xiàn)的 1、鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱為結(jié)點(diǎn))組成。 2、結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)(malloc)生成。 3、每個(gè)結(jié)點(diǎn)包括兩個(gè)部分:一個(gè)是存儲數(shù)據(jù)元素的

    2023年04月09日
    瀏覽(53)
  • 【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

    【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

    正如標(biāo)題所說,本文會(huì)圖文詳細(xì)解析三道單鏈表OJ題,分別為: ?反轉(zhuǎn)鏈表 (簡單) ?鏈表的中間節(jié)點(diǎn) (簡單) ?鏈表的回文結(jié)構(gòu) (較難) 把他們放在一起講的原因是: ?反轉(zhuǎn)鏈表 和 ?鏈表的中間節(jié)點(diǎn) 是 ?鏈表的回文結(jié)構(gòu) 的基礎(chǔ) 為什么這樣說?請往下看: 目錄 1. 反轉(zhuǎn)鏈

    2024年02月13日
    瀏覽(104)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】鏈表的回文結(jié)構(gòu)

    單鏈表的操作算法是筆試面試中較為常見的題目。 本文將著重介紹平時(shí)面試中常見的關(guān)于鏈表的應(yīng)用題目,馬上要進(jìn)行秋招了。希望對你們有幫助 _ ?? 對于一個(gè)鏈表,請?jiān)O(shè)計(jì)一個(gè)時(shí)間復(fù)雜度為O(n),額外空間復(fù)雜度為O(1)的算法,判斷其是否為回文結(jié)構(gòu)。 給定一個(gè)鏈表的頭指針

    2024年02月12日
    瀏覽(27)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表的分類和雙向鏈表

    【數(shù)據(jù)結(jié)構(gòu)】鏈表的分類和雙向鏈表

    本篇是基于上篇單鏈表所作,推薦與上篇配合閱讀,效果更加 http://t.csdnimg.cn/UhXEj 鏈表的結(jié)構(gòu)非常多樣,以下情況組合起來就有8種(2 x 2 x 2)鏈表結(jié)構(gòu): 我們一般叫這個(gè)頭為哨兵位 我們上回講的單鏈表就是不帶頭單項(xiàng)不循環(huán)鏈表。 今天我們要講帶頭雙向循環(huán)的鏈表。 不過

    2024年01月25日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)-二叉鏈表的結(jié)構(gòu)與實(shí)現(xiàn)

    目錄 一、引言 二、什么是二叉鏈表 三、二叉鏈表的結(jié)構(gòu) 四、二叉鏈表的實(shí)現(xiàn) 1. 創(chuàng)建二叉鏈表 2. 遍歷二叉鏈表 3. 插入節(jié)點(diǎn) 4. 刪除節(jié)點(diǎn) 五、應(yīng)用場景 六、總結(jié) 七、代碼示例 數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)科學(xué)中的重要概念,它是計(jì)算機(jī)程序設(shè)計(jì)的基礎(chǔ)。二叉鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu)

    2024年02月08日
    瀏覽(23)
  • 數(shù)據(jù)結(jié)構(gòu)----鏈表介紹、模擬實(shí)現(xiàn)鏈表、鏈表的使用

    數(shù)據(jù)結(jié)構(gòu)----鏈表介紹、模擬實(shí)現(xiàn)鏈表、鏈表的使用

    ArrayList底層使用連續(xù)的空間,任意位置插入或刪除元素時(shí),需要將該位置后序元素整體往前或者往后搬移,故時(shí)間復(fù)雜度為O(N) 增容需要申請新空間,拷貝數(shù)據(jù),釋放舊空間。會(huì)有不小的消耗。 增容一般是呈2倍的增長,勢必會(huì)有一定的空間浪費(fèi)。例如當(dāng)前容量為100,滿了以后

    2024年02月21日
    瀏覽(18)
  • 【(數(shù)據(jù)結(jié)構(gòu))— 雙向鏈表的實(shí)現(xiàn)】

    【(數(shù)據(jù)結(jié)構(gòu))— 雙向鏈表的實(shí)現(xiàn)】

    注意: 這里的 “帶頭” 跟前面我們說的 “頭節(jié)點(diǎn)” 是兩個(gè)概念,實(shí)際前面的在單鏈表階段稱呼不嚴(yán) 謹(jǐn),但是為了同學(xué)們更好的理解就直接稱為單鏈表的頭節(jié)點(diǎn)。 帶頭鏈表里的頭節(jié)點(diǎn),實(shí)際為 “哨兵位” ,哨兵位節(jié)點(diǎn)不存儲任何有效元素,只是站在這里“放哨 的” “哨

    2024年02月06日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)——雙向鏈表的實(shí)現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)——雙向鏈表的實(shí)現(xiàn)

    注意: 雙向鏈表又稱帶頭雙向循環(huán)鏈表 這?的“帶頭”跟前?我們說的“頭節(jié)點(diǎn)”是兩個(gè)概念,實(shí)際前?的在單鏈表階段稱呼不嚴(yán) 謹(jǐn),但是為了同學(xué)們更好的理解就直接稱為單鏈表的頭節(jié)點(diǎn)。 帶頭鏈表?的頭節(jié)點(diǎn),實(shí)際為“ 哨兵位 ”,哨兵位節(jié)點(diǎn)不存儲任何有效元素,只

    2024年02月06日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)】十字鏈表的畫法

    【數(shù)據(jù)結(jié)構(gòu)】十字鏈表的畫法

    有向邊又稱為弧 假設(shè)頂點(diǎn) v 指向 w,那么 w 稱為弧頭,v 稱為弧尾 頂點(diǎn)節(jié)點(diǎn)采用順序存儲 頂點(diǎn)節(jié)點(diǎn) data:存放頂點(diǎn)的信息 firstin:指向以該節(jié)點(diǎn)為終點(diǎn)(弧頭)的弧節(jié)點(diǎn) firstout:指向以該節(jié)點(diǎn)為起點(diǎn)(弧尾)的弧節(jié)點(diǎn) 弧節(jié)點(diǎn) tailvex:起點(diǎn)(弧尾)在數(shù)組中的索引 headvex:終點(diǎn)(

    2024年02月11日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】雙向鏈表的實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】雙向鏈表的實(shí)現(xiàn)

    我要扼住命運(yùn)的咽喉,他卻不能使我完全屈服。? ? ? ? ? ? ? ? ? ? ? --貝多芬 目錄 一.帶頭循環(huán)的雙向鏈表的特點(diǎn) 二.不帶頭不循環(huán)單向鏈表和帶頭循環(huán)的雙向鏈表的對比 三.初始化鏈表,創(chuàng)建哨兵結(jié)點(diǎn) 四.雙向鏈表的各種功能的實(shí)現(xiàn) 1.雙向鏈表的尾插 2.雙向鏈表的打印?

    2023年04月10日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包