一元多项式的基本操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

将一元多项式存储为链式结构的线性表,表中数据元素存储有两个数据项(系数项和指数项)。其中,线性表按照指数升序存储。分别用Pa和Pb表示两个一元多项式。Pa=Pa+Pb,“和多项式”链表中的结点无需另生成,而应该是从两个多项式的链表中摘取。其运算规则如下:假设指针qa和qb分别指向A,两个多项式中当前进行比较的某个结点,则比较两个结点中的指数项,有下列3种情况:1指针qa所指结点的指数值小于指针qb所指结点的指数值,则应摘取qa所指的结点插入到“和多项式”链表中去;2指针qa所指结点的指数值大于指针qb所指结点的指数值,则应摘取qb所指的结点插入到“和多项式”链表中去;3指针qa所指结点的指数值等于指针qb所指结点的指数值,则应将两个结点的系数项相加,若和数不等于零,则修改qa所指结点的系数值,同时释放qb所指的结点,反之,从多项式A的链表中删除相应的结点,并且释放qa,qb所指结点。具体代码如下:

typedef struct {

float coef;

int expn;

}term,ElemType;

typedef struct LNode{

ElemType data;

struct LNode *next;

}LNode,*LinkList;

typedef LinkList polynomial;

Status InitList(LinkList &L){

L=(LinkList)malloc(sizeof(LNode));

if(!L) return ERROR;

L->data.coef=0.0;

L->data.expn=-1;

L->next=NULL;

return OK;

}

LinkList Get head(LinkList L){

return L;

}

void SetCurElem(LNode* &NodeAdd,ElemType e){

NodeAdd->data.coef=e.coef;

NodeAdd->data.expn=e.expn;

}

Status cmp(ElemType a,ElemType b){

if(a.expn

if(a.expn==b.expn)return 0;

return 1;

}

Status MakeNode(LNode* & n,ElemType e){

n=(LNode*)malloc(sizeof(LNode));

if(!n) return ERROR;

SetCurElem(n,e);

n->next=NULL;

return OK;

}

void InsFirst(LinkList &InsertAdd,LNode* &n){

n->next=InsertAdd->next;

InsertAdd->next=n;

}

Status DelFirst(LinkList L,LNode* &q){

if(L->next==NULL) return ERROR;

q=L->next;

L->next=L->next->next;

return OK;

}

Status LocateElem(LinkList L,ElemType e,LinkList & q,int (*cmpare)(ElemType ,ElemType)){//the var q is a position LinkList BefAddCurNode;

BefAddCurNode=L;

while(L->next){

BefAddCurNode=L;

L=L->next;

int result=cmpare(L->data,e);

if(result==0){

q=L;

return true;

}

if(result==1){

q=BefAddCurNode;

return false;

}

BefAddCurNode=L;

}

q=BefAddCurNode;

return false;

}

LinkList NextPos(LinkList List,LinkList List head){ while(List){

if(List==ListHead)

return List->next;

List=List->next;

}

return NULL;

}

ElemType GetCurElem(LinkList NodeAdd){

return NodeAdd->data;

}

Status ListEmpty(LinkList list){

if(list->next==NULL)

return true;

return false;

}

Status Append(polynomial & Polyn,LinkList NodeAdd){ if(NodeAdd==NULL)return ERROR;

LinkList head=Polyn;

while(head->next){

head=head->next;

}

head->next=NodeAdd;

return true;

}

void FreeNode(LNode * NodeAdd){

free(NodeAdd);

}

相关文档
最新文档