数据结构课程设计
运动会分数统计(数据结构课程设计)python

运动会是学校中一项重要的活动,通过运动会可以增强学生的体质,增进师生之间的情感,同时也能够激发学生的运动热情和团队精神。
而对于运动会的分数统计来说,如何高效、准确地完成这项工作是非常重要的。
本文主要介绍了基于数据结构课程设计的运动会分数统计系统,使用Python语言实现。
二、系统设计1. 数据结构的选择在设计运动会分数统计系统时,需要考虑如何存储和管理参赛队伍和成绩信息。
由于参赛队伍和成绩信息的数量较大,因此需要选择适合高效查询和排序的数据结构。
本系统选择使用Python中的字典(dictionary)和列表(list)来存储和管理数据。
2. 数据的存储在系统中,每支队伍的信息包括队伍编号、队伍名称和各项比赛成绩等。
这些信息可以使用字典来存储,其中队伍编号作为键,队伍信息作为值。
而各项比赛成绩可以使用列表来存储,方便进行排序和统计。
3. 数据的输入为了方便输入参赛队伍和成绩信息,本系统提供了相应的输入界面,用户可以通过界面逐一输入每支队伍的信息。
程序也提供了批量导入功能,用户可以通过导入文件的方式一次性输入所有的参赛队伍和成4. 数据的统计和输出系统可以对输入的成绩信息进行统计和排序,可以按照总分或特定比赛项目的成绩进行排序,并将排名信息输出到文件中。
排名信息包括队伍名称、总分和各项比赛成绩,方便后续的奖励和表彰工作。
三、系统实现1. 数据结构类的设计为了方便对队伍和成绩信息进行管理,本系统设计了队伍(Team)和成绩(Score)两个类,分别用于存储队伍信息和比赛成绩。
2. 主程序的设计系统的主程序主要包括数据的输入、统计和输出三个功能。
用户可以通过交互式界面输入队伍和成绩信息,也可以通过命令行参数进行批量导入。
系统会对输入的成绩信息进行统计和排序,并将排名信息输出到指定的文件中。
3. 界面设计为了方便用户操作,系统提供了简洁清晰的交互式界面。
用户可以通过界面进行数据的输入和操作,也可以查看和导出排名信息。
优秀的数据结构课程设计

优秀的数据结构课程设计一、课程目标知识目标:1. 学生能够理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点及应用场景。
2. 学生能够描述并分析各类数据结构在解决实际问题中的优缺点,如时间复杂度和空间复杂度。
3. 学生能够运用所学数据结构解决简单的实际问题,如排序、查找等。
技能目标:1. 学生能够运用所学知识设计简单的数据结构算法,具备一定的编程实现能力。
2. 学生能够通过分析实际问题,选择合适的数据结构进行问题求解,提高解决问题的效率。
情感态度价值观目标:1. 学生培养对数据结构学习的兴趣,认识到数据结构在计算机科学领域的重要地位。
2. 学生养成严谨、科学的思维习惯,提高解决问题的信心和自主学习的能力。
3. 学生通过团队合作,培养良好的沟通能力和团队协作精神。
课程性质:本课程为高中信息技术学科的数据结构部分,旨在让学生掌握基本的数据结构知识,培养编程思维和解决问题的能力。
学生特点:高中生具有较强的逻辑思维能力,对新鲜事物充满好奇,但编程基础和问题解决能力参差不齐。
教学要求:结合学生特点,注重启发式教学,引导学生主动探究,注重实践操作,提高学生的编程能力和问题解决能力。
同时,关注学生的情感态度,激发学习兴趣,培养良好的学习习惯和团队合作精神。
通过本课程的学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果。
二、教学内容本课程教学内容主要包括以下几部分:1. 数据结构基本概念:介绍数据结构的基本概念、分类及其在计算机科学中的应用。
- 线性结构:线性表、栈、队列、数组、串等;- 非线性结构:树、图等。
2. 线性表及其应用:讲解线性表的定义、特性、存储结构及其应用。
- 顺序存储结构;- 链式存储结构;- 排序算法;- 查找算法。
3. 树和二叉树:介绍树的基本概念、二叉树及其遍历方法。
- 树的存储结构;- 线索二叉树;- 哈夫曼树及其应用。
4. 图:讲解图的定义、存储结构、遍历方法及其应用。
数据结构的课程设计

