多项式相加(顺序表)

#include <iostream.h>
typedef struct
{
    int coef;
    int index;
}datatype ;
typedef struct
{
    datatype *elem;
    int length;
}SeqList;
void BuildPoly(SeqList &s)
{
    s.elem=new datatype[10];
    s.length=0;int i=1;
    cin>>s.elem->coef>>s.elem->index;
    while(s.elem[i-1].coef!=-1&&s.elem[i-1].index!=-1)
    {s.length=i;
    cin>>s.elem[i].coef>>s.elem[i].index;i++;}
}
void AddPoly(SeqList s1,SeqList s2,SeqList &s3)
{
   s3.elem=new datatype[10];
   s3.length=0;
   datatype *p1=s1.elem,*p2=s2.elem,*p3=s3.elem;
   while(p1-s1.elem<s1.length&&p2-s2.elem<s2.length)
   {
       if(p1->index<p2->index)
       {p3->coef=p1->coef;p3->index=p1->index;
         p1++;p3++;s3.length++;
       }
       else if(p1->index>p2->index)
       {p3->coef=p2->coef;p3->index=p2->index;
         p2++;p3++;s3.length++;}
       else if(p1->index==p2->index)
       {
           if(p1->coef+p2->coef!=0)
           {
               p3->coef=p1->coef+p2->coef;
               p3->index=p1->index;
               p3++;s3.length++;
           }
           p1++;p2++;
       }
   }
   while(p1-s1.elem<s1.length)
   {
      p3->coef=p1->coef;p3->index=p1->index;
         p1++;p3++;s3.length++;
   }
     while(p2-s2.elem<s2.length)
   {
      p3->coef=p2->coef;p3->index=p2->index;
         p2++;p3++;s3.length++;
   }
}

void DispList(SeqList s)
{
    for(int i=0;i<s.length;i++)
    {        cout<<s.elem[i].coef<<‘\t‘<<s.elem[i].index<<‘\t‘;}
cout<<endl;

}

void main()
{
   SeqList s1,s2,s3;
   BuildPoly(s1);
   BuildPoly(s2);
   AddPoly(s1,s2,s3);
   DispList(s3);
}
时间: 2024-10-29 19:11:45

多项式相加(顺序表)的相关文章

(java描述)关于链表的代码-----单双、循环链表、约瑟夫环、多项式相加

将链表头尾倒置 将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序 双向循环链表 单向循环链表(约瑟夫循环) 多项式相加 程序源代码 单链表.单向循环链表结点类 package javab; public class Node { int data; Node next; public Node(int data){ this.data=data; } } 第一题代码: package javab; import java.util.Scanner; public class I

双链表&amp;链表合并&amp;多项式相加算法

//单链表的合并 //链表合并 //两个链表必须是有序的 #define Maxsize 5 typedef  int elemtype; typedef struct linklist { elemtype data; struct linklist *next; }Linklist; //建立链表1 Linklist *CreateList1 () { int i,data ; Linklist *head, *p, *q; head=p=(Linklist  *)malloc(sizeof

多项式相加&mdash;&mdash;C++和racket

  多项式相加是一个简单到爆的算法练习,学习链表之后一般会波拉波拉讨论稀疏的.稠密的用什么来表示,最后一般都作为链表的练习题出现.其实用数组表示多项式显然是不合理的,大多数的多项式必然没有如此紧密,链表几乎是唯一的选择. 放在C++这样的语言中,直接构建一个poly结点类,然后构建一个poly类(包含一个头节点),基本就是一个单链表的实现,对于多项式的加法,和有序链表的连接比较像,乘法就更简单了,逐一乘过去就行了. 导致这个过程很简单的原因是类的封装(C 用结构体加一些函数对于这个简单的问题也基

矩阵压缩存储之三元组顺序表

形态: 实现: /***************************************** 稀疏矩阵的三元组顺序表存储表示 by Rowandjj 2014/5/3 ******************************************/ #include<IOSTREAM> using namespace std; #define MAXSIZE 12500//非零元个数的最大值 typedef int ElemType; typedef struct _DATA_

顺序表算法设计笔记

1.已知长度为 n 的线性表 A 采用顺序存储结构.设计一个时间复杂度为O(n).空间复杂度为O(1)的算法,该算法删除线性表中所有值为 x 的元素数据元素. 以下两种方法都不满足要求: 如果删除一个值为 x 的元素都进行移动, 其时间复杂度为O(n^2),时间复杂度为O(1). 如果借助一个新的顺序表, 存放将A中所有不为x的元素,其时间复杂度O(n), 空间复杂度为O(n). 解法一:设删除 A 中所有值等于 x 元素后的顺序表为A1, 显然A1包含在 A 中, 为此A1重用 A 的空间.

2、顺序表

|   版权声明:本文为博主原创文章,未经博主允许不得转载. 从这节开始,以后的每一篇博文均会只描述一种结构.这节要解决的是有关顺序表的问题,下面就是一些顺序表的基本的知识点: 1. 顺序表其实就是线性表的一种,它除开始节点和结束节点之外的其他节点,均有且只有一个直接前趋和一个直接后继,开始 节点只有一个后继节点,结束节点只有一个前趋节点. 2. 用顺序存储方法存储的线性表就称为顺序表. 3. 顺序存储方法就是将表的节点按逻辑上的次序依次的存放在一组连续的内存单元中,这里是指在逻辑上连续排列,在

顺序表查找和有序表查找

查找里面顺比表查找和有序表查找(包括二分查找,插值查找,斐波那契查找)比较简单,直接贴代码,代码里面有详细注释. 1 #include <iostream> 2 using namespace std; 3 4 //顺序表查找(线性查找.静态表查找) 时间复杂度为O(n) 5 int Seq_Search(int *s,int n,int key) 6 { 7 s[0] = key; //设置了一个哨兵,避免了每次比较一次过后都要判断查找位置是否越界 8 int i = n; 9 while

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

模板实现顺序表

类模板的成员函数: 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板的成员函数具有和模板相同的模板参数.因此,在=定义在类模板之外的成员函数就必须以template开始,后跟类模板参数列表. 类模板中的友元函数: 类模板中的友元函数,应该在类中定义.若只在类中声明,在类外定义,则在链接时会出现错误. 类模板实现顺序表: "SeqList.h" //冒泡法 "test.cpp"

顺序表

#include <cstdio> #include <cstring> ///都用c语言写的 #include <iostream> ///建议从主函数开始看 #include <cstdlib> using namespace std; int sequence_map[1000]; int total_sequence = 0; void init_sequence() ///主界面. ///一级菜单中顺序表的操作界面 init初始化 { printf