首页 > 编程语言 >FDS编程作业记录 · 其一

FDS编程作业记录 · 其一

时间:2024-03-18 20:01:27浏览次数:23  
标签:其一 p2 p1 Exponent 编程 Next FDS Polynomial newNode

由于上课没有认真听,所以有些题写得磕磕绊绊的,反复改了好几次才全过。故特此整理下问题解答和错误供自己和后来人参考。

题目要求概述

多项式加和

Write a function to add two polynomials. Do not destroy the input. Use a linked list implementation with a dummy head node.
Note: The zero polynomial is represented by an empty list with only the dummy head node.

具体题干此处略去。

Polynomial 定义如下:

typedef struct Node *PtrToNode;
struct Node {
    int Coefficient;
    int Exponent;
    PtrToNode Next;
};
typedef PtrToNode Polynomial;
/* Nodes are sorted in decreasing order of exponents.*/  

函数接口如下: 

Polynomial Add( Polynomial a, Polynomial b );

裁判程序如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node *PtrToNode;
struct Node  {
    int Coefficient;
    int Exponent;
    PtrToNode Next;
};
typedef PtrToNode Polynomial;

Polynomial Read(); /* details omitted */
void Print( Polynomial p ); /* details omitted */
Polynomial Add( Polynomial a, Polynomial b );

int main()
{
    Polynomial a, b, s;
    a = Read();
    b = Read();
    s = Add(a, b);
    Print(s);
    return 0;
}

/* Your function will be put here */

Sample Input:

4
3 4 -5 2 6 1 -2 0
3
5 20 -7 4 3 1

Sample Output:

5 20 -4 4 -5 2 9 1 -2 0

题目理解与分析

        实不相瞒,本人光是读题就读了好半天(主要是因为Coefficient和Exponent俩单词不认识),在有道词典的帮助下理解了所谓的Polynomial结构到底是什么东西。

        Input的第一行输入的数字为多项式的项数;

        第二行输出的一串是系数与次数混合数。如5 20 -7 4 3 1就是 5x^20 -7x^4 + 3x;

        那么所谓的多项式加和也就好理解了,同次数项系数相加即可。

解答

本人答案代码如下:

Polynomial Add( Polynomial a, Polynomial b ) {
	Polynomial head = (Polynomial)malloc(sizeof (struct Node)); 
	head->Next = NULL;
	Polynomial tail = head; 
	Polynomial newNode;
	//做出头尾指针,newNode用于指向各节点 
	 
	if (a->Next == NULL)
		return b;
	if (b->Next == NULL)
		return a;
	//判断传入的 a,b 是否为空链表,若为空则返回另一个 
	
	Polynomial p1 = a->Next, p2 = b->Next;
	
	while (p1&&p2)
	{
		newNode = (Polynomial)malloc(sizeof (struct Node));
		
		if (p1->Exponent > p2->Exponent)
		{
			newNode->Coefficient = p1->Coefficient;
			newNode->Exponent = p1->Exponent;
			p1 = p1->Next;
		}
		else if (p1->Exponent < p2->Exponent)
		{
			newNode->Coefficient = p2->Coefficient;
			newNode->Exponent = p2->Exponent;
			p2 = p2->Next;
		}
		else
		{
			newNode->Coefficient = p1->Coefficient + p2->Coefficient;
			newNode->Exponent = p1->Exponent;
			p1 = p1->Next, p2 = p2->Next;
			if (newNode->Coefficient == 0)
				continue;
			//当系数为 0 时,该项不在结果中出现
		}
		//比较次数,再判断是否要对系数进行加和
		 
		newNode->Next = NULL;
		//避免链表连接混乱
		//本人亲测这句删掉也可以过 
		 
		tail->Next = newNode;
		tail = newNode;
		//尾指针后移一位 
	}
	
	if (p1)
		tail->Next = p1;
	if (p2)
		tail->Next = p2;
	//while循环结束,说明 p1 或 p2 至少有一者为 NULL
	//此时再把非 NULL 的余项直接连接在末端即可
	 
	return head;
}

本题要求用链表解决,返回一个指针指向加和后的多项式链表。