数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。
2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。
3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。
技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。
2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。
3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。
情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。
2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。
3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。
通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。
在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。
2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。
3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。
4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。
5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。
6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。
7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。
数据结构的课程设计目的

数据结构的课程设计目的一、课程目标知识目标:1. 掌握数据结构的基本概念,包括线性结构(如数组、链表、栈、队列)和非线性结构(如树、图等)的特点与应用。
2. 学会分析不同数据结构在存储和处理数据时的效率,理解时间复杂度和空间复杂度的概念。
3. 掌握常见数据结构的具体实现方法,并能够运用到实际编程中。
技能目标:1. 培养学生运用数据结构解决实际问题的能力,能够根据问题的特点选择合适的数据结构进行优化。
2. 提高学生的编程实践能力,使其能够熟练编写与数据结构相关的程序代码,并进行调试与优化。
3. 培养学生独立思考和团队协作的能力,通过项目实践和课堂讨论,提高问题分析、解决方案的设计与实现能力。
情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学生的学习热情和主动探究精神。
2. 培养学生严谨、细致、踏实的学术态度,使其认识到数据结构在计算机科学与软件开发领域的重要性。
3. 培养学生具备良好的团队合作精神,学会倾听、沟通、表达与协作,提高人际交往能力。
课程性质:本课程为计算机科学与技术及相关专业的基础课程,旨在培养学生的数据结构知识和编程技能,提高学生解决实际问题的能力。
学生特点:学生已具备一定的编程基础,具有一定的逻辑思维能力和问题解决能力,但可能对数据结构的应用和实现方法了解不足。
教学要求:结合学生特点,课程设计应注重理论与实践相结合,以案例驱动、项目导向的教学方法,引导学生掌握数据结构知识,提高编程实践能力。
同时,注重培养学生的情感态度价值观,使其在学习过程中形成积极的学习态度和良好的团队协作精神。
通过具体的学习成果评估,确保课程目标的达成。
二、教学内容1. 线性结构:- 数组:数组的概念、存储方式、应用场景。
- 链表:单链表、双向链表、循环链表的概念及实现。
- 栈与队列:栈的概念、应用场景、实现方法;队列的概念、应用场景、实现方法。
2. 非线性结构:- 树:树的概念、二叉树、二叉查找树、平衡树(如AVL树)、堆的概念及其应用。
数据结构课程设计(家族关系查询系统)

