数据结构与算法基础(王卓)(10):案例分析与实现(多项式;稀疏多项式;图书管理系统(略);)

news2024/10/3 4:30:25

题干:

用线性表和链表的方式,分别实现(稀疏)多项式的

  • 定义(构造框架)创建
  • 加减乘

(多项式)线性表的创建:

(略,相较于其他操作难度不,以后有时间写)


(多项式)链表的创建:

要是我们写,估计大概率就只是把多项式里面的几个项输进去就完事了:

project 1:

#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit

#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE  -1
#define OVERFLOW   -2   

#define MAXlength 100  //初始大小为100,可按需修改

typedef int Status;         //函数调用状态

struct Pnode//node:结; 结点;
{
    float coef;//coefficient:系数
    int expn;//指数
    Pnode* next;
};

typedef Pnode* Polynomial;


int CreatePoly(Polynomial& P, int n)
{
    //输入n项的系数和指数,建立:表示多项式的有序链表:P
    P = new Pnode;
    P->next = NULL;
    for (int i = 1; i <= n; ++i)
    {
        static Pnode* s = new Pnode;
        cin >> s->coef >> s->expn;
    }
    return true;
}
    
int main()
{

}

然而,在PPT中还有更完善妥当适合的办法:

(tmd大师就是大师,想的程序设计思路比我完善体系化多了,nb)

简而言之,就是在前面的步骤的基础上,在增加下面几步:


pre:

找第一个指数幂大于前面的项,初值指向头结点

指向
待找到的
第一个
大于输入项指数的结点
的前驱


指针q:

初始化指向首元结点

循链向下,逐个比较链表中
当前结点与
输入项指数,
找到第一个大于输入项指数的结点*q
将输入项结点*s插入到结点*q之前


参考PPT思路,程序设计流程如下:

初始化指针pre、q

逐个向下比较当前输入项与下一项的指数项大小

如果当前,输入项(s)指数项更大:

继续向后面找,在这个过程中:

每比较完一项,指针pre和q就往后指一项(进行一次指向下一项操作)

直到找到第一个,比s指数项大的项(q)

然后把输入项(s)插入到更大项(q)之前

输入下一项

也就是说,每次输入新的项目时,都进行从头比较的操作:

project 2:

#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit

#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE  -1
#define OVERFLOW   -2   

#define MAXlength 100  //初始大小为100,可按需修改

typedef int Status;         //函数调用状态

struct Pnode//node:结; 结点;
{
    float coef;//coefficient:系数
    int expn;//指数
    Pnode* next;
};

typedef Pnode* Polynomial;

int CreatePoly(Polynomial& P, int n)
{
    //输入n项的系数和指数,建立:表示多项式的有序链表:P
    P = new Pnode;
    P->next = NULL;
    for (int i = 1; i <= n; ++i)
    {
        static Pnode* s = new Pnode;
        cin >> s->coef >> s->expn;
        Pnode* pre = P;        //pre初值为头结点
        Pnode* q = P->next;        //q初始化指向首元结点
        while (s->expn > q->expn)
            //每比较完一项,指针pre和q就往后指一项(进行一次指向下一项操作)
        {
            pre = pre->next;
            q = q->next;
        }
        pre->next = s;
        s->next = q;
    }
    return true;
}

int main()
{

}

 OK,现在程序的进行到了差不多可以完整的的时候了

但是(然而),在这里我们依然还是有几个程序上的小细节没有考虑到:

(1):

程序循环的判断(是否)执行语句,应改为:

        while (q &&s->expn > q->expn)

(2):

另外,虽然这里先让pre指向输入的节点s不要紧

(虽然丢失了pre->next,但是我们还知道他的下一位地址q,无所谓)

但是为了养成避免丢失结点信息的习惯,我们还是先让新输入节点指向后面:

project 3:

#include<iostream>
using namespace std;
#include<stdlib.h>//存放exit

#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define INFEASIBLE  -1
#define OVERFLOW   -2   

#define MAXlength 100  //初始大小为100,可按需修改

typedef int Status;         //函数调用状态

struct Pnode//node:结; 结点;
{
    float coef;//coefficient:系数
    int expn;//指数
    Pnode* next;
};

typedef Pnode* Polynomial;

