数据结构课程设计模板结构设计说明

合集下载

数据结构课程设计格式

数据结构课程设计格式

数据结构课程设计 格式一、课程目标知识目标:1. 理解并掌握数据结构的基本概念,包括线性表、树、图等;2. 学会分析不同数据结构的特点和适用场景,能够选择合适的数据结构解决实际问题;3. 掌握常见数据结构的具体实现方法,如顺序表、链表、二叉树、图等;4. 了解算法的时间复杂度和空间复杂度分析,能够对数据结构进行性能评估。

技能目标:1. 能够运用所学数据结构知识,设计并实现简单的算法解决问题;2. 培养良好的编程习惯,提高编程能力,能够使用至少一种编程语言实现数据结构及相关算法;3. 学会使用数据结构解决实际问题,如排序、查找、最短路径等,提高问题解决能力。

情感态度价值观目标:1. 培养学生对数据结构和算法的兴趣,激发学习热情,形成自主学习的能力;2. 培养学生的团队协作意识,提高沟通与表达能力,学会在团队中分享和交流;3. 培养学生严谨、细致、勤奋的学习态度,增强面对困难的勇气和毅力;4. 培养学生的创新思维,鼓励尝试不同的解决方案,提高创新意识和创新能力。

课程性质:本课程为高年级学科专业课程,旨在帮助学生掌握数据结构的基本知识和技能,培养学生解决实际问题的能力。

学生特点:学生具备一定的编程基础,具有一定的逻辑思维能力和问题解决能力。

教学要求:结合实际案例,注重理论与实践相结合,强调学生的动手实践能力和创新思维。

在教学过程中,注重引导学生主动探索,培养学生自主学习能力。

同时,关注学生的情感态度价值观培养,提高学生的综合素质。

通过本课程的学习,使学生能够在实际项目中灵活运用数据结构知识,提高项目开发效率。

二、教学内容1. 线性表:介绍线性表的概念、性质和基本运算,包括顺序表和链表两种实现方式。

重点讲解链表的各种操作,如插入、删除、查找等。

教材章节:第一章2. 栈和队列:阐述栈和队列的基本概念、性质及应用场景,分析两种数据结构的操作特点。

教材章节:第二章3. 串:介绍串的定义、存储结构及基本操作,如模式匹配算法等。

数据结构课程设计报告模板

数据结构课程设计报告模板

数据结构课程设计报告模板课程设计说明书课程名称:数据结构专业:班级:姓名:学号:指导教师:成绩:完成日期:年月日任务书题目:黑白棋系统设计内容及要求:1.课程设计任务内容通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。

反复循环下棋,最后让双方的棋子填满整个方格。

再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。

进行大小判断,最红给出胜负的一方。

并根据y/n选项,判断是否要进行下一局的游戏。

2.课程设计要求实现黑白两色棋子的对峙开发环境:vc++6.0实现目标:(1)熟悉的运用c语言程序编写代码。

(2)能够理清整个程序的运行过程并绘画流程图(3)了解如何定义局部变量和整体变量;(4)学会上机调试程序,发现问题,并解决(5)学习使用C++程序来了解游戏原理。

(6)学习用文档书写程序说明目录1.引言 (1)2.课题分析 (4)3.具体设计过程 (5)3.1设计思路 (5)3.2程序设计流程图 (5)3.3.函数实现说明 (10)4.程序运行结果 (12)5.软件使用说明 (16)6.结论 (19)参考文献 (20)附录:源代码 (21)1.引言数据结构在计算机科学界至今没有标准的定义。

个人根据各自的理解的不同而有不同的表述方法:Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。

这些联系可以通过定义相关的函数来给出。

”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。

Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现。

”Lobert L.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。

其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。

数据结构的课程设计

数据结构的课程设计

数据结构的课程设计一、课程目标知识目标: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. 线性表:讲解线性表的定义、特点,以及线性表的顺序存储和链式存储实现。

教学内容:顺序表、链表、双向链表、循环链表等。

3. 栈与队列:介绍栈和队列的基本概念、操作及应用场景。

教学内容:栈的顺序存储和链式存储、队列的顺序存储和链式存储、栈与队列的应用等。

4. 树与二叉树:讲解树的基本概念、性质,重点介绍二叉树及其遍历算法。

教学内容:树的定义、二叉树的性质、二叉树的遍历、线索二叉树、二叉排序树等。

5. 图:介绍图的基本概念、存储结构,以及图的遍历算法。

数据结构课程设计(5篇)

