【线性表】一元多项式相乘


  1 /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
2
3 #include <stdio.h>
4 #include <stdlib.h>
5
6 typedef struct node
7 { int coef, exp; //coef:系数 exp:指数
8 struct node *next; //下一项
9 } NODE;
10
11 NODE* multiplication( NODE *, NODE * , NODE * );
12 void input( NODE * );
13 void output( NODE * );
14
15 int main()
16 { NODE * head1, * head2, * head3;
17
18 head1 = ( NODE * ) malloc( sizeof(NODE) );
19 input( head1 );
20
21 head2 = ( NODE * ) malloc( sizeof(NODE) );
22 input( head2 );
23
24 head3 = ( NODE * ) malloc( sizeof(NODE) );
25 head3->next = NULL;
26 head3 = multiplication( head1, head2, head3 );
27 output( head3 );
28
29 return 0;
30 }
31 /* PRESET CODE END - NEVER TOUCH CODE ABOVE */
32 void input( NODE * head ) //输入顺序:< - 0~9 , >
33 { int flag, sign, sum, x; //sign:系数符号 sum:项系数,指数
34 char c;
35
36 NODE * p = head;
37
38 while ( (c=getchar()) !=‘\n‘ )
39 {
40 if ( c == ‘<‘ )
41 { sum = 0;
42 sign = 1;
43 flag = 1;
44 }
45 else if ( c ==‘-‘ )
46 sign = -1;
47 else if( c >=‘0‘&& c <=‘9‘ )
48 { sum = sum*10 + c - ‘0‘;
49 }
50 else if ( c == ‘,‘ )
51 { if ( flag == 1 )
52 { x = sign * sum;
53 sum = 0;
54 flag = 2;
55 sign = 1;
56 }
57 }
58 else if ( c == ‘>‘ )
59 { p->next = ( NODE * ) malloc( sizeof(NODE) );
60 p->next->coef = x; //项系数
61 p->next->exp = sign * sum; //指数
62 p = p->next;
63 p->next = NULL;
64 flag = 0;
65 }
66 }
67 }
68 void output( NODE * head )
69 {
70 while ( head->next != NULL )
71 { head = head->next;
72 printf("<%d,%d>,", head->coef, head->exp );
73 }
74 printf("\n");
75 }
76 NODE* multiplication( NODE *h1, NODE *h2 , NODE *h3 )//不允许修改指针内容
77 {
78 NODE *head1, *head2, *head3,*head;//head临时头指针
79 int max_exp = 0,count_exp = 0;
80 head1 = h1;
81 head2 = h2;
82 head3 = h3;
83 while(head1->next!=NULL){
84 while(head2->next!=NULL){
85 head3->next = (NODE *) malloc(sizeof(NODE));
86 head3->next->coef = head1->next->coef*head2->next->coef;
87 head3->next->exp = head1->next->exp+head2->next->exp;
88 head2 = head2->next;
89 head3 = head3->next;
90 head3->next = NULL;
91 if(head3->exp>max_exp) //记录最大指数
92 max_exp = head3->exp;
93 }
94 head2 = h2; //返回头指针
95 head1 = head1->next;
96 }
97 //合并指数相同的多项式
98 head = (NODE *)malloc(sizeof(NODE));
99 head->next = (NODE*)malloc(sizeof(NODE));
100 head3 = h3; //返回头指针
101 head1 = head;
102 for(count_exp = 0;count_exp<=max_exp;count_exp++){
103 head->next->coef = 0;
104 head->next->exp = count_exp;
105 while(head3->next!=NULL){
106 if(count_exp == head3->next->exp)
107 head->next->coef += head3->next->coef;
108 head3 = head3->next;
109 }
110 //零多项式标志位
111 if(head->next->coef != 0){
112 head = head->next;
113 head->next = (NODE*)malloc(sizeof(NODE));
114 }
115 head3 = h3; //返回头指针
116 }
117 head->next = NULL;
118 return head1;
119 }
120
121
122

【线性表】一元多项式相乘,布布扣,bubuko.com

时间: 2024-10-06 14:21:59

【线性表】一元多项式相乘的相关文章

第二章:5.线性表应用---一元多项式的表示及相加

