#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERLOW -2
#define TRUE 1
#define FALSE 0
typedef struct{
float coef;
int expn;
}term,ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*Link,*Position;
typedef struct HeadNode{
Link head,tail;
int len;
}LinkList;
typedef LinkList polynomail;
typedef int status;
status MakeNode( Link &p,Elemtype e){
p=(Link)malloc(sizeof(LNode));
p->data=e;
return OK;
}
status InitList( LinkList &L){
L.head=(Link)malloc(sizeof(LNode));
Elemtype e;
e.coef=0,e.expn=-1;
L.head->data=e;
L.head->next=NULL;
L.tail=L.head;
L.len=0;
return OK;
}
status SetCurElem(Link &p,ElemType e){
p->data=e;
return OK;
}
status InsAfter( Link q, Link s){
s->next=q->next;
q->next=s;
return OK;
}
status ListEmpty(LinkList P){
if(P.head->next==NULL)
return TRUE;
return FALSE;
}
status Append( LinkList &L, Link s){
L.tail->next=s;
L.len++;
while (s->next!=NULL){
s=s->next;
L.len++;
}
L.tail=s;
return OK;
}
int cmp( term e1,term e2){
if(e1.expn<e2.expn)
return -1;
if(e1.expn==e2.expn)
return 0;
if(e1.expn>e2.expn)
return 1;
}
Position GetHead(LinkList L){
return L.head;
}
Position GetLast (LinkList L){
return L.tail;
}
Position NextPos(LinkList L,Link p){
p=p->next;
return p;
}
status DelFirst( Link h,Link q){
h->next=q->next;
return OK;
}
void CreatePolyn(polynomail &p,int m){
InitList(P);
Link s,q;
term e;
int i;
printf("\nPlease input &d terms in order:\n",m);
for(i=1;i<=m;i++){
scanf("&f&d",&e.coef,&e.expn);
if(MakeNode(s,e)){
q=GetLast(P);
InsAfter(q,s);
P.tail=s;
P.len++;
}
}
printf("\nCreate polynomail succees!\n");
}
int PrintPolyn(polynomail &p){
Link p=P.head;
if(p->next==NULL){
printf("\nEmpty LinkList!\n");
return OK;
}
printf("\nEmpty LinkList!\n");
while(p!=NULL){
if(p->data.expn>=0)
printf("&.2f\t%d\n",p->data.coef,p->data.expn);
p=p->next;
}
printf("\nPrint succeed!\n");
return OK;
}
void AddPolyn( polynomial &Pa,polynomail &Pb){
Link ha=GetHead(Pa);
Link hb=GetHead(Pb);
Link qa=NextPos(Pa,ha);
Link qb=NextPos(Pb,hb);
while(qa!=NULL && qb!=NULL){
term a= qa->data;
term b= qb->data;
switch(cmp(a,b)){
case 1:
ha=qa;
qa=NextPos(Pa,qa);
break;
case 0:
term sum;
sum.expn=a.expn;
sum.coef=a.coef+b.coef;
if (sum.coef!=0){
SetCurElem( qa,sum);ha=qa;)
else{
DelFirst(ha,qa);
free(qa);
}
DelFirst(hb,qb);
free(qb);
qb=NextPos(Pb,hb);
qa=NextPos(Pa,ha);
break;
case -1:
DelFirst(hb,qb);
InsAfter(ha,qb);
Pa.len++;
qb=NextPos(Pb,hb);
ha=NextPos(Pa,ha);
break;
}
}
if(!ListEmpty(Pb) Append(Pa,qb);
}
void SubPolyn ( polynomial &Pa,polynomail &Pb){
Link ha=GetHead(Pa);
Link hb=GetHead(Pb);
Link qa=NextPos(Pa,ha);
Link qb=NextPos(Pb,hb);
while (qb!=NULL){
qb->data.coef=-qb->data.coef;
qb=NextPos(Pb,qb);
}
qb=NextPos(Pb,hb);
while(qa!=NULL && qb!=NULL){
term a= qa->data;
term b= qb->data;
switch(cmp(a,b)){
case 1:
ha=qa;
qa=NextPos( Pa,qa);
break;
case 0:
term sum;
sum.expn=a.expn;
sum.coef=a.coef+b.coef;
if(sum.coef!=0){
SetCurElem( qa,sum);
ha=qa;
}
else{
DelFirst(ha,qa);
free(qa);
}
DelFirst(hb,qb);
free(qb);
qb=NextPos(Pb,hb);
qa=NextPos(Pa,ha);
break;
case -1:
DelFirst(hb,qb);
InsAfter(ha,qb);
Pa.len++;
qb=NextPos(Pb,hb);
ha=NextPos(Pa,ha);
break:
}
}
if(!ListEmpty(Pb))
Append(Pa,qb);
free(hb);
}
void MultiPolyn (polynomail &Pa,polynomail &Pb)
{
polynomail Pc,Pd;
Link ha=GetHead(Pa);
Link hb=GetHead(Pb);
Link qa=NextPos(Pa,ha);
Link qb=NextPos(Pb,hb);
Link s,qc;
inti,j,lena=Pa.len,lenb=Pb.len;
term a,b,c;
InitList (Pd);
for (i=1;i<=lenb;i++){
InitList(Pc);
for(j=1;j<=lena;j++);{
a= qa->data;
b= qb->data;
c.coef=a.coef*b.coef;
c.expn=a.expn+b.expn;
if(MakeNode(s,c)){
qc=GetLast(Pc);
InsAfter(qc,s);
Pc.tain=s;
Pc.len++;
}
qa=NextPos(Pa,qa);
}
qa=NextPos(Pa,ha);
qb=NextPos(Pb,qb);
AddPolyn(Pd,Pc);
}
Pa=Pd;
}
void DivPolyn( polynomail &Pa, polynomail &Pb){
polynomail Pc,Pd;
Link ha=GetHead(Pa);
Link hb=GetHead(Pb);
Link qa=NextPos(Pa,ha);
Link qb=NextPos(Pb,hb);
Link s,qc;
term a,b,c;
InitList(Pd);
a=qa->data;
b=qb->data;
while(a.expn>=b.expn){
InitList(Pc);
c.expn=a.expn-b.expn;
c.coef=a.coef/b.coef;
if(MakeNode(s,c)){
qc=GetLast(Pc);
InsAfter(qc,s);
Pc.tail=s;
Pc.len++;
}
AddPolyn(Pd,Pc);
MultiPolyn(Pc,Pb);
Su qa=NextPos(Pa,qa);
a=qa->data;
}
printf("The quotient polynomail is :\n");
PrintPolyn(Pd);
printf("The complement minor is :\n");
PrintPolyn(Pa);
}
int main(){
polynomail P1;
polynomail P2;
CreatePolyn (P1,3);
CreatePolyn (P2,2);
printf("\nThe length of poly1 is %d\n",P1.len);
PrintPolyn(P1);
printf("\nThe length of poly2 is %d\n",P2.len);
PrintPolyn(P2);
DivPolyn(P1,P2);
return OK;
}
你代码,具体有什么问题啊
(1)C语言中没有引用的概念,所以,你的代码中函数中带&的都要改成指针
(2)括号不匹配,有的地方漏了),有的地方把}写成了)
(3)变量重名(不知道是不是代码粘贴的问题)
你代码用代码段贴出来吧,不然真没法给你改