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

相关文章

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

Python 内置的一些数据结构

文章目录 1. 列表 (List)2. 元组 (Tuple)3. 字典 (Dictionary)4. 集合 (Set)5. 字符串 (String) Python 提供了几种内置的数据结构来存储和操作数据,每种都有其独特的特点和用途。下面是一些常用的数据结构及其简要说明: 1. 列表 (List) 列表是一种可变的有序集合,可以存放任意类型的数据。列表中的元素可以通过索

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4