链表c语言将两函数式相加,数据结构:用链表实现两个多项式相加,用C++或者C语言实现多项式相加,求完整代码...

满意答案

00e27ab806e4881f8254fe7ae8741834.png

kdhlt4814

推荐于 2017.09.16

00e27ab806e4881f8254fe7ae8741834.png

采纳率:55%    等级:8

已帮助:215人

#include 

#include 

using namespace std;

#define EPS 1E-6

typedef struct item {

double coefficient;

int power;

struct item *next;

} *POLYNOMIAL,*pItem;

POLYNOMIAL Create() { // 创建多项式

pItem head,p;

double coe;

int pwr,iterms,i;

head = p = new item;

cin >> iterms; // 读入多项式的项数

for(i = 0; i 

cin >> coe >> pwr;

p->next = new item;

p->next->coefficient = coe;

p->next->power = pwr;

p = p->next;

}

p->next = NULL;

return head;

}

void Sort(POLYNOMIAL head) { // 按幂次降排序

pItem pt,q,p = head;

while(p->next) {

q = p->next;

while(q->next) {

if(p->next->power next->power) {

pt = p->next;

p->next = q->next;

q->next = p->next->next;

p->next->next = pt;

}

else q = q->next;

}

p = p->next;

}

}

void Show(POLYNOMIAL head) { // 显示

POLYNOMIAL p = head->next;

int flag = 1;

if(p == NULL) return;

while(p) {

if(flag) {

if(fabs(p->coefficient) >= EPS) {

if(p->power == 0) cout <coefficient;

else if(p->power == 1) {

if(p->coefficient == 1.0) cout <

else if(p->coefficient == -1.0) cout <

else cout <coefficient <

}

else if(p->coefficient == 1.0) cout <power <

else if(p->coefficient == -1.0) cout <power <

else cout <coefficient <power <

flag = 0;

}

}

else if(p->coefficient > 0.0 && fabs(p->coefficient) >= EPS) {

if(p->power == 0) cout <coefficient <

else if(p->power == 1) {

if(p->coefficient == 1.0) cout <

else cout <coefficient <

}

else if(p->coefficient == 1.0) cout <power <

else cout <coefficient <power <

}

else if(p->coefficient coefficient) >= EPS) {

if(p->power == 0) cout <coefficient <

else if(p->power == 1) {

if(p->coefficient == -1.0) cout <

else cout <coefficient <

}

else if(p->coefficient == -1.0) cout <power <

else cout <coefficient <power <

}

p = p->next;

}

cout <

}

double Power(double x,int n) {

double value = 1.0;

int i;

for(i = 0; i 

return value;

}

double Value(POLYNOMIAL head,double x) { // 多项式求值

POLYNOMIAL p;

double value = 0.0;

for(p = head->next; p; p = p->next)

value += p->coefficient * Power(x,p->power);

return value;

}

POLYNOMIAL Copy(POLYNOMIAL A) {

POLYNOMIAL head,t,p;

head = t = new item;

for(p = A->next; p; p = p->next) {

t->next = new item;

t->next->coefficient = p->coefficient;

t->next->power = p->power;

t = t->next;

}

t->next = NULL;

return head;

}

POLYNOMIAL Additive(POLYNOMIAL A, POLYNOMIAL B) { // 多项式加

POLYNOMIAL head,p,q,t;

head = Copy(A);

for(p = B; p->next; p = p->next) {

q = head;

while(q->next) {

if(p->next->power == q->next->power) {

q->next->coefficient += p->next->coefficient;

if(fabs(q->next->coefficient) <= EPS) {

t = q->next;

q->next = t->next;

free(t);

}

break;

}

q = q->next;

}

if(q->next == NULL) {

q->next = new item;

q->next->coefficient = p->next->coefficient;

q->next->power = p->next->power;

q->next->next = NULL;

}

}

Sort(head);

return head;

}

POLYNOMIAL Subtract(POLYNOMIAL A, POLYNOMIAL B) { // 多项式减

POLYNOMIAL head,p,q,t;

head = Copy(A);

for(p = B; p->next; p = p->next) {

q = head;

while(q->next) {

if(p->next->power == q->next->power) {

q->next->coefficient -= p->next->coefficient;

if(fabs(q->next->coefficient) <= EPS) {

t = q->next;

q->next = t->next;

free(t);

}

break;

}

q = q->next;

}

if(q->next == NULL) {

q->next = new item;

q->next->coefficient = -p->next->coefficient;

q->next->power = p->next->power;

q->next->next = NULL;

}

}

Sort(head);

return head;

}

POLYNOMIAL Multiplication(POLYNOMIAL A, POLYNOMIAL B) { // 多项式乘

POLYNOMIAL head,t,p,q;

head = t = new item;

for(p = A->next; p; p = p->next) { // 完成相乘过程

for(q = B->next; q; q = q->next) {

t->next = new item;

t->next->coefficient = p->coefficient * q->coefficient;

t->next->power = p->power + q->power;

t = t->next;

}

}

t->next = NULL;

Sort(head); // 排序

p = head;

while(p->next) { // 合并同类项

q = p->next;

while(q->next) {

if(p->next->power == q->next->power) {

p->next->coefficient += q->next->coefficient;

t = q->next;

q->next = t->next;

free(t);

}

else q = q->next;

}

p = p->next;

}

return head;

}

void FreeMemory(POLYNOMIAL head) {

POLYNOMIAL q,p = head;

while(p) {

q = p;

p = q->next;

delete q;

}

}

int main() {

char ops[3];

POLYNOMIAL A,B,C = NULL,D = NULL,E = NULL;

cout <

A = Create();

Sort(A);

cout <

cout <

B = Create();

Sort(B);

cout <

cout <

fflush(stdin);

gets(ops);

for(int i = 0; ops[i]; ++i) {

switch(ops[i]) {

case '+' : C = Additive(A,B);

cout <

Show(C);

break;

case '-' : D = Subtract(A,B);

cout <

Show(D);

break;

case '*' : E = Multiplication(A,B);

cout <

Show(E);

break;

default  : cout <

}

}

cout <

cout <

if(C) cout <

if(D) cout <

if(E) cout <

FreeMemory(A);

FreeMemory(B);

FreeMemory(C);

FreeMemory(D);

FreeMemory(E);

return 0;

}追问: VC2013运行提示226行get的用法错误,有只是多项式加法的吗·····

追答: gets()读入字符串没有问题。

这里有加、减、乘三个函数,把不需要的函数去掉就行了。

但创建函数Create()需要简单修改,以便满足题目的要求。

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值