日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

严蔚敏数据结构:链表实现一元多项式相加

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 严蔚敏数据结构:链表实现一元多项式相加 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、基本概念

1、多項式pn(x)可表示成: ?pn(x)=a0+a1x+a2x2+…+anxn。

listP={(a0,e0),(a1,e1),(a2,e2),…,(an,en) }。在這種線性表描述中,各個結點包括兩個數據域,對應的類型描述為:

typedef struct node

{ double coef; ? ? ? ? ? ?//系數為雙精度型

? int expn; ? ? ? ? ? ? ? ?//指數為正整型
? struct node *next; ? ?//指針域
}polynode; ? ? ? ? ?




二、算法思想
對兩個一元多項式進行相加操作的運算規則是:假設指針qa和qb分別指向多項式A(x)和B(x)中當前進行比較的某個結點,則需比較兩個結點數據域的指數項,有三種情況:

(1) 指針qa所指結點的指數值<指針qb所指結點的指數值時,則保留qa指針所指向的結點,qa指針后移;
(2) 指針qa所指結點的指數值>指針qb所指結點的指數值時,則將qb指針所指向的結點插入到qa所指結點前,qb指針后移;
(3) 指針qa所指結點的指數值=指針qb所指結點的指數值時,將兩個結點中的系數相加。若和不為零,則修改qa所指結點的系數值,同時釋放qb所指結點;反之,從多項式A (x)的鏈表中刪除相應結點,并釋放指針qa和qb所指結點。



#include "stdio.h" #include "stdlib.h" #define OK 1 #define ERROR -1 #define FALSE 0 #define TRUE 2 typedef int Status;typedef struct { float coef; //系數 int expn; //指數 }term,ElemType;typedef struct LNode { ElemType data; struct LNode *next; }*Link,*Position;typedef struct { Link head,tail; int len; }LinkList;typedef LinkList polynomial; //用帶頭結點的有序鏈表表示多項式int cmp(term a,term b) { if(a.expn<b.expn) return -1; else if(a.expn==b.expn) return 0; else return 1; }//cmpStatus InitList(polynomial &P) {//構造一下空的線性鏈表 Link p; p=(Link)malloc(sizeof(LNode));//生成頭結點 if(p){p->next=NULL;P.head=P.tail=p;P.len=0;return OK;}// else return ERROR; }//InitListPosition GetHead(polynomial P) { return P.head; }//PositionStatus SetCurElem(Position h,term e) { h->data=e; return OK; }//SetCurElemStatus LocateElem(LinkList P,ElemType e,Position &q,int(*cmp)(ElemType,ElemType)) { Link p=P.head,pp; do{pp=p;p=p->next;}while(p&&(cmp(p->data,e)<0));if(!p||cmp(p->data,e)>0){q=pp;return FALSE;}//ifelse //find it{q=p;return TRUE;}//else }Status MakeNode(Link &p,ElemType e) { p=(Link)malloc(sizeof(LNode)); if(!p) return ERROR; p->data=e; return OK; }//MakeNodeStatus InsFirst(LinkList &P,Link h,Link s) { s->next=h->next; h->next=s; if(h==P.tail) P.tail=h->next; ++P.len; return OK; }//InsFirstvoid CreatPolyn(polynomial &P,int m){//輸入m項的指數及系數,建立表示一元多項式的有序鏈表P InitList(P); Position h,q,s; h=GetHead(P); //h指向P的頭結點 term e; e.coef=0.0; e.expn=-1; SetCurElem(h,e);//設置頭結點的數據元素 printf("input the the value of m(indicate how many items)\n"); scanf("%d",&m); printf("input (%d) ceof,expn(separated by ,)\n",m); for(int i=1;i<=m;++i){scanf("%f,%d",&e.coef,&e.expn);if(!LocateElem(P,e,q,cmp)){if(MakeNode(s,e)) InsFirst(P,q,s);}//if不存在,則生成新結點并插入}//for }//CreatPolynPosition NextPos(Link p) { return p->next; }//NextPosElemType GetCurElem(Link p) { return p->data; }//GetCurElemStatus DelFirst(LinkList L,Link h,Link &q) { q=h->next; if(q)//非空鏈表{h->next=q->next;if(!h->next) //刪除尾結點L.tail=h;L.len--;return OK;}//ifelse return FALSE; //鏈表空}//DelFirstvoid FreeNode(Link &p) { free(p); p=NULL; }//FreeNodeStatus ListEmpty(LinkList L) { if(L.len)return FALSE; else return TRUE; }//ListEmptyStatus Append(LinkList &L,Link s) { int i=1; L.tail->next=s; while(s->next){s=s->next;i++;}//whileL.tail=s; L.len+=i; return OK; }//Appendvoid PrintPolyn(polynomial P) { Link q; q=P.head->next; printf("系數 指數\n"); while(q){printf("%f %d\n",q->data.coef,q->data.expn);q=q->next;}//while }//PrintPolynStatus ClearList(LinkList &L) { Link q,p; if(L.head!=L.tail){p=q=L.head->next;L.head->next=NULL;while(p!=L.tail){p=q->next;free(q);q=p;}//whilefree(q);L.tail=L.head;L.len=0;}//if return OK; }//ClearListStatus DestroyPolyn(LinkList &L) { // 銷毀線性鏈表L,L不再存在ClearList(L); // 清空鏈表FreeNode(L.head);L.tail=NULL;L.len=0;return OK;}//DestroyListvoid AddPolyn(polynomial &Pa,polynomial &Pb){ // 多項式加法:Pa=Pa+Pb,并銷毀一元多項式PbPosition ha,hb,qa,qb;term a,b;ha=GetHead(Pa);hb=GetHead(Pb); // ha和hb分別指向Pa和Pb的頭結點qa=NextPos(ha);qb=NextPos(hb); // qa和qb分別指向Pa和Pb中當前結點(現為第一個結點)while(qa&&qb){ // Pa和Pb均非空且ha沒指向尾結點(qa!=0)a=GetCurElem(qa);b=GetCurElem(qb); // a和b為兩表中當前比較元素switch(cmp(a,b)){case -1:ha=qa; // 多項式Pa中當前結點的指數值小qa=NextPos(ha); // ha和qa均向后移一個結點break;case 0: qa->data.coef+=qb->data.coef;// 兩者的指數值相等,修改Pa當前結點的系數值if(qa->data.coef==0) // 刪除多項式Pa中當前結點{DelFirst(Pa,ha,qa);FreeNode(qa);}elseha=qa;DelFirst(Pb,hb,qb);FreeNode(qb);qb=NextPos(hb);qa=NextPos(ha);break;case 1: DelFirst(Pb,hb,qb); // 多項式Pb中當前結點的指數值小InsFirst(Pa,ha,qb);ha=ha->next;qb=NextPos(hb);}}if(!ListEmpty(Pb)){Pb.tail=hb;Append(Pa,qb); // 鏈接Pb中剩余結點}DestroyPolyn(Pb); // 銷毀Pb}int main() { polynomial Pa,Pb; int m; CreatPolyn(Pa,m); PrintPolyn(Pa); printf("Pa.len: %d\n",Pa.len); CreatPolyn(Pb,m); PrintPolyn(Pb); printf("Pb.len: %d\n",Pb.len); AddPolyn(Pa,Pb); PrintPolyn(Pa); printf("Pa.len: %d\n",Pa.len); return 1; }



