1071: 数据结构作业01 -- 一元多项式的求积

2024-06-16 20:48

本文主要是介绍1071: 数据结构作业01 -- 一元多项式的求积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1071: 数据结构作业01 -- 一元多项式的求积

时间限制: 1 Sec   内存限制: 128 MB
提交: 48   解决: 8
[ 提交][ 状态][ 论坛]

题目描述

一个一元多项式可以看作由若干个一元单项式按降幂排列成的线性表。请编写程序对输入的两个一元多项式求积,并输出求积的结果。

输入

输入为两个一元多项式,每个一元多项式输入一行,按照降幂依次输入每个单项式的系数和指数,并以-1 -1作为结束。 系数和指数均为整数,指数不小于0。

输出

输出为求积结果多项式,按照降幂依次输出每个单项的系数和指数,每个数值后面用一个空格隔开,输出结果多项式后换行。 系数为0的单项式不得输出——除非结果多项式就是0,则直接输出0。

样例输入

2 5 1 0 -1 -15 4 3 0 -1 -1

样例输出

10 9 6 5 5 4 3 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0typedef int Status;typedef int Elemtype;typedef struct Node{Elemtype cof;Elemtype inx;struct Node *next;
}Node, *Linklist;Status visit(Elemtype a, Elemtype b)
{printf("%d %d", a, b);return OK;
}Status InitList(Linklist *L)
{(*L) = (Linklist)malloc (sizeof(Node));if(!(*L))return ERROR;(*L)->next = NULL;return OK;
}int ListLength(Linklist L)
{int i;Linklist p;p = L->next;i = 0;while(p){i++;p = p->next;}return i;
}Status GetElem(Linklist L, int i, Elemtype *cof, Elemtype *inx)
{Linklist p;int j;p = L;j = 1;while(p && j < i){p = p->next;j++;}if(!p || j > i){return ERROR;}*cof = p->next->cof;*inx = p->next->inx;return OK;
}int ElemLocate(Linklist L, Elemtype cof, Elemtype inx)
{Linklist p;int i;i = 1;p = L->next;while(p && (p->cof != cof || p->inx != inx)){p = p->next;i++;}if(i <= ListLength(L))return i;elsereturn 0;
}Status ListInsert(Linklist *L, int i, Elemtype cof, Elemtype inx)
{if(i < 1 || i > ListLength(*L) + 1)return ERROR;int j;Linklist p, q;q = (Linklist)malloc (sizeof(Node));p = *L;j = 1;while(p && j < i){p = p->next;++j;}if(!p || j > i)return ERROR;q->next = p->next;p->next = q;q->cof = cof;q->inx = inx;return OK;
}Status ListDelete(Linklist *L, int i, Elemtype *cof, Elemtype *inx)
{int j;Linklist p, q;p = *L;j = 1;while(p && j < i){p = p->next;++j;}if(!p || j > i)return ERROR;q = p->next;p->next = p->next->next;free(q);return OK;
}Status ClearList(Linklist *L)
{Linklist p, q;p = (*L)->next;while(p){q = p;p = p->next;free(q);}(*L)->next = NULL;return OK;
}Status ListEmpty(Linklist L)
{if(L->next == NULL)return TRUE;return FALSE;
}Status ListTraverse(Linklist L)
{Linklist p;int juge;juge = 0;p = L->next;while(p){juge = p->cof;if(juge)break;p = p->next;}if(!juge){printf("0\n");return OK;}p = L->next;while(p && p->next != NULL){if(p->cof != 0){visit(p->cof, p->inx);printf(" ");}p = p->next;}visit(p->cof, p->inx);printf("\n");return OK;
}Status PopList(Linklist *L)
{Linklist p, q;Elemtype temp;for(p = (*L)->next; p != NULL; p = p->next){for(q = p->next; q != NULL; q = q->next){if(p->inx < q->inx){temp = p->inx;p->inx = q->inx;q->inx = temp;temp = p->cof;p->cof = q->cof;q->cof = temp;}}}return OK;
}Status FinalList(Linklist *L)
{Linklist p, q;//q = (Linklist *)malloc (sizeof(Node));p = (*L)->next;while(p){if(p->next != NULL && p->next->inx == p->inx){p->cof += p->next->cof;q = p->next;p->next = p->next->next;free(q);continue;}p = p->next;}return OK;
}Status MulList(Linklist *L3, Linklist L1, Linklist L2)
{int i;//L1循环int j;//L2循环int k;//L3循环Elemtype cof1, inx1;Elemtype cof2, inx2;Elemtype cof3, inx3;//int *num;k = 1;for(i = 1; i <= ListLength(L1); i++){for(j = 1; j <= ListLength(L2); j++){GetElem(L1, i, &cof1, &inx1);GetElem(L2, j, &cof2, &inx2);cof3 = cof1 * cof2;inx3 = inx1 + inx2;ListInsert(L3, k++, cof3, inx3);}}PopList(L3);return OK;
}int main()
{Linklist L1, L2, L3;int cofn, inxn;//输入的系数和指数int i;//循环InitList(&L1);InitList(&L2);InitList(&L3);i = 1;while(scanf("%d%d", &cofn, &inxn), inxn != -1){ListInsert(&L1, i++, cofn, inxn);}i = 1;while(scanf("%d%d", &cofn, &inxn), cofn != -1){ListInsert(&L2, i++, cofn, inxn);}MulList(&L3, L1, L2);FinalList(&L3);ListTraverse(L3);return 0;
}/*1071=================/test0.out
Right:
-91 2000 4484 1999 7401 1998 2023 1997 -1022
-----------------
Your:
0=================
=================/test1.out
Right:
-10 10 -40 8 -40 6 -20 5 -40 3 -10 0 -----------------
Your:
0=================*/


