实验三链表及其多项式相加(答案)(DOC)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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