数据与结构实验一:一元多项式的加法

一、实验目的

(1)掌握线性表链式存储下的基本操作实现;

(2)掌握用链表实现多项式加法的操作。

二、实验内容

(1)单链表的基本接口设计与实现,至少包括建立空的链表、判断链表是否为空、插入运算、删除运算和查找运算等功能,并设计主程序对接口进行测试。

(2)设计链表表示多项式的数据结构设计,并设计算法实现多项式的加法运算。

三、 实验要求

(1)单链表的基本接口要求设计合理,实现高效。合理设计实现链表和多项式加法的子函数,函数的输入参数设计合理,尽量减少全局变量的使用。

(2)多项式加法程序要求考虑到空间效率、时间效率和健壮性等。

四、具体问题描述

问题描述:

设计一个一元稀疏多项式简单的加减法计算器

实现要求:

一元稀疏多项式简单计算器的基本功能是:

(1)输入并建立多项式:

(2)输出多项式

(3)多项式A和B相加,建立多项式C=A+B,并输出相加的结果多项式C

(4)选作:多项式A和B相减,建立多项式C=A-B,并输出相加的结果多项式D

#include<stdio.h>
#include<stdlib.h>
struct tagNode {
int coef;
int exp;
struct tagNode *next;
};
typedef struct tagNode node;
typedef struct tagNode* Pnode;

Pnode createNode() {
int coef;
int exp;
Pnode head, tail, p;
p = (Pnode)malloc(sizeof(node));
head = (Pnode)malloc(sizeof(node));
head->coef = NULL;
head->exp = NULL;
head->next = p;
while (1) {
scanf("%d", &coef);
scanf("%d", &exp);
if (coef && exp != 0) {
p->coef = coef;
p->exp = exp;
tail = (Pnode)malloc(sizeof(node));
tail->next = NULL;
p->next = tail;
p = tail;
}
else {
break;
}
}
return head;
}

Pnode addNode(Pnode pa, Pnode pb) {
Pnode p, q, pr;
p = pa->next;
pr = pa;
q = pb->next;
while (p->next != NULL && q->next != NULL) {
if (p->exp > q->exp) {
Pnode x;
x = (Pnode)malloc(sizeof(node));
x->coef = q->coef;
x->exp = q->exp;
pr->next = x;
x->next = p;
q = q->next;
p = pr->next;
}
if (p->exp < q->exp) {
p = p->next;
pr = pr->next;
}
if (p->exp == q->exp)
{
    float x = p->coef + q->coef;
    if (x == 0) {
    pr->next = p->next;
    p = p->next;
    q = q->next;
    }
else {
    p->coef = x;
    p = p->next;
    pr = pr->next;
    q = q->next;
}
}
}
if (q) {
pr->next = q;
}
return pa;
}


int main()
{printf("输入系数与指数(空格隔开),以0 0作为结束标志\n");
Pnode pa, pb, x;
int j=1;
printf("");
pa = createNode();
printf("");
pb = createNode();
pa = addNode(pa, pb);
x = pa->next;
while (x->next != NULL) {
j++;
x = x->next;
}
for (int i = 0; i < j-1; i++) {
printf("%dX^%d",pa->next->coef,pa->next->exp);
if(i<j-2)
printf("+");
pa = pa->next;
}
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值