int CreatePoly(Polynomial& P, int n)
{
    //输入n项的系数和指数,建立:表示多项式的有序链表:P
    P = new Pnode;
    P->next = NULL;
    for (int i = 1; i <= n; ++i)
    {
        static Pnode* s = new Pnode;
        cin >> s->coef >> s->expn;
        Pnode* pre = P;        //pre初值为头结点
        Pnode* q = P->next;        //q初始化指向首元结点
        while (q &&s->expn > q->expn)
            //每比较完一项,指针pre和q就往后指一项(进行一次指向下一项操作)
        {
            pre = pre->next;
            q = q->next;
        }
        s->next = q;
        pre->next = s;      
     //将输入项s插入到q和其前驱结点pre之间
    }
    return true;
}

int main()
{

}

(多项式)线性表加减乘:


后续二轮补上,

囫囵吞枣不求甚解

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

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

相关文章

亚马逊真人测评好还是自养号测评好 深度剖析讲解

关于真人测评和自养号哪个好&#xff0c;一直都是老生常谈的问题了。实际操作下来到底哪一个更好呢&#xff1f;今天陈哥给大家详细分析一下。 先说自养号。所谓的自养号&#xff0c;说白了就是通过搭建国外的真实买家环境&#xff0c;然后购买资料自己注册的账号。 很多工作…

Java300集,学完即可就业

学习java首先我们要明白Java是什么&#xff1f;Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表&a…

K8s 架构简介(一)

一、前言 在开始学习K8s之前&#xff0c;让我们对容器有一个基本的了解 1.1 什么是容器 一个容器镜像是一个可运行的软件包&#xff0c;其中包含了一个完整的可执行程序&#xff0c;包括代码和运行时需要应用、系统库和全部重要设置的默认值。 通过将应用程序本身&#xff…

虹科新闻|虹科与Telco Systems正式建立合作伙伴关系

近日&#xff0c;虹科与美国Telco Systems达成战略合作&#xff0c;虹科正式成为Telco Systems在中国区域的认证授权代理商。未来&#xff0c;虹科将携手Telco Systems&#xff0c;共同为新一代边缘计算和企业网络提供创新通信软件产品。虹科及Telco Systems双方都对彼此的合作…

C语言(逻辑运算符和条件运算符)

目录 一.逻辑运算符 1.原理 2.等级排序 3.求值顺序 二.条件运算符:? 一.逻辑运算符 1.原理 && 与&#xff08;条件都为真&#xff0c;才为真&#xff09; || 或&#xff08;一个条件为真&#xff0c;才为真&#xff09; &#xff01; 非&#xff08;条件为假&…

【R语言(二):Nomogram(诺莫图/列线图)绘制 / R语言逻辑回归分析】

R语言(二)&#xff1a;Nomogram(诺莫图/列线图)绘制 1、基本概念 Nomogram&#xff0c;中文常称为诺莫图或者列线图。简单的说是将Logistic回归或Cox回归的结果进行可视化呈现。它根据所有自变量回归系数的大小来制定评分标准&#xff0c;给每个自变量的每个取值水平一个评分&…

怎样的目标管理能真正实现目标?做到这3点就对了

目标应该是每个人人生中接触最多的一样东西了&#xff0c;大到分分钟几百万上下的项目目标&#xff0c;小到一次考试。目标能不能完成&#xff0c;关键还是看目标管理有没有做好&#xff0c;做到下面这三点&#xff0c;不论是在职场中管团队&#xff0c;还是在生活中管个人&…

十四、平衡二叉树

1、看一个案例&#xff08;说明二叉排序树可能的问题&#xff09; 给你一个数列{1,2,3,4,5,6}&#xff0c;要求创建一棵二叉排序树&#xff08;BST&#xff09;&#xff0c;并分析问题所在。 上面二叉排序树存在问题分析&#xff1a; 左子树全部为空&#xff0c;从形式上看&…

tr命令笔记

tr 是Unix命令行专家工具箱中的一件万能工具。它可用于编写优雅的单行命令。 tr 可以对 来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。 tr 是translate&#xff08;转换&#xff09;的简写&#xff0c; 因为它可以将一组字符转换成另一组字符。 tr 只能…

