一元稀疏多项式计算器 【 数据结构课设作业 】 带界面

您所在的位置:网站首页 设计一个一元多项式计算器 一元稀疏多项式计算器 【 数据结构课设作业 】 带界面

一元稀疏多项式计算器 【 数据结构课设作业 】 带界面

2024-07-11 18:31| 来源: 网络整理| 查看: 265

typedef struct Polynomial //多项式

{

double coef; //系数

int expn; //指数

struct Polynomial *next;//指针

} Polynomial, *Polyn;

//创建一个头指针为head,项数为m的一元多项式

void CreatPolyn(Polyn head, int m) //建立链表,在插入过程中实现单链表有序

{

for (int i = 0; i < m; i++)

{

Polyn p = (Polyn)malloc(sizeof(struct Polynomial));

p->coef = coefs[i];

p->expn = expns[i];

if (p->coef == 0) free§;

else

{

Polyn q1, q2;

q1 = head;

q2 = head->next;

while (q2 != NULL && p->expn < q2->expn)

{

q1 = q2;

q2 = q2->next;

}

if (q2 != NULL && p->expn == q2->expn)

{

q2->coef += p->coef;

if (q2->coef == 0)

{

q1->next = q2->next;

free(q2);

}

free§;

}

else

{

p->next = q2;

q1->next = p;

}

}

}

}

void printPoLlyn(Polyn head) //进行格式化打印输出

{

Polyn q = head->next;

int flag = 0; //记录是否为第一项

if (!q)

{

puts(“NULL(0)\t”);

return;

}

while (q)

{

if (q->coef > 0 && flag == 1)

{

printf(“+”);

}

flag = 1;

if (q->coef != 1 && q->coef != -1)

{

printf(“%g”, q->coef);

if (q->expn == 1) printf(“x”);

else if (q->expn != 0) printf(“x^%d”, q->expn);

}

else

{

if (q->coef == 1)

{

if (q->expn == 0) printf(“1”);

else if (q->expn == 1) printf(“x”);

else printf(“x^%d”, q->expn);

}

if (q->coef == -1)

{

if (q->expn == 0) printf(“-1”);

else if (q->expn == 1) printf(“-x”);

else printf(“-x^%d”, q->expn);

}

}

q = q->next;

}

printf(“\t\t”);

}

int compare(Polyn a, Polyn b)//比较两个多项式的大小

{

if (a&&b) // 多项式a和b均不为空

{

if (a->expn > b->expn) return 1;// a的指数大于b的指数

else if (a->expn < b->expn) return -1;

else return 0;

}

else if (!a&&b) return -1; //a为空,b不为空

else if (a && !b) return 1; //b为空,a不为空

else if (!a && !b)return 0; //a,b均为空

}

void clear(Polyn c)

{

Polyn p, q;

p = c;

while (p->next != NULL)

{

q = p->next;

p->next = q->next;

free(q);

}

c->next = NULL;

}

void addPolyn(Polyn a1, Polyn b1, Polyn c1) //求解a+b

{

Polyn a = a1;

Polyn b = b1;

Polyn c = c1;

clear(c1);

Polyn head, qc;

Polyn qa = a->next;

Polyn qb = b->next;

head = c;

while (qa || qb)

{

qc = (Polyn)malloc(sizeof(Polynomial));

if (compare(qa, qb) == 1)

{

qc->coef = qa->coef;

qc->expn = qa->expn;

qa = qa->next;

}

else if (compare(qa, qb) == 0) //指数相同,直接相加

{

qc->coef = qa->coef + qb->coef;

qc->expn = qa->expn;

qa = qa->next;

qb = qb->next;

}

else

{

qc->coef = qb->coef;

qc->expn = qb->expn;

qb = qb->next;

}

if (qc->coef != 0) //将该节点插入链表中

{

qc->next = c->next;

c->next = qc;

c = qc;

}

}

}

void subPolyn(Polyn a, Polyn b, Polyn c)// a-b可以用a+b来求解,把b改成-b