标签:其一,p2,p1,Exponent,编程,Next,FDS,Polynomial,newNode
From: https://blog.csdn.net/MrSkillless/article/details/136818504

相关文章

  • Python编程规范+最佳实践
    前言Python之禅是影响Python编程语言设计的19条原则,也是Python编码规范的核心理念。优美胜于丑陋(Python以编写优美的代码为目标)明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)复杂胜于凌乱(如果复杂不可避免,......
  • 揭秘极致编程体验:代码背后的魔法世界
    想象一下,你手中有一把魔法棒,只需轻轻一挥,就能让计算机为你实现各种神奇的功能。其实,这把魔法棒就是编程语言,而你就是那位魔法师。今天,我们就来一起探索这个代码背后的魔法世界,看看如何创造一次极致的编程体验。编程:从0到1的创造之旅编程,简单来说,就是告诉计算机如何执行任务......
  • 20年编程,AI编程6个月,关于Copliot辅助编码工具,你想知道的都在这里
    AI代码辅助工具尝试各种辅助编程的AI工具笔者是一个后端Coder~,开发工具使用Idea和VsCode。在过去我一直尝试找到一款适合自己的智能代码辅助工具,来告别繁琐的重复性编码,好提高开发效率。直到AIGC和AIAgent的迅速发展,越来越多的AI编码辅助工具百花齐放。宣告天下-生成式编码新......
  • [4] C++高级编程
    Day1常量补充//--Day1.cpp#pragmaregion常量补充//常对象和常函数constStudentS1{10010,"张三",1500};S1.GetID();S1.SetID(10015);//调用非常函数会报错#pragmaendregion//--Student.h#pragmaonce#include<iostream>classStude......
  • 系统的学习Python——编程练习
    Python编程练习是提高编程技能和加深对Python语言理解的有效途径。常见的Python编程练习方法如下:解决算法和数据结构问题:练习解决各种算法问题,如排序、搜索、递归等。LeetCode、Hackerrank和ProjectEuler等平台提供了大量的算法和数据结构问题,适合练习。实现各种数......
  • 函数式编程
    1.持久化数据结构    持久化数据结构的含义是,对于每一个调用者来说,他所使用的每一个数据结构已经持久化了(不可变了),例如f(x)=y,g(y)=z,x、y和z的数据结构已经持久化了,就算其他地方如何去使用,x、y和z都不能有变化。    比如说调用者拥有树1,调用一个方法需要更新树1,那么此时......
  • Go进阶之网络编程
    目录Go语言基础之网络编程一、互联网协议介绍二、互联网分层模型1.物理层2.数据链路层3.网络层4.传输层5.应用层三、socket编程1.socket图解四、Go语言实现TCP通信1.TCP协议2.TCP服务端3.TCP客户端4.TCP黏包(1)黏包示例(2)为什么会出现粘包(3)解决办法五、Go语言实现UDP通信1.......
  • Java编程思想读书笔记
    1.finalize()方法垃圾回收器只能回收通过new创建的对象的内存空间,但由于Java可以调用本地方法,本地方法中有可能通过c语言的malloc()方法来分配内存,所以垃圾回收器会执行一次finalize()方法来调用C语言的free()方法(finalize()方法需要自己去编写代码去调用本地方法)来释放内存2.封......
  • 【编程向导】JavaScript-基础语法-解构赋值
    梦里繁花落尽,此情未央,此意难忘,弦虽断,曲犹扬。!与技术共同呼吸,与程序员共命运。世树科技承“技驱动,理致胜”理念、国风编程。解构赋值解构赋值(Destructing)语法是一个JavaScript表达式,这使得可以将值从数组或属性从对象提取到不同的变量中。数组的解构赋值varfoo......
  • 机器学习——编程实现从零构造训练集的决策树
    自己搭建一棵决策树【长文预警】忙了一个周末就写到了“构建决策树”这一步,还没有考虑划分测试集、验证集、“缺失值、连续值”,预剪枝、后剪枝的部分,后面再补吧(挖坑)目录1、信息1)基本算法过程2)信息熵和信息增益的计算方式2、做点假设,简化运算3、拆解算法过程0)结点类1)同......