数据结构课程设计(家族关系查询系统)1 课程设计介绍1.1课程设计项目简介家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书载体。
家谱是中国特有的文化遗产,是中华民族的三大文献之一,属珍贵的人文资料,对于历史学,民俗学,人口学,社会学和经济学的深入研究,均有不可替代的重要功能。
本项目对家谱管理进行简单的模拟,以实现查看祖先和子孙个人信息、插入家族成员等功能。
1.2课设题目分析本程序的实质是完成对家谱成员信息的建立、查找、插入等功能。
可以首先定义家族成员的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
本程序包含以下几个模块(1)建立家族关系树。
此模块将构建一个家族关系,对数据初始化,构造关系树并录入数据一遍后续程序使用。
(2)添加新成员。
此模块将添加一个新成员,实现对家族关系的修改。
(3)家族关系的查询。
此模块将实现对家族不同关系的查询(4)主程序模块。
此模块实现整个程序的进入和进出,以及各种初始化处理。
(5)1.3课程题目原理与数据结构因为家族的成员之间存在一个对多个的层次结构关系,所以不能用线性表来表示和实现。
家谱从形状上看像一颗倒长的树,所以用树结构来表示比较合适。
树形结构是一类非常重要的非线性数据结构,直观看来树是以分支关系定义的层次结构。
因此本课程设计可以采用的数据结构有树状结构和队列。
树状结构采用三叉链表来实现,队列采用链式队列实现。
21.4功能分析说明图34struct Node *rear; /* 尾指针*/}LinkQueue;DataType fname[MAXNUM],family[50][MAXNUM];/* 全局变量*/2.1.2 链队的基本操作LinkQueue *LQueueCreateEmpty( )/* 建立一个空队列*/{LinkQueue *plqu=(LinkQueue*)malloc(sizeof(LinkQueue));if (plqu!=NULL)plqu->front=plqu->rear=NULL;else{printf("内存不足!\n");return NULL;}return plqu;}int LQueueIsEmpty(LinkQueue *plqu)/* 判断链接表示队列是否为空队列*/{return(plqu->front==NULL);}void LQueueEnQueue(LinkQueue *plqu,TriTree *x)/* 进队列*/ {Node *p=(Node *)malloc(sizeof(Node));if(p==NULL)printf("内存分配失败!\n");else{p->info=x;p->next=NULL;if(plqu->front==NULL)/* 原来为空队*/plqu->front=p;elseplqu->rear->next=p;5plqu->rear=p;}}int LQueueDeQueue(LinkQueue *plqu,TriTree *x)/* 出队列*/ {Node *p;if(plqu->front==NULL){printf("队列空!\n");return ERROR;}else{p=plqu->front;x=p->info;plqu->front=plqu->front->next;free(p);return OK;}}TriTree *LQueueGetFront(LinkQueue *plqu)/* 在非空队列中求队头元素*/{return(plqu->front->info);}2.2建立家族关系2.2.1建立家族关系并存入文件基本思想:首先输入家族关系的名称,以此名称为文件名,建立文本文件接下来按层次输入结点信息,输入一个在文件中写入一行同时将输入的信息保存到二位字符数组family中。
数据结构课程思政课程设计

数据结构课程思政课程设计一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,包括线性表、树、图等结构的特点和应用场景。
2. 使学生了解各类数据结构在解决问题中的优势与局限,并能运用相关知识对实际问题进行分析和描述。
3. 培养学生运用所学数据结构知识,解决实际编程问题的能力。
技能目标:1. 培养学生运用数据结构进行问题分析和算法设计的能力。
2. 提高学生编程实践能力,使其能熟练使用至少一种编程语言实现常见数据结构及相关算法。
3. 培养学生团队协作和沟通能力,通过小组讨论、项目实施等形式,提高解决实际问题的综合能力。
情感态度价值观目标:1. 培养学生对数据结构在计算机科学中的重要地位的认识,激发学习兴趣和探究精神。
2. 引导学生树立正确的价值观,认识到数据结构在解决实际问题中的积极作用,培养社会责任感和使命感。
3. 培养学生面对复杂问题时的耐心、细心和毅力,形成积极向上的学习态度。
本课程针对高中年级学生,结合数据结构课程的特点,注重理论与实践相结合,强调思政教育的融入。
在教学过程中,关注学生的个体差异,充分调动学生的积极性,引导他们主动参与课堂讨论和实践操作。
通过本课程的学习,期望学生能够掌握数据结构的基本知识和技能,培养良好的学习习惯和团队合作精神,形成积极向上的人生态度。
二、教学内容1. 线性表:包括线性表的定义、特点、实现方法及应用案例。
重点讲解顺序表、链表的结构特点及操作方法。
教材章节:第一章《线性表》2. 栈与队列:介绍栈与队列的基本概念、操作原理及在实际应用中的使用场景。
教材章节:第二章《栈与队列》3. 树与二叉树:讲解树的基本概念、二叉树的性质、遍历方法以及常见的树结构,如二叉排序树、平衡二叉树等。
教材章节:第三章《树与二叉树》4. 图:介绍图的基本概念、存储结构、遍历方法以及最短路径、最小生成树等算法。
教材章节:第四章《图》5. 查找与排序:讲解常见的查找算法(如二分查找、哈希查找等)和排序算法(如冒泡排序、快速排序等)的原理和实现。
数据结构课程设计—家谱系统

