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

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语言单链表实现一元多项式的相加
把任意给定的两个一元多项式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-...
一元多项式求和的两种实现(数组和链表)
一元多项式求和一般都是有两种实现方式,小编下面就附上我对这两种方式的理解和实现代码。 1.数组实现。这种方式实现一元多项式加法,是把数组下标当做一元多项式的指数,在数组中存放系数。这种方式在实现一元多项是加法是通过遍历数组下标来获取指数信息,通过指数信息将系数进行相加。利用数组在实现一元多项式加法,优点是操作简单,运算处理速度快,缺点是占用的内存大(此处内存大是指一开始所申请的内存计算机无法分配...
一元多项式求和(Java链表实现)
package com.polyn_sum; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Polyn {  public float coef;//系数  public int expn;//指数 }  class LNode {
数据结构链表的应用C++一元多项式求和
数据结构,链表的应用,基于C++,一元多项式求和,带主程序,可直接运行。
利用单链表实现一元多项式的表示及相加
第一个博客
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=
用单链表实现一元多项式的加法(c++).
这个程序是用单链表实现一元多项式加法,用的是c++语言。
一元多项式相加用链表实现
题目说明: 编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能: 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 无输出
(数据结构与算法)一元多项式求和---单链表的应用
(数据结构与算法)一元多项式求和---单链表的应用 http://blog.csdn.net/eeeduo/article/details/37877677
C语言:用链表实现一元多项式的加法
/* 一元多多项式的加法 1.先创建链表,存储多项式 2.输出多项式 3.两个多项式相加 4.输出多项式 */ # include # include typedef struct dxs //多项式节点 { float coe; //系数 int exp; //指数 struct dxs * pNext; //指针域 }DXS, * PDXS; PDXS c
用单链表实现一元多项式相加 C++代码
#include using namespace std; /*结点的定义*/ typedef struct LNode { float coef; int exp; struct LNode *next; }LNode; typede
算法:一元多项式的表示及相加(链表实现)-数据结构(4)
一、算法问题描述 为了计算多个一元多项式相加,参照书上P40的式子相加,需要建立在有序链表的基础上,跟merge的算法类似。链表的基本操作就不表述了。书P39-P43 二、需要用到的数据结构 1、单链表 //=============单链表===================== //int length_L = 0;//记录链表的长度 不包括头结点 typedef struct LNo
单链表实现一元多项式相加
# include # include # include typedef struct  LNode {   int  coef;   int  exp;   struct  LNode *next; }node; node *Createlist()//创建一元多项式链表 {   node *head,*middle,*s;//新定义三个链表head
数据结构实践——链表:多项式求和
本文针对数据结构基础系列网络课程(2):线性表的实践项目。【项目6 - 多项式求和】   用单链表存储一元多项式,并实现两个多项式的加法。 提示: 1、存储多项式的数据结构   多项式的通式是pn(x)=anxn+an−1xn−1+...+a1x+a0p_n(x)=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0。n次多项式共有n+1项。直观地,可以定义一个数
【数据结构】单链表实现一元多项式的相加减
#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...
链表应用-- 一元多项式相加
typedef struct ret { int coef; //系数 int expn; //指数 }ElemType; typedef struct LNode { ElemType data; struct LNode *next; }*LinkList; void init(LinkList &L) { L=(LinkList)malloc(sizeof(LNode
基于单链表实现一元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 #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++数据结构一元多项式求和
方法一般,时间复杂度高,请前辈指教首先定义节点类型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,并初始化。(个人小白,能力有限,未能想到好的结构体...
一元多项式的加法C++
#include #include typedef struct term{  int z;   //指数  float x;     //系数  struct term *next; }term; struct term *creatlink();    //创建多项式 int cmp(int  a,int b);    //指数比较 struct term * addin(s
数据结构——链表—一元多项式的表示及相加
设计一个一元稀疏多项式简单计算器,要求基本功能: (1)输入并建立多项式 (2)输出多项式 (3)两个多项式相加 (4)两个多项式相减 /* 一元稀疏多项式简单计算器 计算两个一元多项式的加减 输入:两个多项式的项数,两个多项式每项的系数和指数、 输入时暂不支持自动排序,即必须按指数从小到大输入,指数最小为0 支持输入系数为零的项 last edit:2017年10月14
用链表实现一元多项式加减、求导(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; ...
数据结构(12)线性表之C++实现一元多项式相加
导言 一元多项式表现形式 部分算法描述 具体实现代码 代码实现第一种 第二种代码的实现仅链表存储形式实现导言上篇文章,我们说明了一元多项式相加采取了什么形式和抽象定义数据类型定义以及实现一元多项式相加的方法,本节将用具体代码来实现一元多项式相加。一元多项式表现形式typedef struct{//项的表示,多项式的项作为LinkList的数据元素 float coef;//系数 int expn;/
java实现一元多项式相加
项的类   package demo; //一元多项式的项 public class term { //系数 int coef; //指数 int expn; public term() { } public term(int coef, int expn) { this.coef = coef; ...
数据结构实验之一元多项式相加
【实验内容】结合书上第41页的例子,采用链式存储结构,将两个线性链表表示的一元多项式相加,并输出。此一元多项式遵循多项式相加运算规则:对于两个一元多项式中存在指数相同的项时,其对应系数相加。合并后系数和为零时,删除“和多项式”中此项;合并后系数和不为零时,则构成“和多项式”中的一项。对于两个一元多项式中存在的指数不相同的项,则分别复抄到“和多项式”中去,原多项式保持不变。
线性表之单链表实现一元多项式相加,求值,求导
一元多项式定义: 设a0,a1,a2,…,an-1,an都是数域F中的数(注:1,2,……,n-1,n均为a的下角标),n是非负整数,那么表达式 anx^n +an-1x^(n-1)+…+a2x^2 +a1x + a0(an≠0) (1) 叫做数域F上一个文字x的多项式或一元多项式。在多项式(1)中,a0叫做零次多项式或常数项,a1x叫做一次项,一般,aix叫做i次项,ai叫做i
一元多项式的加法器 C语言版 链表版 顺序表版
数据结构经典案例,一元多项式的加法器
实验2 一元多项式的运算(基于链表)
  问题描述 设Pn(x)和Qm(x)分别两个一元多项式。试编写程序实现一元多项式的加法运算。 基本要求 需要基于线性表的基本操作来实现一元多项式的加法运算 需要利用有序链表来实现线性表。 (注意此处!顺序链表的意思就是你的节点数据必须是有序的!) 一、问题分析: 一元多项式就是说类似于这样的式子:2x^3+3x^6......未知数只有一个的式子。我的思路是基于链表来实现,两个多项...
单链表的应用:纯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 ...
严蔚敏数据结构:链表实现一元多项式相加
一、基本概念 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
7-1(链表) 一元多项式的乘法与加法运算(20 point(s))
既然说让用链表做,那就用链表做╭(╯^╰)╮ 加法是归并算法 乘法是第一个式子的每一项和第二个的整串相加 挺恶心的代码如下: #include #include #include #include using namespace std; typedef struct node{ int value,mi; node *next; }
数据结构(c语言)一元多项式的表示相加级实现
数据结构(C语言版)严蔚敏版的内容,用C语言写的一元多项式的表示相加操作的实现,用vc6和其他的C语言运行软件都能运行
一元多项式的加法和乘法运算(Java实现)——浙大数据结构(陈越)
输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。 输入样例: 4 3 4 -5 2 6 1 -2 0 3
c++实现链式存储结构实现一元多项式的加法运算
使用顺序存储结构或链式存储结构实现一元多项式的加法运算。 采用链式结构实现的 #include using namespace std; struct Node { int coef; int exp; Node *next; }; //初始化 void InitList(Node * &L) { L = new Node; L->next =
一元多项式的表示和相加
一元多项式的表示和相加是数据结构(C语言)中的一个简单的问题,这里我们用C++的一些东西来实现它。(简洁版)首先是表示多项式,多项式有一些列的单项组成,每一项都有系数和指数两个量,考虑到多项式的长度和指数的不确定性,显而易见,应该使用链表来存储它。由上面的叙述很容易得到单项的结构:struct Poly { int first; int second; Poly *next;
西南科技大学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...
数据结构实验1(一元多项式的相加和相乘)
实验要求: 1.设计带表头的结点的单链表表示多项式类。 2.在该类上增加成员函数void PolyMul(Polynominal &r),并重载*运算符。 3.实现菜单驱动的main函数,测试多项式的各个运算:输入多项式,显示多项式,以及多项式加法和乘法运算。 4.采用带表头的非循环链表存储多项式。 大致结构以及加法的运算书上的代码已经给出。乘法运算:将乘数多项式的每一项与被乘数
(链表实现)写出两个一元多项式相加的算法
/*实验2 3. 试写出两个一元多项式相加的算法。 用链表来存储一元多项式,并且要在程序中验证其功能实现。 此题的源程序保存为2_e1.cpp */ #include using namespace std; struct node { int co; //系数 int exp; //指数 struct node * next; }; node* Creat() {//尾插法
数据结构【线性表(二)链表】项目之多项式求和
*数据结构【线性表(二)链表】项目之多项式求和   *Copyright (c) 2015 烟台大学计算机与控制工程学院   *All right reserved.   *文件名称:list.cpp   *标题:数据结构【线性表(二)链表】项目之多项式求和   *分类:多项式求和   *writer:罗海员   *date:2015年10月05日   *版本:V1.0
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 关于大数据培训 关于云计算