總結

以上是生活随笔為你收集整理的严蔚敏数据结构:链表实现一元多项式相加的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人精品午夜福利Av免费 | 亚洲久草视频 | 豆豆色成人网 | 全国男人的天堂网 | www日本在线 | 绝顶高潮合集videos | 性做爰视频免费播放大全 | 第一福利丝瓜av导航 | 青草视频在线免费观看 | 精品国产乱码久久 | 第一福利av| av导航福利 | 日韩免费av网站 | 女人18岁毛片| 秋霞成人午夜伦在线观看 | 国产黄色视屏 | 久久久久久网址 | 美女扒开腿让男生桶 | 天天夜夜人人 | 国产操视频 | 久久九九免费 | 国产黑丝一区 | 老司机精品视频在线播放 | 国产97自拍 | 懂色tv | 日本色www| 日批免费观看视频 | 成人午夜激情 | 国产精品久久久久一区二区三区 | 精品人妻无码一区二区三区换脸 | 玖玖爱在线观看 | 亚洲视频在线观看一区二区 | 三浦惠理子aⅴ一二三区 | 93看片淫黄大片一级 | 欧美一区,二区 | 欧美日韩激情 | 136福利视频导航 | 精品少妇人妻av一区二区三区 | 青青久视频 | 日本在线免费视频 | 亚洲乱熟女一区二区 | 性久久久久久久久 | 欧美日韩国 | 国产精品夜夜嗨 | 天天爽夜夜爽 | 男人天堂免费视频 | 先锋影音男人 | 欧美一级专区免费大片 | 中国女人毛茸茸 | 亚洲天堂av网站 | 成人黄色激情网 | 91中文字幕在线播放 | 欧美自拍偷拍一区二区 | 亚洲AV无码乱码国产精品牛牛 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 毛片高清免费 | 久久久久久日产精品 | 日韩视频免费看 | 色图社区 | 国内一区二区视频 | 色www.| 色呦呦网站 | 亚洲二区在线观看 | 闺蜜张开腿让我爽了一夜 | 一区二区三区精 | www网站在线观看 | 国产精品夜夜爽张柏芝 | 久久久久国产精品夜夜夜夜夜 | 成熟妇人a片免费看网站 | 亚洲综合视频网 | 依人在线视频 | 成年人的毛片 | 国产情侣酒店自拍 | 欧美成人精品欧美一级乱 | 亚洲AV无码精品一区二区三区 | 少妇搡bbbb搡bbb搡澳门 | 午夜精品一区二区在线观看 | 91丝袜| 亚洲熟妇无码乱子av电影 | www夜色| 午夜看毛片 | 成人小视频免费观看 | 一本色道久久88加勒比—综合 | 中文日韩在线观看 | 国产精品第八页 | 久久久穴 | 国产精品456| av久操| 国产剧情在线观看 | 天天视频国产 | jiizzyou欧美2 | 久久春色| 三级免费黄| av免费观看大全 | 亚洲av日韩av高潮潮喷无码 | 成人免费视频一区 | 婷婷综合在线观看 | 天天看黄色片 | 日韩精品一区中文字幕 |