一.前言1 项目简介家谱(或称族谱)是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书文体。
家谱是中国特有的文化遗产,是中华民族的三大文献(国史,地志,族谱)之一,属宝贵的人文资料,关于历史学、风俗学、人口学、社会学和经济学的深切研究,均有其不可替代的独特功能。
2系统功能本项目对家谱治理进行简单的模拟,以实现查看先人和子孙个人信息、插入家族成员、删除家族成员等功能。
本项目的实质是完成对家谱成员信息的成立、查找、插入、修改、删除等功能,能够第一概念家族成员的数据结构,然后将每一个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
一.需求分析1.系统需求本系统是家谱治理系统,顾名思义,是用来治理家族资料的,要实现成立新家谱,查找家谱文件,增加家族成员,修改家族成员,删除家族成员和查找家族成员等大体功能。
家谱治理系统是给家族长辈治理家族资料用的,对电脑的操作不必然熟悉,因此操作界面必然要友好,必然要方便,dos界面的操作一样比较枯燥,综合各类缘故,要用MFC实现可视化的界面。
2.环境需求硬件:acer ASPIRE 4740GI5处置器2G内存320G硬盘软件:vs 2020二.整体设计整体设计框架图1系统整体设计模块结构图数据结构设计关于树形的结构:在树形结构的选择上,依如实际中多子女的现象选择一样树,考虑抵家谱中成员可能存在的不定成员数问题,抛弃了以数组为基础的一样树方案,决定用链表来实现。
树形结构的外存保留。
为了提高效率,树形结构在程序初始化时由外存文件一次读入内存,尔后不管插入仍是修改,删除都再也不对外存的树结构保留文件进行操作,只在内存中处置,程序退出时对外存树结构文件进行一次更新。
也确实是说,不管在程序运行中中对家谱结构进行多少种,多少次的操作,外存的树结构文件始终只会被程序访问两次。
以二叉链表作为树的存储结构,链表中的两个链域别离指向该结点的第一个小孩结点和下一个兄弟结点,它通过描述每一个结点的一个小孩和兄弟信息来反映结点之间的层次关系,其具体的结点结构为:其中,firstchild为指向该结点第一个小孩的指针,nextsibling为指向该结点下一个兄弟,elem是数据元素内容,举例如下:算法设计一、家谱的创建和结点的添加家谱采纳的树的结构,通过左小孩,右兄弟的方式变成二叉树,创建的进程事实上确实是二叉树的添加结点的进程,依照父亲的名字添加在父亲结点的左侧。
数据结构课程设计报告(最终版)