{

Polyn h = b;

Polyn p = b->next;

while §

{

p->coef *= -1;

p = p->next;

}

addPolyn(a, h, c);

for (Polyn i = h->next; i != 0; i = i->next)

{

i->coef *= -1;

}

}

void goto_xy(int x, int y)

{

HANDLE hOut;

hOut = GetStdHandle(STD_OUTPUT_HANDLE);

COORD pos = { x,y };

SetConsoleCursorPosition(hOut, pos);

}

void value(Polyn head, int flag) //计算x的值

{

goto_xy(2, 3); printf(" x = ");

double sum = 0, x;

scanf(“%lf”, &x);

for (Polyn p = head->next; p != 0; p = p->next)

{

double tmp = 1;

int expn = p->expn;

while (expn != 0) //指数不为0

{

if (expn < 0) tmp /= x, expn++;

else if (expn > 0) tmp *= x, expn–;

}

sum += p->coef*tmp;

}

goto_xy(2, 4);

if (flag == 1) printf(" A( %g )的值 = %g", x, sum);

if (flag == 2) printf(" B( %g )的值 = %g", x, sum);

if (flag == 3) printf(" C( %g )的值 = %g", x, sum);

}

void show(Polyn a, Polyn b, Polyn c) //界面实现

{

goto_xy(0, 0); printf(“┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n”);

goto_xy(0, 1); printf(“┃ 一元稀疏多项式简单计算器 ┃\n”);

goto_xy(0, 2); printf(“┃━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┫”);

goto_xy(0, 3); printf(“┃\n”); goto_xy(50, 3); printf(“┃\n”);

goto_xy(0, 4); printf(“┃\n”); goto_xy(50, 4); printf(“┃\n”);

goto_xy(0, 5); printf(“┃\n”); goto_xy(50, 5); printf(“┃\n”);

goto_xy(0, 6); printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫”);

goto_xy(0, 7); printf(“┃★ A :”); goto_xy(7, 7); printPoLlyn(a); goto_xy(50, 7); printf(“┃”);

goto_xy(0, 8); printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫”);

goto_xy(0, 9); printf(“┃★ B :”); goto_xy(7, 9); printPoLlyn(b); goto_xy(50, 9); printf(“┃”);

goto_xy(0, 10); printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫”);

goto_xy(0, 11); printf(“┃★ C :”); goto_xy(7, 11); printPoLlyn©; goto_xy(50, 11); printf(“┃”);

goto_xy(0, 12); printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┫”);

goto_xy(0, 13); printf(“┃ 按7进行多项式相加 ┃ 按8进行多项式相减 ┃\n”);

goto_xy(0, 14); printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫”);

goto_xy(0, 15); printf(“┃ 按0进行多项式输入 ┃ 按enter执行确定换行 ┃\n”);

goto_xy(0, 16); printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫”);

goto_xy(0, 17); printf(“┃ 按1计算多项式A的值 ┃ 按2计算多项式B的值 ┃\n”);

goto_xy(0, 18); printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫”);

goto_xy(0, 19); printf(“┃ 按3计算多项式C的值 ┃ 按t退出多项式计算器 ┃\n”);

goto_xy(0, 20); printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━┫”);

goto_xy(0, 21); printf(“┃ ┃\n”);

goto_xy(0, 22); printf(“┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛”);

goto_xy(1, 23); printf(“【 一元稀疏多项式简单计算器】”);

goto_xy(2, 3);

}

void create(Polyn a1, Polyn b1)

{

Polyn a = a1;

Polyn b = b1;

clear(a1);

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。 img img img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java) img

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

图片转存中…(img-Yz0WlT3C-1711094118037)] [外链图片转存中…(img-pbVU8GaW-1711094118037)] [外链图片转存中…(img-qbNlHuEl-1711094118038)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java) [外链图片转存中…(img-Cd3NDutv-1711094118038)]

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

麻烦帮忙转发一下这篇文章+关注我

[外链图片转存中…(img-ImPJ1oeQ-1711094118039)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3