|
|
#6
yfgo2007-05-31 12:00
现在我把我的整个代码发上去,现在的问题是,我的内存不能读~~~ #include<iostream> using namespace std; typedef struct{ float coef;//系数 int exp;//指数 }number;
typedef struct Lnode{ number data; Lnode *next; }*Link;
typedef struct{ Link head; int len; }Linklist;
Link makeNode(Link p,number &e)//分配由P指向E的结点 { p=new Lnode; if(p==0) exit(1); else { p->data=e; p->next=0; return p; } }
void insFirst(Link &h,Link &s)//已知H指向表的头结点,将S所指结点插入第一个结点之前 { s->next=h->next; h->next=s; }
Link getHead(Linklist &L) { return L.head; }
Link nextPos(Linklist &L,Link &p)//返回P的后继结点的位置,若无后继,则返回0 { if(p->next==0) return 0; else return p->next; }
void delFirst(Link h,Link&p)//已知H指向表的头结点,删除表中的第一个结点并以Q返回 { p=h->next; h->next=h->next->next; }
number getCurElem(Link p)//P指向表中的一个结点,返回P所指的结点的数据元素 { return p->data; }
void creatPloyn(Linklist &L,int m)//输入M项的系数和指数,建立一元多项式 { L.head=new Lnode;if(L.head==0)exit(1);Link s; Link h=L.head; number e; e.coef=0.0;e.exp=-1; h->data=e;h->next=0; for(int i=1;i<=m;i++) { cout<<"请输入第"<<i<<"项的系数:"; cin>>e.coef; cout<<"请输入第"<<i<<"项的指数:"; cin>>e.exp; cout<<endl; s=makeNode(s,e); insFirst(h,s); } }
int listEmpty(Linklist &L)//判断表是不是为空 { if(L.head->next==0) return 1; else return 0; }
void append(Linklist &L,Link *s) { Link p; p=L.head;
if(p->next==0) p=(*s); else { while(p->next!=0) {p=p->next;} p->next=(*s); } }
int compare(number a,number b) { if(a.exp>b.exp) return 1; else if(a.exp=b.exp) return 0; else if(a.exp<b.exp) return -1; }
void printPloyn(Linklist &L) { Link p; if(L.head==0) return; else { p=(L.head)->next; while(p!=0) { while(p->next!=0) { cout<<(p->data).coef<<"x^"<<(p->data).exp<<"+"; p=p->next; } cout<<(p->data).coef<<"x^"<<(p->data).exp<<endl; p=p->next; } } }
void addPloyn(Linklist &La,Linklist &Lb,Linklist &Lc) { Link ha,hb,pa,pb,p; number a,b,c;float sum; Lc.head=new Lnode; if(Lc.head==0)exit(1); Lc.head->next=0; ha=getHead(La);hb=getHead(Lb); pa=nextPos(La,ha);pb=nextPos(Lb,hb); while(listEmpty(La)&&listEmpty(Lb)) { a=pa->data;b=pb->data; switch(compare(a,b)) { case -1: c=a; p=makeNode(p,c);append(Lc,&p);pa=nextPos(La,pa); break; case 0: sum=a.coef+b.coef; if(sum!=0.0) { c.coef=sum;c.exp=a.exp; p=makeNode(p,c);append(Lc,&p); pa=nextPos(La,pa);pb=nextPos(Lb,pb); break; } else { pa=nextPos(La,pa);pb=nextPos(Lb,pb); break; } case 1: c=b; p=makeNode(p,c);append(Lc,&p);pb=nextPos(Lb,pb); break; } } if(pa==0) { while(pb!=0) { c=pb->data; p=makeNode(p,c);append(Lc,&p);pb=nextPos(Lb,pb); } } else { while(pa!=0) { c=pa->data; p=makeNode(p,c);append(Lc,&p);pa=nextPos(La,pa); } } } int main() { Linklist La,Lb,Lc; int a,b; cout<<"请输入第一个多项式的项数:"; cin>>a; cout<<"请输入第二个多项式的项数:"; cin>>b; cout<<endl; cout<<"现在为您创建第一个多项式如下:"<<endl; creatPloyn(La,a); printPloyn(La); cout<<endl; cout<<"现在为您创建第二个多项式如下:"<<endl; creatPloyn(Lb,b); printPloyn(Lb); cout<<"两个多项式的和是:"<<endl; addPloyn(La,Lb,Lc); printPloyn(Lc); return 0; }
|