关于链表一元多项式求和的问题

void Link:: Add(Node*L1,Node*L2)
{
Node*pre=L1,*p=pre->next;
Node*qre=L2,*q=qre->next,*v;
while(p!=NULL&&q!=NULL)
{
if(p->expexp)
{
pre=p;
p=p->next;
}
else if(p->exp>q->exp)
{
v=q->next;
pre->next=q;
q->next=p;
q=v;
pre=pre->next;
}
else
{
p->coef=q->coef+p->coef;
if(p->coef==0){
pre->next=p->next;
delete p;
p=pre->next;
}
else{
pre=p;
p=p->next;
}
qre->next=q->next;
delete q;
q=qre->next;
}
}
if(q!=NULL) p->next=q;
delete v;
delete qre;
delete L2;
qre=NULL;
L2=NULL;
}
这是我定义的加法函数(其中LInk类里的Nodefirst放到public里面了),可是运行的时候,会用访问位置冲突,希望大家可以帮忙看一下。(来自王红梅数据结构)

0

1个回答

void Link:: Add(Node*L1,Node*L2)
{
Node*pre=L1,*p=pre->next;
Node*qre=L2,*q=qre->next,*v;
while(p!=NULL&&q!=NULL)
{
if(p->expexp)//这里应该是p->expexp
{
pre=p;
p=p->next;
}
else if(p->exp>q->exp)
{
v=q->next;
pre->next=q;
q->next=p;
q=v;
pre=pre->next;
}
else
{
p->coef=q->coef+p->coef;
if(p->coef==0){
pre->next=p->next;
delete p;
p=pre->next;
}
else{
pre=p;
p=p->next;
}
qre->next=q->next;
delete q;
q=qre->next;
}
}
if(q!=NULL) p->next=q;//报错的原因在这里,应该是if(q!=NULL) pre->next=q;
delete v;
delete qre;
delete L2;
qre=NULL;
L2=NULL;
}


