数据结构—稀疏多项式相加

news2024/12/23 10:04:34

    利用链表实现两个稀疏多项式相加。

代码

#include <iostream>
using namespace std;

// 定义多项式项结构体
typedef struct {
    int x;  // 系数
    int y;  // 指数
} Elemtype;

// 定义链表节点结构体
typedef struct Node {
    Elemtype data;
    struct Node* next;
} *LinkList, Node;

// 创建多项式链表,按照乱序输入顺序输出
void Great_LinkList(LinkList& L) {
    int n;
    Node* s, * pre, * p;
    cout << "请输入多项式的项数:";
    cin >> n;
    L = new Node;  // 建立一个带头结点的单链表
    L->next = NULL;
    for (int i = 1; i <= n; i++) {
        s = new Node;
        cout << "请输入第" << i << "项的系数和指数:";
        cin >> s->data.x >> s->data.y;//注意此步在for循环内部,每次都需要从头开始找
        pre = L; p = L->next;
        while (p && p->data.y < s->data.y) {
            pre = p;
            p = p->next;
        }
        s->next = p;
        pre->next = s;
    }
}

// 显示多项式
void Show(LinkList L) {
    Node* p;
    p = L->next;
    cout << "f(x)=";
    while (p) {
        if (p->data.x != 0) {
            if (p->data.x > 0) {
                if (p->data.y)
                    cout << "+" << p->data.x << "x^" << p->data.y;
                else
                    cout << p->data.x;
            }
            else {
                if (p->data.y)
                    cout << p->data.x << "x^" << p->data.y;
                else
                    cout << p->data.x;
            }
        }
        p = p->next;
    }
}

// 多项式相加
void Add_List(LinkList& LA, LinkList& LB) {
    Node* pa, * pb, * pc, * r;
    pc = LA;  // 复制 LA 链表作为 LC 的初始值
    pa = LA->next; pb = LB->next;
    while (pa && pb) {
        if (pa->data.y == pb->data.y) {
            pa->data.x += pb->data.x;  // 相加系数
            if (pa->data.x != 0) {  // 系数相加不为 0
                pc->next = pa;
                pc = pa;
                pa = pa->next;
                r = pb; pb = pb->next; delete r;  // 跳过当前项

            }
            else {  // 系数为 0,删除当前项
                r = pa; pa = pa->next; delete r;
                r = pb; pb = pb->next; delete r;
            }
        }
        else if (pa->data.y < pb->data.y) {
            pc->next = pa;
            pc = pa;
            pa = pa->next;
        }
        else {
            pc->next = pb;
            pc = pb;
            pb = pb->next;
        }
    }
    pc->next = pa ? pa : pb;  // 连接剩余项
    Show(LA);

}