数据结构课程设计报告
题目:
组长:
成员:
成员:
成员:
成员:
成员:
指导教师:
年月日
一、课程设计题目:
二、问题定义:(由教师指定)
三、需求分析
以明确的无歧义的陈述说明课程设计的任务,强调的是程序要做什么?并明确规定:
1、输入的形式和输入值的范围;
2、输出的形式;
3、程序所能达到的功能;
4、算法涉及的基本理论分析:比如对文件压缩,算法用到了
Huffman树,就要从理论上对文件压缩的几种方式、Huffman树的定义、Huffman编码的原理、解码的过程等进行分析。
5、题目研究和实现的价值。
四、算法设计
1、概要设计
阐述说明本算法中用到的所有数据结构的定义及其含义、主程序的流程以及各程序模块之间的层次(调用)关系。
3.详细设计
(1)实现概要设计中定义的所有数据类型;
(2)所有函数的接口描述;
(3)所有函数的算法描述(只需要写出伪码算法);
(3)对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序),可采用流程图、N – S 图或PAD图进行描述
(4)画出函数的调用关系图。
五、算法实现
以附件形式
六、软件测试
这里的测试主要是基于功能的黑盒测试,所以首先提出测试的功能点,然后给出测试数据(包括正确的输入及其输出结果和含有错误的输入及其输出结果。
)
要求在附件里给出软件的基本数据和测试数据。
七、技术讨论(可选)
八、收获与体会
九、软件运行的部分截图及说明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章问题分析与任务定义1 .题目:设计一个一元稀疏多项式的简单计算器。
输入并用带表头结点的单链表存储多项式;以整数序列:n,c1,e1,c2,e2……cn,en的形式输出多项式,其中n是多项式的项数,ci,ei分别为第i项的系数和指数,序列按指数降序排列;实现多项式a、b的相加和相减操作,输出相加、相减后的多项式。
2.问题分析:符号多项式的操作,已经成为标处理的典型应用例子,多项式可由n+1个系数唯一确定,因此在计算机里可以用一个线性表来表示,每一项的指数隐含在其系数序号里,只要在结点的data域里多加一项即可,显然我们可以对该存储采取顺序存储,使得多项式相加的算法定义十分简洁,然而通常的应用里多项式的次数可能很高而且很大,使得顺序存储结构的最大长度很难确定。
这种对内存空间的浪费是应当避免的,因此若只对多项式进行求值等不改变多项式系数和指数的运算则采用类似于顺序表的顺序存储结构即可,否则采用链式存储表示比较好。
1.如何实现这种线性链表表示的多项式的加法呢?根据一元多项式的加减法运算法则:对于两个一元多项式中的所有指数相同的项,对应系数相加减,若其和不为零,则构成和或差多项式中的一项,对于两个一元多项式中的所有指数不同的向分别复抄到和火差多项式里去。
在此,按照数据类型Polynomial中的基本操作的定义,和或差多项式中的结点无需另生成,而应该从两个多项式的链表中摘取,其运算规则如下:假设指针qa和qb分别指向多项式A和B中当前进行比较的某个结点,则比较两个结点中的指数项,有下列三种情况(1)指针qa所指结点的指数值<指针qb所指结点的指数值,则应摘取qa所致结点插入到和差多项式链表中去(2)指针qa所致结点的指数值>指针qb所指结点的指数值,则应摘取指针qb所指结点插入到和差多项式里链表中去(3)指针qa所指结点的指数值=指针qb所指结点的指数值,则将两个结点中的系数相加减,若和差数不为零,则修改qa所指结点的系数值,同时释放qb所直接点;繁殖,从多项式Adequate链表中删除相应结点,并释放指针qa和qb所致结点。
任务定义:依次编写各种函数,通过对题目理解一步步的设计代码。
第二章逻辑设计1.抽象数据类型定义:ADT Polynomial{数据对象:D={ai|ai属于TermSet,i=1,2,···m,m>=0TermSet中的每个元素包含一个标识系数的实数和标识指数的整数}数据关系:R1={<ai-1,ai>|ai-1,ai属于D,且ai-1中的指数值<ai中的指数值,i=2,···n}基本操作:CreatPolyn(&P,n)操作结果:输入m项的系数和指数,建立一元多项式P。
DestroyPolyn(&P)初始条件:一元多项式P已存在。
操作结果:销毁一元多项式。
PrintPolyn(P)初始条件:一元多项式P已存在操作结果:打印输出一元多项式P。
AddPolyn(*pa,*pb)初始条件:一元多项式pa,pb已存在。
操作结果:完成多项式相加运算,即:pa=pa+pb,并销毁一元多项式pb。
SubtractPolyn(*pa,*pb)初始条件:一元多项式pa和pb已存在。
操作结果:完成多项式的相减运算,即pa=pa-pb,并销毁一元多项式pb。
Insert(*p,*m)初始条件:一元多项式的存储结构已存在。
操作结果:完成一元多项式项的插入。
}ADT Polynomial实现上述的一元多项式显然应该是用链式存储结构。
第三章详细设计在数据结构实验中,程序中经常会用到像NULL、OK等符号常量,为以后编程方便起见,将这些程序中经常用到的符号常量和类型编写成一个头文件mydefine.h,这样以后编程时需要这些符号常量和类型时,只要将该头文件包含在程序中即可。
头文件mydefine.h的内容如下:#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define NULL 0typedef int Status;因此在程序里只需要以以下方式包含进这个头文件即可:#include"mydefine.h"【程序实现】首先,包含所需的头文件,指定命名空间,定义带有头结点的单链表的存储结构。
#include "mydefine.h"#include <iostream>using namespace std;typedef struct Polynomial{float coef;int expn;struct Polynomial *next;}*Polyn,Polynomial;其次依次完成创建、插入、打印、销毁等各种操作的函数。
(1)创建一个带有头结点的单链表来存储多项式,起头指针为head,建立一个项数为n的一元多项式,依次输入各项的系数和指数,插入到创建的链表之中。
Polyn CreatePolyn(Polyn head,int n){ //建立一个头指针为head、项数为n的一元多项式int i;Polyn p;p=head=(Polyn)malloc(sizeof(struct Polynomial));head->next=NULL;for(i=0;i<n;i++){p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据cout<<"请输入第"<<i+1<<"项的系数与指数:";cin>>p->coef>>p->expn;Insert(p,head); //调用Insert函数插入结点}return head;}(2)做一个插入函数,将输入的项比较后插入或者合并,依次比较系数是否为0,是否相同,然后进行合并或释放结点,然后适当输出void Insert(Polyn p,Polyn m){if(p->coef==0) free(p);//系数为0的话释放结点else{Polyn a1,a2;a1=m;a2=m->next;while(a2&&p->expn<a2->expn){//查找插入位置a1=a2;a2=a2->next;}if(a2&&p->expn==a2->expn){//将指数相同相合并a2->coef=a2->coef+p->coef;free(p);if(!a2->coef){//系数为0的话释放结点a1->next=a2->next;free(a2);}}else{//指数为新时将结点插入p->next=a2;a1->next=p;}}}(3)销毁多项式,当程序停止运行退出时应该对输入数据进行销毁,以释放内存,并防止留下垃圾造成以后的运行错误。
void DestroyPolyn(Polyn p){ //销毁多项式pPolyn q1,q2;q1=p->next;q2=q1->next;while(q1->next){free(q1);q1=q2;q2=q2->next;}}(4)打印输出:将所运算结果打印输出,分析多项式的系数指数然后进行输出。
void PrintPolyn(Polyn P){Polyn q=P->next;int flag=1;//项数计数器if(!q){//若多项式为空,输出0cout<<"0\n";return;}while(q){if(q->coef>0&&flag!=1)cout<<"+"; //系数大于0且不是第一项if(q->coef!=1&&q->coef!=-1){//系数非1或-1的普通情况cout<<q->coef;if(q->expn==1)cout<<"X";else if(q->expn)cout<<"X^"<<q->expn;}else{if(q->coef==1){if(!q->expn)cout<<"1";else if(q->expn==1)cout<<"X";elsecout<<"X^"<<q->expn;}if(q->coef==-1){if(!q->expn)cout<<"-1";else if(q->expn==1)cout<<"-X";elsecout<<"-X^"<<q->expn;}}q=q->next;flag++;}cout<<"\n";}(5)对多项式进行比较,以确定式否已无法运算可以结束程序int compare(Polyn a,Polyn b){if(a&&b){if(!b||a->expn>b->expn)return 1;else if(!a||a->expn<b->expn)return -1;elsereturn 0;}else if(!a&&b)return -1;//a多项式已空,但b多项式非空elsereturn 1;//b多项式已空,但a多项式非空}(6)对多项式进行加减运算Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针Polyn qa=pa->next;Polyn qb=pb->next;Polyn headc,hc,qc;hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点hc->next=NULL;headc=hc;while(qa||qb){qc=(Polyn)malloc(sizeof(struct Polynomial));switch(compare(qa,qb)){case 1:{qc->coef=qa->coef;qc->expn=qa->expn;qa=qa->next;break;}case 0:{qc->coef=qa->coef+qb->coef;qc->expn=qa->expn;qa=qa->next;qb=qb->next;break;}case -1:{qc->coef=qb->coef;qc->expn=qb->expn;qb=qb->next;break;}}if(qc->coef!=0){qc->next=hc->next;hc->next=qc;hc=qc;}else free(qc);//当相加系数为0时,释放该结点}return headc;}Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解并建立多项式a-b,返回其头指针Polyn h=pb;Polyn p=pb->next;Polyn pd;while(p){ //将pb的系数取反p->coef*=-1;p=p->next;}pd=AddPolyn(pa,h);for(p=h->next;p;p=p->next) //恢复pb的系数p->coef*=-1;return pd;}(7)利用下面main()函数测试上面算法,依次调用上面的算法程序,使main()运行然后测试上面算法。