前言: 学习了线性表的 顺序结构 和链式结构,那么这种学习有什么用? 本节将会学习如何用线性表来实现 一元多项式的表示及相加. 目录: 1.一元多项式 正文: 一元多项式: 数学上,一个一元多项式可写成 按幂升序排列的形式: Pn(x)= P0 + P1x1 + P2x2 + .... + Pnxn 它由 n+1 个系数唯一确定,因此在计算机里可以用线性表 P 来表示: P= (P0,P1, P2 , ....  Pn): 其中每一项的指数 隐藏在Pi 的序号中 一元多项式的相加(采用 顺序存储

线性表在一元多项式运算中的应用

实验题1-1 多项式运算 [问题描述]有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积. [提示] 用带表头结点的单链表作为多项式的存储表示:要建立两个单链表:多项式相加就是要把一个单链表中的结点插入到另一个单链表中去,要注意插入.删除操作中指针的正确修改. #include <iostream> using namespace std; int k = 1; typedef struct { float coef; //系数 int expn; //指数 }term;

线性表及其实现(1)

线性表及其实现(1) 多项式的表示: [例]一元多项式及其运算 一元多项式: 主要运算:多项式相加.相减.相乘等. [分析]如何表示多项式? ? 多项式项数n ? 各项系数ai 及指数 i 方法一:顺序存储结构直接表示 数组各分量对应多项式各项: a[i]: 项xi的系数ai 两个多项式相加:两个数组对应的分量相加 弊端:当表示x+2x2000 时将会浪费大量的存储空间,且效率低下. 方法二:顺序存储结构表示非零项 每个非零项 aixi 涉及两个信息:系数 ai 和指数 i  可以将一个多项式看

数据结构学习笔记——线性表的应用

数据结构学习笔记——线性表的应用 线性表的应用 线性表的自然连接 计算任意两个表的简单自然连接过程讨论线性表的应用.假设有两个表A和B,分别是m1行.n1列和m2行.n2列,它们简单自然连接结果C=A*B(i==j),其中i表示表A中列号,j表示表B中的列号,C为A和B的笛卡儿积中满足指定连接条件的所有记录组,该连接条件为表A的第i列与表B的第j列相等. 如:         1 2 3                3 5 A  =  2 3 3         B =  1 6       

浅谈线性表的基本操作与应用

线性表作为一种线性数据结构,常应用于信息检索,存储管理等诸多领域,因此了解线性表的基本操作与应用对于我们学习数据结构有着十分重要的意义. 一,线性表的基本操作 首先,我们定义一个线性表的基类linearlist,并以此定义了它的派生类顺序表类seqlist和链表类singlelist.在基类中,我们以抽象函数的形式定义了线性表常用的几种操作,如插入删除等. #ifndef LINEARLIST_H_INCLUDED #define LINEARLIST_H_INCLUDED #include<i

C算法与数据结构-线性表的应用,多项式求和---ShinePans

/*---上机作业作业,二项式加法---*/ /*---By 潘尚 ---*/ /*---日期: 2014-5-8 . ---*/ /*---题目:---*/ //假设有两个稀疏多项式A和B,设计算法完成下列任务 //1.输入并建立多项式A和B; //2.求两个多项式的和多项式C; //3.求两个多项式的积多项式D; //输出4个多项式A,B,C,D; #include <stdio.h> #include <stdlib.h> #include <string.h>

数据结构_线性表_顺序存储之1顺序栈2共享栈_链式存储之链栈_栈的应用举例

1>//栈是先进后出,后进先出的线性表 简称LIFO线性表 //栈的顺序存储结构成为顺序栈(sequebtial stack). //顺序栈利用一组地址连的存储单元依次存放从栈底到 栈顶的数据元素,通常用一维数组存放栈的元素 //"指针"top并非指针,而是表示栈顶元素的当前位置 //top不是指针型变量而是整形变量,top=0空栈,top=MaxSize 表示满栈,当top>maxsize 表示栈溢出 代码 #include <stdio.h> #includ

数据结构:线性表之单链表

线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表有两种存储结构: ①顺序存储结构,即存储单元在一段连续的地址上存储,常见的数组就是顺序存储结构的线性表: ②链式存储结构,即存储单元在不连续的地址上存储.因为其不连续性,除了要存数据元素信息(数据域)外,还要存储它后继元素(结点)的地址(指针域,链).学习链式结构最好将结点结构牢记于心,如下图: 链表的每个结点只含有一个指

数据结构2_线性表

2 线性表 线性结构,线性结构的特点:(1)是数据元素的非空有限集合:(2)存在唯一的一个被称做"第一个"的数据元素:(3)存在唯一的一个被称做"最后一个"的数据元素:(4)除第一个以外,集合中的每个数据元素均有一个前驱:(5)除最后一个以外,集合中的每个数据元素均有一个后继: 2.1 线性表的类型定义 线性表示最常用也是最简单的数据结构. 简言之,一个线性表示n个数据元素的有限序列. 每个数据元素的具体含义在不同的情况下不同,可以是一个整数,一个符号,甚至一页书,