1
m0_37606959
virtual_stardust 回复xxxuuuooo: 因为循环退出时p=NULL,p->next就是一个未定义的地址了。
一年多之前 回复
xxxuuuooo
xxxuuuooo 可以麻烦解释一下原因,为什么必须是qre而不是q呢
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
数据结构链表的应用C++一元多项式求和
数据结构,链表的应用,基于C++,一元多项式求和,带主程序,可直接运行。
一元多项式求和的两种实现(数组和链表)
一元多项式求和一般都是有两种实现方式,小编下面就附上我对这两种方式的理解和实现代码。 1.数组实现。这种方式实现一元多项式加法,是把数组下标当做一元多项式的指数,在数组中存放系数。这种方式在实现一元多项是加法是通过遍历数组下标来获取指数信息,通过指数信息将系数进行相加。利用数组在实现一元多项式加法,优点是操作简单,运算处理速度快,缺点是占用的内存大(此处内存大是指一开始所申请的内存计算机无法分配...
c语言单链表实现一元多项式的相加
把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。     一元多项式可以用单链表表示,结点结构图示如下: coef  exp  next;伪代码如下:1. 工作指针p、q初始化;2. while(p存在且q存在)执行下列三种情形之一   2.1 如果p->exp<q->exp,则指针p后移;    2.2 如果p->exp>q-...
单链表实现一元多项式相加
# include # include # include typedef struct  LNode {   int  coef;   int  exp;   struct  LNode *next; }node; node *Createlist()//创建一元多项式链表 {   node *head,*middle,*s;//新定义三个链表head
java数据结构之单链表应用之一元多项式求和
利用java中单链表进行一元多项式求和,下面直接看案例分析: package LinkedList; import LinkedList.Elem.Node; public class LinkedAdd { public Node add(Elem e1,Elem e2){ Node pre=e1.getNode(); Node qre=e2.getNode(); Node p=
一元多项式相加用链表实现
题目说明: 编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能: 1. 多项式求和 输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc (提示:调用CreatePolyn(polynomial &P,int m)。 输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。 0. 退出 输入: 根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例): 1 多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数) 多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数) 多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数) 0 ---操作终止,退出。 输出: 对应一组输入,输出一次操作的结果(参见测试用例)。 1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。零多项式的输出格式为<0,0> 0 无输出
用单链表实现一元多项式的加法(c++).
这个程序是用单链表实现一元多项式加法,用的是c++语言。
算法:一元多项式的表示及相加(链表实现)-数据结构(4)
一、算法问题描述 为了计算多个一元多项式相加,参照书上P40的式子相加,需要建立在有序链表的基础上,跟merge的算法类似。链表的基本操作就不表述了。书P39-P43 二、需要用到的数据结构 1、单链表 //=============单链表===================== //int length_L = 0;//记录链表的长度 不包括头结点 typedef struct LNo
一元多项式的相加链表实现
使用单链表实现一元多项式的相加,
利用单链表实现一元多项式的表示及相加
第一个博客
基于单链表实现一元n次多项式的创建、输出和求和操作
在主函数中调用函数CreatePolyn ()函数创建两个多项式: 2 + 3X + 5X3 + 2X4 3 + 2X + 4X2 然后调用函数AddPolyn求它们的和,最后打印出求和后的结果。 提示: /*①多项式数据结构定义*/ typedef  struct pnode{       float coef;                 //系数       int
数据结构—— 一元多项式的表示及相加(C语言单链表实现)
代码比较简单,没有完全按照严蔚敏版《数据结构(C语言版)》上39页到43页上的要求,只是实现了简单功能,且此代码输入多项式时只能按升幂的顺序输入(因为没有写多项式排序的函数) 个人感觉此代码短小精悍,且易理解,看懂了的话可以尝试完全按照书上的要求自己写代码。 直接上代码: #include&amp;amp;lt;stdio.h&amp;amp;gt; #include&amp;amp;lt;stdlib.h&amp;amp;gt; #define LEN s...
【数据结构】单链表实现一元多项式的相加减
#include&amp;amp;lt;stdio.h&amp;amp;gt; #include&amp;amp;lt;stdlib.h&amp;amp;gt; typedef struct{ float coef;//系数 int expn;//指数 }Term; typedef struct ploynomial{ Term term; ploynomial* next; }ploynomial,*LinkList; void InitLis...
两个一元多项式相加(链表 || 顺序表实现)
顺序表实现: #include #include #include #include #include using namespace std; #define maxsize 1000 struct Data { double coef; int exp; }; struct List { Data* elem; int length; }; char s[100];
一元多项式表示及相加
数据结构第二章实验一元多项式求和,c语言链式结构实现
c++数据结构一元多项式求和
方法一般,时间复杂度高,请前辈指教首先定义节点类型template&amp;lt;class DataType&amp;gt; struct Node { DataType data; Node&amp;lt;DataType&amp;gt; *next; }; struct elem { int coef; int exp; };将LinkList的泛型指定为elem,并初始化。(个人小白,能力有限,未能想到好的结构体...
java实现一元多项式相加
项的类   package demo; //一元多项式的项 public class term { //系数 int coef; //指数 int expn; public term() { } public term(int coef, int expn) { this.coef = coef; ...
C语言:用链表实现一元多项式的加法
/* 一元多多项式的加法 1.先创建链表,存储多项式 2.输出多项式 3.两个多项式相加 4.输出多项式 */ # include # include typedef struct dxs //多项式节点 { float coe; //系数 int exp; //指数 struct dxs * pNext; //指针域 }DXS, * PDXS; PDXS c
用链表实现一元多项式加减、求导(Java)
Lnode.java package PloyItem; /** *@Author wzy *@Date 2017年11月12日 *@Version JDK 1.8 *@Description */ public class Lnode implements Comparable&amp;lt;Lnode&amp;gt;,Cloneable{ public double coef; ...
单链表的应用:纯C语言实现两个一元多项式相加求值(书上代码)
/*Polynomial.h*/ #ifndef POLYNOMIAL_H_INCLUDED #define POLYNOMIAL_H_INCLUDED #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;math.h&amp;gt; #include &amp;lt;stdbool.h&amp;gt; #define maxSize 30 ...
一元多项式相加的算法和C++实现
利用顺序表的链式存储实现一元多项式的加法
实验2 一元多项式的运算(基于链表)
  问题描述 设Pn(x)和Qm(x)分别两个一元多项式。试编写程序实现一元多项式的加法运算。 基本要求 需要基于线性表的基本操作来实现一元多项式的加法运算 需要利用有序链表来实现线性表。 (注意此处!顺序链表的意思就是你的节点数据必须是有序的!) 一、问题分析: 一元多项式就是说类似于这样的式子:2x^3+3x^6......未知数只有一个的式子。我的思路是基于链表来实现,两个多项...
数据结构(c语言)一元多项式的表示相加级实现
数据结构(C语言版)严蔚敏版的内容,用C语言写的一元多项式的表示相加操作的实现,用vc6和其他的C语言运行软件都能运行
7-1(链表) 一元多项式的乘法与加法运算(20 point(s))
既然说让用链表做,那就用链表做╭(╯^╰)╮ 加法是归并算法 乘法是第一个式子的每一项和第二个的整串相加 挺恶心的代码如下: #include #include #include #include using namespace std; typedef struct node{ int value,mi; node *next; }
单链表实现一元多项式乘法与加法运算(C语言)
#include&amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; typedef struct Node *PtrToNode; struct Node{ int coe; int exp; PtrToNode next; }; typedef PtrToNode List; List read(); void Print( List L ); List ...
一元多项式的表示及相加
一元多项式的表示及相加 设计目的与要求 题目与设计要求 我们设计的程序为一元多项式的表示及相加,这是使用C++语言写成。我们使用计算机处理的对象之间通常存在着的是一种最简单的线性关系,这类数学模型可称为线性的数据结构。而数据存储结构有两种:顺序存储结构和链式存储结构。线性表是最常用且最简单的一种数据结构。所以我们做的是———–一元多项式的表示及相加,其过程其实是对线性标的操作。实验结...
一元多项式的表示和相加
一元多项式的表示和相加是数据结构(C语言)中的一个简单的问题,这里我们用C++的一些东西来实现它。(简洁版)首先是表示多项式,多项式有一些列的单项组成,每一项都有系数和指数两个量,考虑到多项式的长度和指数的不确定性,显而易见,应该使用链表来存储它。由上面的叙述很容易得到单项的结构:struct Poly { int first; int second; Poly *next;
C语言实现一元多项式的创建、相加
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;string.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; #define ERROR 0 #define OK 1 typedef struct pNode                                    //建立一元多项式 { int coef; //系数 int exp;//...
严蔚敏数据结构:链表实现一元多项式相加
一、基本概念 1、多项式pn(x)可表示成:  pn(x)=a0+a1x+a2x2+…+anxn。 listP={(a0,e0),(a1,e1),(a2,e2),…,(an,en) }。在这种线性表描述中,各个结点包括两个数据域,对应的类型描述为: typedef struct node { double coef;            //系数为双精度型   int expn
西南科技大学OJ题 一元多项式加法运算的实现1040
一元多项式加法运算的实现 编程实现一元多项式的加法运算。(要求用链表实现) 输入 第一个一元多项式A; 第二个一元多项式B。 以(0,0)作为输入结束。 输出 多项式A和多项式B的和。 样例输入 5,3 7,8 9,15 0,0 2,0 6,3 -7,8 0,0 样例输出 2x^0+11x^3+9x^15     #include&amp;lt;stdio.h&amp;gt; in...
c++实现链式存储结构实现一元多项式的加法运算
使用顺序存储结构或链式存储结构实现一元多项式的加法运算。 采用链式结构实现的 #include using namespace std; struct Node { int coef; int exp; Node *next; }; //初始化 void InitList(Node * &L) { L = new Node; L->next =
用链表实现一元多项式的加、减、乘、求导运算
在数据结构线性表的链表学习中有一个很有趣的题目:计算两个多项式的加、减、乘和多项式的导数。   题目不难,将多项式的系数和指数存进链表,然后进行相应操作即可。   一、加法:     1、判断指数是否相等,若相等则将系数相加,相加后不为零就开辟新空间,将新的系数存入结点,尾插进新链表中。     2、如果表达式1的指数小于表达式2的指数,就将表达式1的该结点数据复制进新结点中,并将新结点尾
链表问题——两个单链表生成相加链表
【题目】   假设链表中每一个节点的值都在0-9之间,那么链表整体就可以代表一个整数   例如:9->3->7代表937   给定两个这种链表的头节点head1和head2,请生成代表两个整数相加值的结果链表,并返回结果链表的头节点,注意进位问题【代码】//介绍两种方法,一种利用栈,一种利用逆序链表 import java.util.*;class Node { public int
数据结构实验1(一元多项式的相加和相乘)
实验要求: 1.设计带表头的结点的单链表表示多项式类。 2.在该类上增加成员函数void PolyMul(Polynominal &r),并重载*运算符。 3.实现菜单驱动的main函数,测试多项式的各个运算:输入多项式,显示多项式,以及多项式加法和乘法运算。 4.采用带表头的非循环链表存储多项式。 大致结构以及加法的运算书上的代码已经给出。乘法运算:将乘数多项式的每一项与被乘数
两个多项式相加的程序(链表)
思路: 1、定义结构体struct,包含元素coef,exp 2、创建链表输入函数 polypointer createLink(int n); 3、创建两个多项式相加的函数 polypointer PolyAdd(polypointer a,polypointer b); 其中,PolyAdd函数调用函数 polypointer Attach(int e,int c,polypoin
【c++版数据结构】之用带头节点的单链表实现一元多项式(C语言版)
所实现的一元多项式的结构如下图所示: 若只对多项式进行“求值”等不改变多项式系数和指数的运算,采用类似顺序表的顺序存储结构即可,否则应采用链式存储结构,本文因为要进行一元多项式的加法,加法,乘法,
c语言一元多项式的相加
1. 问题描述 设计一个程序实现两个一元稀疏多项式的表示及基本操作(建立、销毁、输出、加法、减法等操作)。 2. 算法设计 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项;对于两个一元多 项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。因为多项式指数最高项以及项数是不确定的,因
数据结构之一元多项式相加
问题 采用链式存储结构,将两个线性链表表示的一元多项式相加,并输出。 算法设计 1、程序结构设计 1)数据结构  typedef struct node { floatcoef; //序数 intexpn; //指数 struct node *next; //指向下一个
一元多项式相乘链表的实现
一、题目 将两个一元多项式相乘,最后将相乘的结果输出。 一元多项式指数默认递增。输入时依次输入每项系数和指数。 比如: 多项式A:1+2*x-4*x^4 多项式B:2-2*x+5^x^4 输入: 0 1 2 1 -4 4 0 0 2 0 -2 1 5 4 0 0 输出: 2+2*x+13*x^5+20*x^8 二、题目分析 首先得会一元多项式的相加:点击打开
PAT 一元多项式的乘法与加法运算(链表 c++版)
题目按照指数递减的顺序给出两个一元多项式,输出两个多项式的乘积,还有 和 ,按照指数递减的顺序。 用链表实现一元多项式的乘法与加法运算。 首先来看加法运算 多项式 poly1 x^4 + 3x^3 + 6x 多项式 poly2 6x^5 + 4x^4 + 6 既然用到链表,自然少不了结构体 struct node{ int coef; //系数 int expn...