一、实验目的
(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;
}