实验三链表及其多项式相加(答案)(DOC)

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

实验三、链表及其多项式相加

、程序流程图

1. 主过程

2. 建立多项式链表流程

参考程序

/* 链表及其多项式相加 */

typedef struct linkline

{

int coef;

int exp;

struct linkline *next;

}

line;

line *creat()

{ /*建立多项式列表*/

int n;

line *head;

line *p1,*p2;

n=0;

printf("(输入的数必须是整数,指数须从小到大依次输入,系数为零表示多项式结束)\n");

p1=p2=(line *)malloc(sizeof(line)); /*开辟一个新单元*/

scanf("%d%d",&p1->coef,&p1->exp); /*录入多项式*/

if (p1->coef==0) head=0;

else

{

while(p1->coef!=0)

{ n++;

if (n==1) head=p1;

else p2->next=p1;

p2=p1;

p1=(line *)malloc(sizeof(line));

scanf("%d%d",&p1->coef,&p1->exp);

}

p2->next=0;

}

return(head);

}

/* 以下是输出多项式的函数 */

void print(line *p)

{

line *p0;

p0=p;

printf(" ");

if(p0!=0)

do

{

printf("%dx的%d次幂",p0->coef,p0->exp);

p0=p0->next;

if(p0!=0) printf("+");

}

while(p0!=0);

else printf(" 空多项式!!");

printf("\n");

}

int compare(int m,int n) /*比较两个整数的大小的函数*/ {

int j;

if (m

if (m==n) j=0;

if (m>n) j=1;

return(j);

}

void freeNode(line *w1) /* 释放一个表中的所有结点 */ {

line *w2;

w2=w1->next;

while(w1)

{ free(w1);

w1=w2;

w2=w2->next; }

}

line *AddLine(line *ha,line *hb) /*两个非空多项式相加*/

{

line *la,*lb,*lc;

int a,b,sum;

lc=ha;

la=ha;

lb=hb;

if ((ha==0)&&(hb!=0)) return(hb);

while ((la!=0)&&(lb!=0))

{ a=la->exp; b=lb->exp;

switch( compare(a,b) ) /*比较当前结点指数的大小 */

{ case -1:

{ ha=la; /*只修改la的指针*/

la=la->next;

break;

}

case 0:

{ sum=la->coef+lb->coef;

if(sum!=0)

{ /* 将其不为零的系数和保存 */

la->coef=sum;

ha=la; la=la->next;

} /* end if*/

else

{ /* 分别删除系数和为零的对应的两个结点 */

if (lc==la) {lc=lc->next;ha=lc;la=ha;} /* 刚开始时特殊处理头结点 */

else{

ha->next=la->next;

la=ha->next;

}

} /*end else*/

hb=lb;

lb=lb->next;

break;

}

case 1:

{ /* 将指数小的项插入到la的前部 */ hb=lb->next;

if(ha==la) {lc=lb;lb->next=ha;la=la->next; } else

{

ha->next=lb;

lb->next=la;

ha=la;

la=la->next;

}

lb=hb->next;

break;

}

} /*end swtich*/

} /*end while*/

if (lb!=0) ha->next=lb;

return(lc);

} /*end AddLine */

/*************以下为主程序**************/

main()

{

line *la,*lb,*lc;

printf("请输入多项式La: ");

la=creat();

printf("请输入多项式Lb: ");

lb=creat();

printf("多项式La:\n");

print(la);

printf("多项式Lb:\n");

print(lb);

printf("多项式La与Lb的和是: \n");

lc=AddLine(la,lb);

print(lc);

freeNode(lb);

}

一、实验目的:

1.了解栈存储结构的特点;

2.掌握栈存储结构的应用。

二、实验原理:

栈是限制在表的一端进行插入和删除的线性表。允许插入、删除的这一端称为栈顶,另一个固定端称为栈底。

由于栈的“先进先出”特点,在很多实际问题中都利用栈做一个辅助的数据结构来进行求解。

数制转换问题:

将十进制数N转换为r进制的数,其转换方法利用辗转相除法:以N=3456,r=8为例转换方法如下:

N N / 8 (整除) N % 8(求余) 3467 433 3 低

433 54 1

54 6 6

6 0 6 高

所以:(3456)10 =(6600)8

相关文档
最新文档