int main() {
    int n;
    LinkList L1, L2, LC;
    cout << "开始创建第一个多项式:" << endl;
    Great_LinkList(L1);  // 创建第一个多项式
    cout << "开始创建第二个多项式:" << endl;
    Great_LinkList(L2);  // 创建第二个多项式

    cout << "你创建的第一个多项式为:";
    Show(L1);
    cout << endl;

    cout << "你创建的第二个多项式为:";
    Show(L2);
    cout << endl;

    cout << "两个多项式相加的结果为:";
    Add_List(L1, L2);
    cout << endl;
    return 0;
}
void Add_List(LinkList & LA, LinkList & LB, LinkList & LC) {
		Node* pa, * pb, * pc;
		LC = LA, detete LB;
		pa = LA->next; pb = LB->next;
		pc = LC->next;
		while (pa && pb) {
			if (pa->data.y == pb->data.y) {
				sum = pa->data.y + pb->data.y;
				if (sum) {  //系数和不为0
					pa->data.y = sum;
					pc->next = pa;
					pc = pa;
					pa = pa->next;
					r = pb; pb = pb->next; delete pb;
				}
				else {   //系数相加为0
					r = pa; pa = pa->next; delete pa;
					r = pb; pb = pb->next; delete pb;
				}
			}
			else if (pa->data.y < pb->data.y) {
				pc->next = pa;
				pc = pa;
				pa = pa->next;
			}
			else {
				pc->next = pb;
				pc = pb;
				pb = pb->next;
			
			}

			pc->next = pa ? pa : pb;
			Show(LC);

 运行结果

下面是我最初写的多项式相加的代码,传了一个LC过来,最后运行出现了错误。  

void Add_List(LinkList & LA, LinkList & LB, LinkList & LC) {
		Node* pa, * pb, * pc;
		LC = LA, detete LB;
		pa = LA->next; pb = LB->next;
		pc = LC->next;
		while (pa && pb) {
			if (pa->data.y == pb->data.y) {
				sum = pa->data.y + pb->data.y;
				if (sum) {  //系数和不为0
					pa->data.y = sum;
					pc->next = pa;
					pc = pa;
					pa = pa->next;
					r = pb; pb = pb->next; delete pb;
				}
				else {   //系数相加为0
					r = pa; pa = pa->next; delete pa;
					r = pb; pb = pb->next; delete pb;
				}
			}
			else if (pa->data.y < pb->data.y) {
				pc->next = pa;
				pc = pa;
				pa = pa->next;
			}
			else {
				pc->next = pb;
				pc = pb;
				pb = pb->next;
			
			}

			pc->next = pa ? pa : pb;
			Show(LC);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用 ArcGIS Pro 制作好看的高程渲染图

虽然 ArcGIS Pro 已经提供了很多好看的配色方案&#xff0c;但是如果直接对高程DEM进行渲染效果不是很理想&#xff0c;我们可以结合山体阴影让高程渲染图看起来更加立体&#xff0c;这里为大家介绍一下制作方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是…

C#,精巧实用的代码,调用GDI32.DLL绘制图形的源程序

C#画图既可以使用 System.Drawing 命名空间的各种基础类。在某些情况下,也可以直接调用 Windows 的公共基础链接库 GDI32.DLL。 1 GDI32.DLL图形设备接口 意图 Microsoft Windows图形设备界面(GDI)使应用程序能够在视频显示器和打印机上使用图形和格式化文本。基于Window…

停车管理系统asp.net+sqlserver

停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库&#xff0c; 功能模块&#xff1a; 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…

Qt学习笔记(一)——Qt初识

本文仅是 学习时记录的笔记&#xff0c;供自己复习时使用。 1.创建好文件(QWidget窗口) main.cpp中&#xff1a; 注&#xff1a;Widget类继承父类QWidget. widget.h中&#xff1a; Widget.cpp中&#xff1a; 打开Forms文件夹中的widget.ui文件&#xff1a; 打开左边编辑&am…

由浅到深认识Java语言(7):方法(函数)

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

外包干了5天,技术退步明显。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

springcloud-Eureka注册中心

如果你要理解这个技术博客博客专栏 请先学习以下基本的知识&#xff1a; 什么是微服务什么是服务拆分什么是springcloud Springcloud为微服务开发提供了一个比较泛用和全面的解决框架&#xff0c;springcloud继承了spring一直以来的风格——不重复造轮子&#xff0c;里面很多的…

ideaSSM 工厂效能管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 工厂效能管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

FFmpeg分析视频信息输出到指定格式(csv/flat/ini/json/xml)文件中

1.查看ffprobe帮助 输出格式参数说明: 本例将演示输出csv,flat,ini,json,xml格式 输出所使用的参数如下: 1.输出csv格式: ffprobe -i 4K.mp4 -select_streams v -show_frames -of csv -o 4K.csv 输出: 2.输出flat格式: ffprobe -i 4K.mp4 -select_streams v -show_frames …

若依微服务跑起来-微服务小白入门(1)

背景 若依的基本框架系列&#xff0c;已经构建起来&#xff0c;请参照 小白入门系列 - 鸡毛掸子 这些东西理解&#xff0c;并且实际板砖以后&#xff0c;有必要对现在流行的一些概念做一些升级&#xff0c;现在我们就进入到所谓的cloud版本&#xff0c;其实&#xff0c;前面的…

7.【Linux】进程间通信2(共享内存||消息队列)

共享内存 介绍 1.共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。 2.当共享内存创建出来后&#xff0c;通过系统调用挂接到…

二、阅读器的开发(初始)-- 1、阅读器简介及开发准备工作

1、阅读器工作原理及开发流程 1.1阅读器工作原理简介 电子书&#xff08;有txt、pdf、epub、mobi等格式&#xff09;->解析&#xff08;书名、作者、目录、封面、章节等&#xff09;->&#xff08;通过阅读器引擎&#xff09;渲染 -> 功能&#xff08;字号、背景色、…

力扣热门算法题 56. 合并区间,57. 插入区间,58. 最后一个单词的长度v

56. 合并区间&#xff0c;57. 插入区间&#xff0c;58. 最后一个单词的长度&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.20 可通过leetcode所有测试用例。 目录 56. 合并区间 解题思路 完整代码 Python Java ​编辑 5…

【NLP笔记】预训练+微调范式之OpenAI Transformer、ELMo、ULM-FiT、Bert..

文章目录 OpenAI TransformerELMoULM-FiTBert基础结构Embedding预训练&微调 【原文链接】&#xff1a; BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 【本文参考链接】 The Illustrated BERT, ELMo, and co. (How NLP Cracked Tra…

ASP.NET-Global.asax使用详解

本文介绍了如何使用Global.asax文件来增强ASP.NET Web应用程序的功能。首先&#xff0c;介绍了Global.asax文件的作用和基本功能。接着&#xff0c;详细探讨了在Global.asax中实现定时任务、应用程序级别的错误处理、应用程序启动和结束时执行特定逻辑等功能。随后&#xff0c;…

Macbook m1安装docker详细教程

下载安装包 进入官网 https://www.docker.com/ 下滑找到下载位置 下滑找到Mac对应安装包 等待下载完成即可。 安装 双击打开下载的安装包 将Docker拖到Applications中 安装完成后&#xff0c;找到安装的Docker 双击打开 点击accept同意 进入下面&#xff1a; 点fini…

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs 相关链接&#xff1a;arXiv 关键字&#xff1a;Vision-language models、ChartQA、multimodal reasoning、fine-tuning、synthetic data 摘要 本文提出了一种技术&#xff0c;将大型语言模型&#xff08;…

Python分析人民日报关于台湾的报道

【项目背景】 《人民日报》数据挖掘&#xff0c;时间&#xff1a;1949.10.1-2023.12.31 标题含有“台湾”的报道 需要以下内容 1、标题&#xff0c;即上述时间段的报道标题和相应的报道时间、版面 2、包含标题、时间、版面的所有报道内容 3、报道的年份和数量的趋势图 4、…

CV论文--2024.3.21

1、Chain-of-Spot: Interactive Reasoning Improves Large Vision-Language Models 中文标题&#xff1a;Chain-of-Spot&#xff1a;交互式推理改进大型视觉语言模型 简介&#xff1a;在视觉语言理解领域&#xff0c;模型在解释和推理视觉内容方面的熟练程度已经成为许多应用的…

企业组织机构代码查询入口词令直达关键词口令是什么?

什么是企业组织机构代码&#xff1f; 组织机构代码是国内依法注册、依法登记的机关、企事业单位、社会团体&#xff0c;以及其他组织机构颁发一个在全国范围内唯一的、始终不变的代码标识。组织机构代码在单位的运营和管理中发挥着重要作用。 如何查询获取企业组织机构代码&a…