Windows 11 + WSL(ubuntu 20.04) + CLion(2022.3) 编译OpenJDK12

编译OpenJDK12 目录编译OpenJDK12前言一、下载OpenJDK源码二、编译OpenJDK参考https://openjdk.org/groups/build/doc/building.html1&#xff1a;安装编译所需的组件2&#xff1a;执行编译命令3&#xff1a;验证编译结果三、在Clion中调试OpenJDK源码1&#xff1a;Clion中配置…

R语言GD包地理探测器分析时报错、得不到结果等情况的解决方案

本文介绍在利用R语言的GD包&#xff0c;实现自变量最优离散化方法选取与执行、地理探测器&#xff08;Geodetector&#xff09;操作时&#xff0c;出现各类报错信息、长时间得不到结果等情况的解决方案。 在之前的文章R语言GD包基于栅格图像实现地理探测器与连续参数的自动离散…

深度解读Webpack中的loader原理

一、前言 webpack 是一个现代 JavaScript 应用的静态模块打包器。那么 webpack 是怎样实现不同种类资源模块加载的呢&#xff1f; 没错就是通过 loader。loader 用于对模块的源代码进行转换。loader 可以使你在 import 或加载模块时预处理文件。 我们带着下面几个问题&#…

css中的盒子模型

1、盒子模型&#xff1a;CSS中规定盒子分别由&#xff1a;内容区域&#xff08;content&#xff09;、内边距区域&#xff08;padding&#xff09;、边框区域&#xff08;border&#xff09;、外边距区域&#xff08;margin&#xff09;构成。 2、盒模型分为IE盒模型和W3C标准…

内存泄漏检测组件 -- hook

目录 hook malloc与free出现的问题 builtin_return_address(N) C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 hook malloc与free出现的问题 #define _GNU_SOURCE #include <stdio.h> #include <dlfcn.h> #include <stdlib.h> /****…

Android Studio多渠道打包及自动化构建

Android 有不同的应用市场&#xff0c;也就是不同的渠道&#xff0c;需要为每个应用市场打一个安装包&#xff0c;但主要的代码是一样的&#xff0c;可能部分资源不一样&#xff0c;部分代码不一样&#xff0c;如果每个渠道都需要修改&#xff0c;然后打包&#xff0c;非常耗时…

思科三层交换机配置

三层交换机是什么为什么会有三层交换机三层交换机的工作原理三层交换机的应用1.三层交换机是什么 三层交换机就是具有部分路由器功能的交换机&#xff0c;工作在OSI网络标准模型的第三层&#xff1a;网络层。三层交换机的最重要目的是加快大型局域网内部的数据交换&#xff0c;…

操作系统-处理机调度

1.处理机调度的概念、层次1.1调度的基本概念制定某种规则来决定处理任务的顺序。1.2调度的三个层次高级调度&#xff08;作业调度&#xff09;中级调度&#xff08;内存调度&#xff09;进程的挂起态与七状态模型低级调度&#xff08;进程调度&#xff09;小结2.进程调度的时机…

VMware安装Linux虚拟机后忘记root密码处理方法

OS版本&#xff1a;Red Hat 7.7 问题说明&#xff1a; 之前用VMWare安装了一台Linux虚机&#xff0c;由于长期没使用&#xff0c;导致忘记了root密码。所以需要修改root密码。 Root密码修改 现将修改root密码的操作步骤记录如下。 1.启动虚拟机&#xff0c;出现启动倒计时…

2023年,智能家居老板如何低成本多开10家店?

作者 | 启明 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn2023年智能家居老板需要一些什么样的新思维来助力业绩增长呢&#xff1f;智哪儿从今天起推出系列观察文章与各位老板共勉。在《三体》电视剧中&#xff0c;三体人在乱纪元通过“脱水”来延续生命&#xff0c;在恒纪元则通过“…

mac 安装、配置、卸载mysql

文章目录mac 安装、配置、卸载mysql安装下载mysql dmg包安装mysql服务启动mysql服务配置系统环境变量配置修改默认密码配置运行远程连接配置my.cnf文件卸载mac 安装、配置、卸载mysql 安装 下载mysql dmg包 下载地址&#xff1a;https://downloads.mysql.com/archives/commu…