数据结构c语言版实验及源代码

  • 格式:doc
  • 大小:145.17 KB
  • 文档页数:22

下载文档原格式

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

实验1 求两个多项式的相加运算(线性表)

编写一个程序用单链表存储多项式,并实现两个多项式相加的函数。

/*文件名:实验1.cpp*/

#include

#include

#define MAX 20 /*多项式最多项数*/

typedef struct /*定义存放多项式的数组类型*/

{

float coef; /*系数*/

int exp; /*指数*/

} PolyArray[MAX];

typedef struct pnode /*定义单链表结点类型*/

{

float coef; /*系数*/

int exp; /*指数*/

struct pnode *next;

} PolyNode;

void DispPoly(PolyNode *L) /*输出多项式*/

{

PolyNode *p=L->next;

while (p!=NULL)

{

printf("%gX^%d ",p->coef,p->exp);

p=p->next;

}

printf("\n");

}

void CreateListR(PolyNode *&L,PolyArray a,int n) /*尾插法建表*/

{

PolyNode *s,*r;int i;

L=(PolyNode *)malloc(sizeof(PolyNode)); /*创建头结点*/

L->next=NULL;

r=L; /*r始终指向终端结点,开始时指向头结点*/ for (i=0;i

{

s=(PolyNode *)malloc(sizeof(PolyNode));/*创建新结点*/

s->coef=a[i].coef;

s->exp=a[i].exp;

r->next=s; /*将*s插入*r之后*/

r=s;

}

r->next=NULL; /*终端结点next域置为NULL*/

}

void Sort(PolyNode *&head) /*按exp域递减排序*/

{

PolyNode *p=head->next,*q,*r;

if (p!=NULL) /*若原单链表中有一个或以上的数据结点*/ {

r=p->next; /*r保存*p结点后继结点的指针*/

p->next=NULL; /*构造只含一个数据结点的有序表*/

p=r;

while (p!=NULL)

{

r=p->next; /*r保存*p结点后继结点的指针*/

q=head;

while (q->next!=NULL && q->next->exp>p->exp)

q=q->next; /*在有序表中找插入*p的前驱结点*q*/ p->next=q->next; /*将*p插入到*q之后*/

q->next=p;

p=r;

}

}

}

void Add(PolyNode *ha,PolyNode *hb,PolyNode *&hc) /*求两有序集合的并*/ {

PolyNode *pa=ha->next,*pb=hb->next,*s,*tc;

float c;

hc=(PolyNode *)malloc(sizeof(PolyNode)); /*创建头结点*/

tc=hc;

while (pa!=NULL && pb!=NULL)

{

if (pa->exp>pb->exp)

{

s=(PolyNode *)malloc(sizeof(PolyNode)); /*复制结点*/

s->exp=pa->exp;s->coef=pa->coef;

tc->next=s;tc=s;

pa=pa->next;

}

else if (pa->expexp)

{

s=(PolyNode *)malloc(sizeof(PolyNode)); /*复制结点*/

s->exp=pb->exp;s->coef=pb->coef;

tc->next=s;tc=s;

pb=pb->next;

}

else /*pa->exp=pb->exp*/

{

c=pa->coef+pb->coef;

if (c!=0) /*系数之和不为0时创建新结点*/

{

s=(PolyNode *)malloc(sizeof(PolyNode)); /*复制结点*/

s->exp=pa->exp;s->coef=c;

tc->next=s;tc=s;

}

pa=pa->next;

pb=pb->next;

}

}

if (pb!=NULL) pa=pb; /*复制余下的结点*/

while (pa!=NULL)

{

s=(PolyNode *)malloc(sizeof(PolyNode)); /*复制结点*/

s->exp=pa->exp;s->coef=pa->coef;

tc->next=s;tc=s;

pa=pa->next;

}

tc->next=NULL;

}

void main()

{

PolyNode *ha,*hb,*hc;

PolyArray a={{1.2,0},{2.5,1},{3.2,3},{-2.5,5}};

PolyArray b={{-1.2,0},{2.5,1},{3.2,3},{2.5,5},{5.4,10}};

CreateListR(ha,a,4);

CreateListR(hb,b,5);

printf("原多项式A: ");DispPoly(ha);

printf("原多项式B: ");DispPoly(hb);

Sort(ha);

Sort(hb);

printf("有序多项式A: ");DispPoly(ha);

printf("有序多项式B: ");DispPoly(hb);

Add(ha,hb,hc);

printf("多项式相加: ");DispPoly(hc);

}