数据结构课程设计(5篇)

数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。

三、具体要求1)利用完全二叉树的性质建立一棵二叉树。

(层数不小于4层)2)统计树叶子结点的个数。

3)求二叉树的深度。

4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。

四、进度安排依照教学计划,课程设计时间为:2周。

本设计要求按照软件工程的基本过程完成设计。

建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。

三个阶段时间分配的大概比例是:35: 45: 20。

五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。

其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。

4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。

5、源代码要求在关键的位置有注释,增加程序的可读性。

程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。

数据结构课程设计模板(DOC)

数据结构课程设计模板(DOC)

数据结构与算法课程设计报告题目:学院:专业班级:学生姓名:指导教师:2016 年06 月2 9日目录一、课程设计目的 (3)二、课程设计步骤 (3)三、课程设计内容 (5)四、课程设计报告...................................................................... 错误!未定义书签。

五、提交材料 (6)六、考核方式与评分标准 (7)七、参考文献 (9)附录1 齐齐哈尔大学软件工程系课程设计说明书(报告)撰写规范 (10)一、课程设计目的及要求《数据结构与算法分析》课程设计培养计算机专业的学生的算法程序设计能力。

通过上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对数据结构课程和算法的理解。

使学生更好地掌握数据结构的基本概念、基本原理、及基本算法,具有分析算法、设计算法、构造和开发较复杂算法的基本能力。

要求学生能综合运用《数据结构与算法分析》的相关知识,培养学生上机解决一些与实际应用结合紧密的、规模较大的问题的能力,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析实际问题的能力并提高C语言编程技巧,培养良好的编程风格。

课程设计要求独立完成,题目自选(参考题目见三,也可自拟),但需要老师确认(6月16日前定题),一人一题,要求程序有能采用交互式工作方式的界面进行功能的选择,只能用文件存储数据和处理数据不能使用数据库。

要求在教学周的第18周前完成。

二、课程设计步骤随着计算机性能的提高,它所面临的软件开发的复杂度也日趋增加。

然而,编制一个10000行的程序的难度绝不仅仅是一个5000行的程序的两倍,因此软件开发需要系统的方法。

一种常用的软件开发方法,是将软件开发过程分为分析、设计、实现和维护四个阶段。

虽然数据结构课程中的课程设计的复杂度远不如(从实际问题中提出来的)一个“真正的”软件,但为了培养一个软件工作者所应具备的科学工作的方法和作风,完成课程设计的应有如下的5个步骤:1.问题分析和任务定义通常,课程设计题目的陈述比较简洁,或者说是有模棱两可的含义。

数据结构课程设计(附代码)-数据结构设计说明

数据结构课程设计(附代码)-数据结构设计说明

应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计容说明1. 项目一(1) 对设计任务容的概述学生成绩管理**任务:要现对学生资料的录入、浏览、插入和删除等功能。

输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。

存储结构:采用线性链式结构。