这篇关于1071: 数据结构作业01 -- 一元多项式的求积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067508

相关文章

C++入门01

1、.h和.cpp 源文件 (.cpp)源文件是C++程序的实际实现代码文件,其中包含了具体的函数和类的定义、实现以及其他相关的代码。主要特点如下:实现代码: 源文件中包含了函数、类的具体实现代码,用于实现程序的功能。编译单元: 源文件通常是一个编译单元,即单独编译的基本单位。每个源文件都会经过编译器的处理,生成对应的目标文件。包含头文件: 源文件可以通过#include指令引入头文件,以使

【数据结构】线性表:顺序表

文章目录 1. 线性表2. 顺序表2.1 概念及结构2.2 接口实现2.3 顺序表的问题及思考 1. 线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式

数据结构9——排序

一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较到最后一组相邻元素,这一步结束最后一个元素必然是参与比较的元素中最大的元素;按照大的居右原则,重新从左到后比较,前一轮中得到的最后一个元素不参4与比较,得出新一轮的最大元素;按照上述规则,每一轮结

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#,C++中的实际应用案例C#示例C++示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试各种可能的组合来找到所有解的算法。这种算法通常用于解决组合问题,如排列、组合、棋盘游

407串口01发送

实验一: 工程。 链接:https://pan.baidu.com/s/1g8DV4yZWOix0BbcZ08LYDQ?pwd=2176 提取码:2176 串口1的使用。发送功能。 单片机发送信息到电脑。 通过串口进行通信。 首先单片机这边。 单片机这边,需要对单片机的串口模块进行使能初始化,设置串口的格式。 单片机和电脑的串口收发格式要配置一致。不然A和B肯定通信不成功,鸡和鸭讲,

嵌入式学习——数据结构(哈希、排序)——day50

1. 查找二叉树、搜索二叉树、平衡二叉树 2. 哈希表——人的身份证——哈希函数 3. 哈希冲突、哈希矛盾 4. 哈希代码 4.1 创建哈希表 4.2  5. 算法设计 5.1 正确性 5.2 可读性(高内聚、低耦合) 5.3 健壮性 5.4 高效率(时间复杂度)时间复杂度越低,效率越高, 5.5 低储存(空间复杂度)空间复杂度越低,存储空间越少 6.排序算法 6.1 冒

【数据结构与算法 经典例题】使用队列实现栈(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​​ 目录  一、问题描述 二、前置知识 三、解题思路 四、C语言实现代码 🍃队列实现代码:

数据结构:二叉树详解 c++信息学奥赛基础知识讲解

目录 一、二叉树的定义 二、二叉树的形态 三、二叉树的性质 四、二叉树的存储 五、二叉树的创建与遍历(递归) 六、二叉树实现 创建二叉树 展示二叉树 1、计算数的高度 2、计算数的叶子数量 3、计算数的宽度 4、层次遍历 5、前序遍历 递归写法 非递归写法 6、中序遍历 递归写法 非递归写法 7、后序遍历 递归写法 非递归写法 8、输出根节点到所有叶

Java数据结构4-链表

1. ArrayList的缺陷 由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景。因此:java集合中又引入了LinkedList,即链表结构。 2. 链表 2.1 链表的概念及结构 链表是一种物理存储结构上非连续存储结构,数据元素

大学生自救数据结构与算法(py实现)——01递归

目录 目录 递归 基本概念 工作原理 基本要素 优点 缺点 实现技巧 实例解析:计算阶乘 斐波那契数列 高效的斐波那契数列 python中的最大递归深度 二分查找 基本原理 性能分析 优化与变体 线性递归  元素序列的递归求和 二路递归 二路递归的基本概念 典型应用 工作原理 多重递归  示例:计算卡特兰数(Catalan Number) 尾递