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

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

int coef; int exp;

struct lin kli ne

实验三、

链表及其多项式相加

建立多项式链表流程

2.

{

、程序流程图 1.主过程

*n ext;

{

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 ; line *creat()

/

*

建立多项式列表 */

开辟一个新单元 */

录入多项式 */

line

*p0;

p0=p;

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

)

do

printf("%d x 的%(次幕",p 0->coef, pO->ex p);

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:

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;}

理头结点 */

两个非空多项式相加 */

{ ha=la;

/*

只修改 la 的指针 */

/*

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

{ /*

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

/* 刚开始时特殊处

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 */

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

**************/

mai n()

line

*la,*lb,*lc;

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

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

多项式 La:\n"

); prin t(la); printf ("

多项式 Lb:\n"

); prin t(lb); printf (" 多项式 La 与Lb 的和是:\n"); lc=AddL in e(la,lb); prin t(lc);

freeNode(lb);

} 一、 实验目的: 1•了解栈存储结构的特点; 2.掌握栈存储结构的应用。 二、 实验原理: 栈是限制在表的一端进行插入和删除的线性表。 允许插入、删除的这一端称 为栈顶,另一个固定端称为栈底。 由于栈的“先进先出” 结构来进行求解。

数制转换问题: 将十进制数N 转换为r r=8为例转换方法如下: 特点,在很多实际问题中都利用栈做一个辅助的数据 进制的数,其转换方法利用辗转相除法: N=3456 N 3467 433 54 6

N / 8

433 54

6

所以:(3456)10 = (整除)

3 1 6 6 (6600) 8

(求

余)

4

相关文档
最新文档