(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。

2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。

并将其存入链表。

3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。

知道不满足循环语句,程序再次回到菜单选择功能界面。

数据结构教案设计模板范文

数据结构教案设计模板范文

一、教学目标1. 知识目标:(1)了解数据结构的基本概念和分类。

(2)掌握基本数据结构(如线性表、栈、队列、树、图)的定义、性质和基本操作。

(3)理解数据结构在实际问题中的应用。

2. 能力目标:(1)培养学生运用数据结构解决问题的能力。

(2)提高学生的逻辑思维能力和编程能力。

3. 情感目标:(1)激发学生对数据结构的兴趣,培养其自主学习能力。

(2)培养学生的团队合作精神。

二、教学内容1. 数据结构的基本概念和分类2. 线性表3. 栈和队列4. 树5. 图6. 数据结构在实际问题中的应用三、教学过程(一)导入1. 结合生活实例,引导学生思考数据结构在生活中的应用。

2. 介绍数据结构的基本概念和分类。

(二)新课讲解1. 线性表:(1)介绍线性表的定义、性质和基本操作。

(2)通过实例讲解线性表在实际问题中的应用。

2. 栈和队列:(1)介绍栈和队列的定义、性质和基本操作。

(2)通过实例讲解栈和队列在实际问题中的应用。

3. 树:(1)介绍树的定义、性质和基本操作。

(2)通过实例讲解树在实际问题中的应用。

4. 图:(1)介绍图的定义、性质和基本操作。

(2)通过实例讲解图在实际问题中的应用。

(三)课堂练习1. 完成课后习题,巩固所学知识。

2. 编写程序,实现基本数据结构的相关操作。

(四)课堂总结1. 回顾本节课所学内容,总结数据结构的基本概念、性质和操作。

2. 分析数据结构在实际问题中的应用,引导学生思考如何运用数据结构解决实际问题。

四、教学评价1. 课后作业完成情况。

2. 课堂练习及编程能力。

3. 学生对数据结构的兴趣和自主学习能力。

五、教学反思1. 教学过程中,关注学生的兴趣和需求,调整教学内容和方法。

2. 鼓励学生积极参与课堂讨论,提高课堂氛围。

3. 关注学生的学习进度,及时解决学生在学习过程中遇到的问题。

六、教学资源1. 教材、课件、课后习题等。

2. 在线资源,如教学视频、编程平台等。

七、教学时间1. 课时:2课时2. 教学内容分配:- 数据结构的基本概念和分类:0.5课时- 线性表:1课时- 栈和队列:0.5课时- 树:1课时- 图:1课时- 数据结构在实际问题中的应用:0.5课时。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计模板结构设计一.课程设计概述共完成4个题目:1.一元稀疏多项式计算器2.成绩分析问题3.背包问题4.八皇后问题编程语言:VC6.0运行环境:Windows8.0二.一元稀疏多项式计算器问题描述:1.1 输入并建立多项式;1.2 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,………cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;1.3多项式a和b相加,建立多项式a+b;1.4多项式a和b相减,建立多项式a-b。

1.5多项式a和b相乘,建立乘积多项式ab。

需求分析:2.1 定义线性表的动态分配顺序存储结构;2.2 建立多项式存储结构,定义指针*next2.3利用链表实现队列的构造。

每次输入一项的系数和指数,可以输出构造的一元多项式2.4演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运行结果在屏幕上显示。

多项式显示的格式为:c1x^e1+c2x^e2+…+cnx^en设计思路:要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。

为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则:① 若p->expn<q->expn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。

② 若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。

③ 若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。

4、数据测试(1)、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7);(2)、(2x+5x^8-3.1x^11)-(7-5x^8+11x^9)=-3.1x^11-11x^9+10x^8+12x-7;(3)(2x+5x^8-3.1x^11)*(7-5x^8+11x^9)=34.1x^20+15.5x^19+55x^17-25x^ 16-21.7x^11+22x^10-10x^9+35x^8+14x概要设计1.元素类型、结点类型和指针类型:typedef struct Polynomial{float coef; //系数int expn; //指数struct Polynomial *next;}*Polyn,Polynomial;2、建立一个头指针为head、项数为m的一元多项式, 建立新结点以接收数据, 调用Insert函数插入结点:Polyn CreatePolyn(Polyn head,int m){int i;Polyn p;p=head=(Polyn)malloc(sizeof(struct Polynomial));head->next=NULL;for(i=0;i<m;i++){p=(Polyn)malloc(sizeof(struct Polynomial));printf("请输入第%d项的系数与指数:",i+1);scanf("%f %d",&p->coef,&p->expn);Insert(p,head);}return head;}3、主函数和其他函数:void main(){int m,n,a,x;char flag;Polyn pa=0,pb=0,pc;}数据结构:带头结点单链表抽象数据类型的结点结构定义如下:typedef struct Polynode //多项式结点{int coef; //系数int exp; //指数Polynode *next;}Polynode ,*Polylist;模块划分:(1) 带头结点的多项式的建立函数Polylist Polycreate()(2) 带头结点的多项式的降幂输出函数void printf(Polylist poly)(3) 带头结点的多项式的相加函数Polylist Polyadd(Polylist a,Polylist b)(4) 带头结点的多项式的相减函数Polylist Polysub(Polylist a,Polylist b)(5) 主函数void main()流程图:源代码:#include<stdio.h>#include<stdlib.h> //定义多项式的项typedef struct Polynomial{float coef; //系数int expn; //指数struct Polynomial *next;}*Polyn,Polynomial;void Insert(Polyn p,Polyn h){if(p->coef==0) free(p); //系数为0的话释放结点else{Polyn q1,q2;q1=h;q2=h->next;while(q2&& p->expn < q2->expn){ //查找插入位置q1=q2;q2=q2->next;}if(q2&& p->expn == q2->expn){ //将指数相同相合并q2->coef += p->coef;free(p);if(!q2->coef){ //系数为0的话释放结点q1->next=q2->next;free(q2);}}else{ //指数为新时将结点插入p->next=q2;q1->next=p;}}}Polyn CreatePolyn(Polyn head,int m){ //建立一个头指针为head、项数为m的一元多项式int i;Polyn p;p=head=(Polyn)malloc(sizeof(struct Polynomial));head->next=NULL;for(i=0;i<m;i++){p=(Polyn)malloc(sizeof(struct Polynomial)); //建立新结点以接收数据printf("请输入第%d项的系数与指数:",i+1);scanf("%f %d",&p->coef,&p->expn);Insert(p,head); //调用Insert函数插入结点}return head;}void DestroyPolyn(Polyn p){ //销毁多项式p Polyn q1,q2;q1=p->next;q2=q1->next;while(q1->next){free(q1);q1=q2;q2=q2->next;}}void PrintPolyn(Polyn P){Polyn q=P->next;int flag=1; //项数计数器if(!q){ //若多项式为空,输出0putchar('0');printf("\n");return;}while(q){if(q->coef>0&& flag!=1) putchar('+'); //系数大于0且不是第一项if(q->coef!=1&&q->coef!=-1){ //系数非1或-1的普通情况printf("%g",q->coef);if(q->expn==1) putchar('X');else if(q->expn) printf("X^%d",q->expn);}else{if(q->coef==1){if(!q->expn) putchar('1');else if(q->expn==1) putchar('X');else printf("X^%d",q->expn);}if(q->coef==-1){if(!q->expn) printf("-1");else if(q->expn==1) printf("-X");else printf("-X^%d",q->expn);}}q=q->next;flag++;}printf("\n");}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;else return 0;}else if(!a&&b) return -1; //a多项式已空,但b 多项式非空else return 1; //b多项式已空,但a 多项式非空}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;}}Polyn MultiplyPolyn(Polyn pa,Polyn pb){ //求解并建立多项式a*b,返回其头指针Polyn hf,pf;Polyn qa=pa->next;Polyn qb=pb->next;hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点hf->next=NULL;for(;qa;qa=qa->next){for(qb=pb->next;qb;qb=qb->next){pf=(Polyn)malloc(sizeof(struct Polynomial));pf->coef=qa->coef*qb->coef;pf->expn=qa->expn+qb->expn;Insert(pf,hf); //调用Insert函数以合并指数相同的项}}return hf;}void main(){int m,n,a,x;char flag;Polyn pa=0,pb=0,pc;printf("请输入a的项数:");scanf("%d",&m);pa=CreatePolyn(pa,m); //建立多项式aprintf("请输入b的项数:");scanf("%d",&n);pb=CreatePolyn(pb,n); //建立多项式b//输出菜单printf(" **************************************************\n"); printf(" * 多项式操作程序 *\n"); printf(" * *\n"); printf(" * A:输出多项式a B:输出多项式b *\n"); printf(" * *\n"); printf(" * C:输出a+b D:输出a-b *\n"); printf(" * *\n"); printf(" * E:输出a*b F:退出程序 *\n"); printf(" * *\n"); printf(" *************************************************\n");while(a){printf("\n请选择操作:");scanf(" %c",&flag);switch(flag){case'A':case'a':{printf("\n 多项式a=");PrintPolyn(pa);break;}case'B':case'b':{printf("\n 多项式b=");PrintPolyn(pb);break;}case'C':case'c':{pc=AddPolyn(pa,pb);printf("\n a+b=");PrintPolyn(pc);break;}case'D':case'd':{pc=SubtractPolyn(pa,pb);printf("\n a-b=");PrintPolyn(pc);break;}case'E':case'e':{pc=MultiplyPolyn(pa,pb);printf("\n a*b=");PrintPolyn(pc);break;}case'F':case'f':{printf("\n 感谢使用此程序!\n");DestroyPolyn(pa);DestroyPolyn(pb);a=0;break;}default:printf("\n 您的选择错误,请重新选择!\n");}}}测试结果(1)、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7)(2)、(2x+5x^8-3.1x^11)-(7-5x^8+11x^9)=-3.1x^11-11x^9+10x^8+12x-7;(3)(2x+5x^8-3.1x^11)*(7-5x^8+11x^9)=34.1x^20+15.5x^19+55x^17-25x^ 16-21.7x^11+22x^10-10x^9+35x^8+14x老师提问:1.如何输入多项式:指数相同时,系数相加,指数不同时,按大小排列2.如何令多项式相加:指数相同时,系数相加,指数不同时,直接输出。

相关文档
最新文档