1. 程式人生 > 其它 >一元多項式相加

一元多項式相加

技術標籤:資料結構資料結構


```cpp
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef int typelem; 
typedef struct node1{
	int length;//表長 
	struct node2 *next; 
}headlist,*head_list; //頭結點
 
typedef struct node2{
	typelem data1;//指數
	typelem data2;//係數 
	struct node2 *
next;//指標域 }nodelist;//中間結點 int Initlist(headlist &L)//初始化一個空連結串列 { L.length=0; L.next=NULL; return 1; } int paixu(headlist *L)//將連結串列的資料按降序排列 ,失敗返回0 { if(!L) return 0; int i, j;nodelist *p,*p1; typelem t; for(i=0;i<L->length-1;i++)//氣泡排序 { p=L->next; p1=p->next; for
(j=0;j<L->length-1-i;j++) { if(p->data1<p1->data1) { t=p->data1; p->data1=p1->data1; p1->data1=t; t=p->data2; p->data2=p1->data2; p1->data2=t; } p=p->next; p1=p1->next; } } return 1; } nodelist *find(headlist *
L,typelem e1)//判斷L中是否存在e1,在就返回地址指標,不在返回0 { nodelist *p1=L->next; while(p1) { if(p1->data1==e1) break; p1=p1->next; } if(p1==NULL) return NULL; else return p1; } int Listsert(headlist *p,typelem e1,typelem e2)//在表中插入元素 { if(!p) return 0; nodelist *p1; p1=(nodelist *)malloc(sizeof(nodelist)); p1->data1=e1;p1->data2=e2; p->length++; p1->next=p->next; p->next=p1; return 1; } int Listcreate(headlist *L)//給連結串列賦值 { if(!L) return 0; typelem e1,e2;int len,i; cout<<"Input length:"; cin>>len; for(i=0;i<len;i++) { cout<<"input data1(指數):"; cin>>e1; cout<<"input data2(係數):"; cin>>e2; if(find(L,e1)) { cout<<"指數已存在,請重新輸入!\n"; i--; } else Listsert(L,e1,e2); } paixu(L); return 1; } int Listdelete(headlist *L,typelem e1)//刪除表中data1為e1的結點,失敗則返回0 { if(!L||L->length==0) return 0; if(L->next->data1==e1) { nodelist *p6=L->next; L->next=p6->next; free(p6); L->length--; return 1; } if(L->length==1) { return 0; } nodelist *p,*p1; p=L->next; p1=p->next; while(p1->data1!=e1) { p=p->next; p1=p1->next; if(p1==NULL) return 0; } p->next=p1->next; L->length--; free(p1); return 1; } int Listadd(headlist *L1,headlist *L2,headlist *L3)//(L1,L2按指數遞增小的序列)將L2,L1兩個多項式加到L3 { if(!(L1&&L2&&L3)) return 0; if(L3->length||L1->length==0||L2->length==0)//保證L3為空表,L1,L2不為空表 return 0; nodelist *p1,*p2,*p3,*p4; p1=L1->next;p2=L2->next; while(!(p1==NULL&&p2==NULL)) { p4=(nodelist *)malloc(sizeof(nodelist)); if(p2==NULL) { goto look1; } else if(p1==NULL) { goto look2; } else if(p1->data1>p2->data1) {look1: p4->data1=p1->data1; p4->data2=p1->data2; p1=p1->next; } else if(p1->data1<p2->data1) {look2: p4->data1=p2->data1; p4->data2=p2->data2; p2=p2->next; } else { p4->data1=p1->data1; p4->data2=p1->data2+p2->data2; p1=p1->next;p2=p2->next; } if(L3->length==0) L3->next=p4; else { p3->next=p4; } p3=p4; L3->length++; } p3->next=NULL; return 1; } /*(int Listadd2(headlist *L1,headlist *L2,headlist *L3)//(L1,L2按指數遞增加的序列)將L2,L1兩個多項式加到L3 { if(!(L1&&L2&&L3)) return 0; if(L3->length||L1->length==0||L2->length==0)//保證L3為空表,L1,L2不為空表 return 0; nodelist *p1; L1=L1->next;L2=L2->next; while(!(L1==NULL&&L2==NULL)) { p1=(nodelist *)malloc(sizeof(nodelist)); if(L2==NULL) { p1->data1=L1->data1; p1->data2=L1->data2; L1=L1->next; } else if(L1==NULL) { p1->data1=L2->data1; p1->data2=L2->data2; L2=L2->next; } else if(p1->data1>p2->data1) { p1->data1=L1->data1; p1->data2=L1->data2; L1=L1->next; } else if(p1->data1<p2->data1) { p1->data1=L2->data1; p1->data2=L2->data2; L2=L2->next; } else //合併同類項 { p1->data1=L1->data1; p1->data2=L1->data2+L2->data2; L1=L1->next;L2=L2->next; } p1->next=L3->next; L3->next=p1; L3->length++; } return 1; }*/ void print(headlist *L) { nodelist *p1=L->next;int j=1; while(p1!=NULL) { cout<<j++<<".data1:"<<p1->data1<<" "<<"data2:"<<p1->data2<<'\n'; p1=p1->next; } } void MergeList(LinkList la, LinkList lb, LinkList lc)//lc已經在主函式初始化 { LNode *p; while(la != null && lb != null){ p = (LNode *) malloc (sizeof(LNode)); if(la->data > lb->data){ p->data = lb->data; lb = lb->next; } else{ p->data = la->data; la = la->next; } p->next=lc->next; lc->next=p; } while(la != null){ p = (LNode *) malloc (sizeof(LNode)); p->data = la->data; la = la->next; lc->next = p; lc = p; } while(lb != null){ p = (LNode *) malloc (sizeof(LNode)); p->data = lb->data; la = lb->next; lc->next = p; lc = p; } } int main() { headlist L1,L2,L3; Initlist(L1);Initlist(L2);Initlist(L3); Listcreate(&L1);Listcreate(&L2); Listadd2(&L1,&L2,&L3); print(&L3); }