数据结构课程设计

合集下载

数据结构的课程设计

数据结构的课程设计

数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。

2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。

3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。

技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。

2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。

3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。

情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。

2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。

3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。

本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。

通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。

在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。

二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。

2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。

3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。

4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。

5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。

6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。

7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。

数据结构课程设计pdf

数据结构课程设计pdf

数据结构课程设计 pdf一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,包括线性表、栈、队列、树、图等;2. 使学生了解不同数据结构的特点,并能运用其解决实际问题;3. 引导学生掌握常见数据结构的相关算法,如排序、查找等。

技能目标:1. 培养学生运用数据结构描述问题的能力,提高编程实现复杂问题的技能;2. 培养学生具备分析算法复杂度,选择合适数据结构和算法解决问题的能力;3. 提高学生的团队协作能力,通过小组讨论和项目实践,培养学生的沟通表达能力和协作精神。

情感态度价值观目标:1. 激发学生对计算机科学的兴趣,培养学生主动探索、勇于创新的精神;2. 培养学生具备良好的学习习惯,严谨的学术态度,对待问题敢于质疑、善于思考;3. 引导学生认识到数据结构在实际应用中的重要性,提高学生的专业认同感。

本课程针对高中年级学生,结合数据结构课程性质,注重理论与实践相结合,培养学生解决实际问题的能力。

考虑到学生的年龄特点,课程设计力求生动有趣,以激发学生的学习兴趣。

在教学过程中,注重启发式教学,引导学生主动探索、积极思考,提高学生的综合素质。

通过本课程的学习,期望学生能够达到上述课程目标,为后续计算机科学课程打下坚实基础。

二、教学内容1. 线性表:介绍线性表的定义、特点和基本操作,包括顺序存储和链式存储的实现方法。

教材章节:第一章第一节进度安排:2课时2. 栈和队列:讲解栈和队列的基本概念、性质以及应用场景,实现顺序栈和链栈、循环队列等。

教材章节:第一章第二节进度安排:3课时3. 树和二叉树:阐述树和二叉树的基本概念、性质、存储结构及遍历方法,包括二叉排序树、平衡二叉树等。

教材章节:第二章进度安排:5课时4. 图:介绍图的定义、存储结构、遍历算法以及最短路径、最小生成树等算法。

教材章节:第三章进度安排:5课时5. 排序与查找:讲解常见排序算法(冒泡、选择、插入等)和查找算法(顺序、二分、哈希等),分析其算法复杂度。

数据结构(JAVA)课程设计

数据结构(JAVA)课程设计

数据结构(JAVA)课程设计数据结构(JAVA)课程设计一、项目背景和目的1.1 项目背景这个课程设计是为了让学生在学习数据结构的过程中,能够运用所学的知识,实际完成一个具体的项目。

通过设计和实现一个基于JAVA的数据结构,帮助学生加深对数据结构的理解。

1.2 项目目的通过完成这个项目,学生将能够:- 熟悉和理解数据结构的基本概念和原则- 掌握JAVA编程语言的基本语法和使用方法- 设计和实现一个完整的数据结构,包括各种基本操作和功能- 加深学生对数据结构的应用和解决问题的能力二、项目需求和功能2.1 项目需求本项目需要实现一个基于JAVA的数据结构,可以包括但不限于以下需求:- 实现各种基本数据结构,如栈、队列、链表、树等- 提供基本的操作和功能,如插入、删除、查找、排序等- 可以处理各种不同类型的数据,如整数、字符、字符串等- 可以实现数据结构的可视化和交互功能- 提供良好的使用界面和用户体验2.2 功能划分根据项目需求,可以将功能分为以下几个部分:- 基本数据结构的实现:栈、队列、链表、树等- 数据结构的基本操作和功能:插入、删除、查找、排序等- 数据类型的处理:整数、字符、字符串等- 可视化和交互功能的实现- 用户界面和用户体验的设计三、项目实现和设计3.1 数据结构的实现在这一部分,需要具体实现各种基本的数据结构,包括但不限于栈、队列、链表、树等。

可以根据不同的数据结构,选择合适的实现方式和算法。

3.2 基本操作和功能的实现在这一部分,需要实现数据结构的基本操作和功能,如插入、删除、查找、排序等。

可以根据具体的需求,选择合适的算法和方法。

3.3 数据类型的处理在这一部分,需要实现对不同类型数据的处理功能,如整数、字符、字符串等。

可以考虑使用面向对象的思想,设计合适的类和方法。

3.4 可视化和交互功能的实现在这一部分,需要实现数据结构的可视化和交互功能,可以考虑使用图形界面或者命令行界面,提供友好的用户界面和用户体验。

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

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

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

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

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

3)求二叉树的深度。

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

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

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

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

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

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

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

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

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

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

数据结构课程设计python

数据结构课程设计python

数据结构课程设计python一、课程目标知识目标:1. 理解数据结构的基本概念,掌握常用数据结构如列表、元组、字典和集合的特点及应用场景。

2. 学习并掌握栈和队列的操作原理及其在Python中的实现方法。

3. 掌握树和图的基本概念,了解二叉树、遍历算法及图的表示方法。

技能目标:1. 能够运用Python语言实现基本数据结构,并对其进行增、删、改、查等操作。

2. 能够利用栈和队列解决实际问题,如递归、函数调用栈、任务调度等。

3. 能够运用树和图解决实际问题,如查找算法、路径规划等。

情感态度价值观目标:1. 培养学生严谨的逻辑思维,提高分析问题和解决问题的能力。

2. 激发学生对数据结构和算法的兴趣,培养良好的编程习惯。

3. 引导学生认识到数据结构在实际应用中的重要性,增强学习热情和责任感。

课程性质:本课程为高年级数据结构课程,旨在使学生掌握Python语言实现数据结构的方法,提高编程能力和解决问题的能力。

学生特点:学生具备一定的Python编程基础,具有较强的逻辑思维能力,对数据结构有一定的了解。

教学要求:结合实际案例,采用任务驱动法,引导学生通过实践掌握数据结构的基本原理和应用方法。

注重培养学生的动手能力和团队协作精神,提高学生的综合素质。

通过本课程的学习,使学生能够具备独立设计和实现小型项目的能力。

二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,结合Python语言特点,分析各类数据结构在实际应用中的优势。

- 列表、元组、字典和集合的原理与应用- 栈与队列的操作原理及实现2. 线性表:讲解线性表的概念,重点掌握顺序表和链表的操作方法。

- 顺序表和链表的实现及操作- 线性表的查找和排序算法3. 树与二叉树:介绍树的基本概念,重点讲解二叉树的结构及其遍历算法。

- 树的基本概念和表示方法- 二叉树的性质、存储结构、遍历方法4. 图:讲解图的基本概念,掌握图的存储结构及遍历方法。

- 图的基本概念和表示方法- 图的遍历算法(深度优先搜索、广度优先搜索)- 最短路径和最小生成树算法5. 算法分析与设计:结合实例,分析算法性能,掌握基本的算法设计方法。

数据结构课程设计

数据结构课程设计

数据结构课程设计1. 引言数据结构是计算机科学中非常重要的一门课程,它研究将数据组织和存储在计算机中的方法。

为了更好地掌握数据结构的理论知识和实践能力,本课程设计将帮助学生深入了解和应用各种常见的数据结构。

2. 课程设计目标本课程设计的主要目标是帮助学生掌握以下内容:- 理解不同数据结构的特点和适用场景;- 掌握常见数据结构的实现原理和相关算法;- 能够灵活运用数据结构解决实际问题;- 培养学生的编程能力和问题解决能力。

3. 课程设计内容3.1 线性数据结构线性数据结构是数据元素之间存在一对一关系的数据结构,包括数组、链表、队列和栈等。

学生需要通过实例讲解和编程实践来理解它们的概念和实现方法,例如使用数组实现队列和栈等。

3.2 树形数据结构树形数据结构是一种重要的非线性数据结构,包括二叉树、二叉搜索树、堆和哈希表等。

学生需要学习树的基本概念、遍历算法和相关实现方式,如平衡二叉树的调整和哈希函数的设计等。

3.3 图形数据结构图形数据结构是由节点和边组成的复杂数据结构,包括有向图和无向图等。

学生需要了解图的基本概念、图的遍历算法和最短路径算法等。

通过编程实践,学生可以实现常见的图算法,如深度优先搜索和广度优先搜索等。

4. 课程设计实践4.1 编程作业学生将通过完成一系列编程作业来应用所学的数据结构知识。

每个作业都与实际问题密切相关,例如实现一个通讯录管理系统,利用二叉搜索树实现一个字典等。

通过这些作业,学生将深入理解数据结构的应用和实现。

4.2 小组项目学生将分组进行一个小组项目,用于解决一个与数据结构相关的实际问题。

例如,通过利用图算法实现地图导航系统,或者使用哈希表进行文本搜索和替换等。

这些项目将要求学生合作解决问题,提高他们的团队合作能力和创新能力。

5. 课程设计评估为了评估学生对数据结构的掌握程度,将进行以下评估方式:- 编程作业的完成情况和代码质量;- 小组项目的展示和实际应用效果;- 期末考试,包括理论知识和问题解决能力的考察。

数据结构刘畅课程设计

数据结构刘畅课程设计

数据结构刘畅课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、栈、队列、树等常见数据结构的特点和应用场景。

2. 学会分析不同数据结构在解决实际问题中的效率,并能选择合适的数据结构进行问题求解。

3. 掌握排序和查找算法的基本原理,学会运用算法优化程序性能。

技能目标:1. 能够运用所学数据结构知识,设计并实现小型程序,解决实际问题。

2. 培养良好的编程习惯,提高代码编写和调试能力。

3. 培养学生团队协作和沟通能力,学会在项目中分工合作,共同解决问题。

情感态度价值观目标:1. 培养学生对数据结构学习的兴趣,激发学生主动探索的精神。

2. 培养学生面对复杂问题时,保持耐心、细心的态度,勇于克服困难。

3. 培养学生具备良好的信息素养,认识到数据结构在信息技术领域的重要性。

本课程针对高中年级学生,结合数据结构刘畅课程内容,注重理论与实践相结合,旨在提高学生的编程能力和解决问题的能力。

课程目标具体、可衡量,便于教师进行教学设计和评估。

通过本课程的学习,使学生能够在实际编程中灵活运用数据结构知识,为后续计算机专业课程打下坚实基础。

二、教学内容本课程教学内容紧密结合课程目标,依据教材《数据结构》刘畅版,主要包括以下章节:1. 数据结构概述:介绍数据结构的基本概念、作用和分类,为后续学习打下基础。

- 线性表、栈、队列:分析线性表的实现方式,讲解栈和队列的应用场景及操作方法。

- 树、二叉树:探讨树和二叉树的结构特点,掌握二叉树的遍历算法。

2. 算法设计与分析:学习算法设计的基本原则,分析常见算法的时间复杂度和空间复杂度。

- 排序算法:学习冒泡排序、选择排序、插入排序等常见排序算法,分析其优缺点。

- 查找算法:介绍顺序查找、二分查找等查找方法,并分析其效率。

3. 数据结构应用:结合实际案例,运用所学知识解决实际问题。

- 程序设计与实现:培养学生编写结构清晰、高效运行的程序。

- 项目实践:分组进行项目实践,锻炼学生团队协作能力和实际操作能力。

数据结构课程设计目录及正文

数据结构课程设计目录及正文

数据结构课程设计目录及正文一、课程设计目的数据结构是计算机科学中的一门重要基础课程,通过课程设计,旨在让学生更深入地理解和掌握数据结构的基本概念、原理和算法,并能够将其应用到实际问题的解决中。

培养学生的问题分析能力、算法设计能力、程序编写能力和调试能力,提高学生的综合素质和创新能力。

二、课程设计要求1、学生需独立完成课程设计任务,不得抄袭他人成果。

2、课程设计应具有清晰的结构和良好的可读性,代码规范,注释详细。

3、选择合适的数据结构和算法解决给定的问题,并对算法的时间复杂度和空间复杂度进行分析。

4、完成课程设计报告,包括问题描述、算法设计、程序实现、测试结果和总结等内容。

三、课程设计题目1、图书管理系统实现图书的添加、删除、查询、修改等功能。

按照图书的分类、作者、书名等进行排序和查找。

2、学生成绩管理系统录入学生的成绩信息,包括学号、姓名、课程名称、成绩等。

计算学生的平均成绩、总成绩,并按照成绩进行排序。

3、公交线路查询系统建立公交线路的网络模型。

实现站点之间的最短路径查询和换乘方案查询。

4、停车场管理系统模拟停车场的车辆进出管理。

计算停车费用,显示停车场的当前状态。

四、课程设计目录1、引言2、需求分析问题描述功能需求数据需求性能需求3、总体设计系统架构模块划分数据结构设计4、详细设计模块功能描述算法设计界面设计5、编码实现代码框架关键代码实现6、测试与调试测试用例测试结果调试过程7、总结课程设计的收获遇到的问题及解决方法对数据结构课程的进一步理解8、参考文献9、附录源程序代码五、正文内容(一)引言随着信息技术的不断发展,计算机在各个领域的应用越来越广泛。

数据结构作为计算机科学的重要基础,对于提高程序的效率和质量起着至关重要的作用。

本次课程设计旨在通过实际项目的开发,让学生将所学的数据结构知识运用到实践中,提高解决实际问题的能力。

(二)需求分析1、问题描述以图书管理系统为例,系统需要对图书馆中的图书进行有效的管理,包括图书的基本信息(书名、作者、出版社、出版日期、ISBN 号等)、图书的库存数量、借阅状态等。

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

一、需求分析与设计1)设计目的数据结构是计算机专业的核心课程,是一门实践性很强的课程。

课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C(C++)程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。

严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。

2)设计内容本次数据结构的课程设计有两个题目:第一题是要设计一个一元多项式的计算器,功能包括(1)输入并建立多项式(一个多项式最多不超过20项),可以从文件中读取相关数据;(2)输出多项式,输出形式可以是图形方式,也可以是文本方式;(3)实现两个多项式相加,并输出和多项式;(4)实现两个多项式相减,并输出差多项式;(5)实现两个多项式相乘,并输出乘积多项式;(6)计算并输出多项式在指定x处的值。

第二题是已知中国地图,请设计地图着色软件,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色最少。

3)程序已完成本次设计基本实现了两题所要求的功能,诸如加减乘、着色。

但限于本人的所学的知识和设计时间的限制,还有部分功能未能实现,如当输入格式与程序要求不符时,程序无法纠错;还有程序用的C语言编的,不是用visual C++编的,所以程序所实现的外观,实不敢恭维,确实是本设计的大败笔。

二、程序构造与思路1)程序函数构成一元多项式:数据结构定义:typedef struct { float coef; int expn; }ElemType;//带头结点的线性链表类型typedef struct LNode { ElemType data; LNode *next;}*Link,*Position;struct LinkList { Link head,tail; int len; };函数:LocateElem(**)确定位置返回前驱OrderInsert(**)插到相应的位置Compare(**)比较两插入值的指数值CreatPolyn(**)创建多项式PrintPolyn(**)打印多项式AddPolyn(**)加法SubPolyn(**)减法MulPolyn(**)乘法V aluePolyn(**)赋x值地图着色数据结构定义:typedef struct{VRType adj; // 顶点关系类型}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];struct MGraph{V ertexType vexs[MAX_VERTEX_NUM]; // 顶点向量AdjMatrix arcs; // 邻接矩阵int vexnum,arcnum; // 图的当前顶点数和弧数};函数:LocateV ex(**)点是否在图中CreateFAG(**)采用邻接矩阵存储DisPlay(**)输出矩阵Color(**)着色函数Print(**) 输出着色2)设计思路①对于多项式的计算器,即首先要完成多项式的输入输出,然后再完成加减乘、输出x的值。

综上所述,本设计的功能为:采用OrderInsert将结点合并到升序链表的适当位置的思路,对于输入,可用OrderInsert插入空链表;对于加法,可以用OrderInsert将两个链表循环输入;对于减法,可以先将被减链表取反,然后执行加法;对于乘法,可以内外循环来做加法。

②地图着色如图所示:如果对地图4着色,可选择已涂色的区域,如果与图4相邻(图1、图3),则继续判断与图4相邻的图是否与图4的颜色相同,如果不相同,则可以对相邻图赋色;如果相同,则继续换一种颜色判断,直至试出不相同的颜色赋色。

最后输出图的颜色。

三、用户手册1)对于一元多项式,用户可参照详细的菜单进行操作。

另外,在程序文件夹内,有两个TXT文件pol1和pol2,他们是保存多项式的文件。

对于多项式的输入可采用“系数-空格-指数”形式输入,如“2 3”代表2ⅹ3 。

2)对于地图着色修改程序文件夹里的map.txt里的点数目、边数目、点、边四、测试结果一元多项式地图着色五、课程设计小结做程序设计,一个方面是在于程序源码本身,要有效率,算法要好,但这个对于现在来说还太早了,毕竟做这么个程序让我已经很头疼了,还要注意界面,这个程序是用的命令行显示的,并不美观,能实现题目中的要求,也已经很难得了,把这个程序做完,请教不了不少的人。

从中学到的东西自然是多的,当然不只有书本上的,更多的是在于自学以及逻辑方面的知识。

以前我们老在心里想,以后要做一个什么什么样的大程序或者什么游戏,但慢慢的做这个程序设计,我发现,其实那些也是这样慢慢的写出来的。

看似不起眼的东西可能才是最重要的,也可能是最难的,一个小小的程序,功能可能很简单,可能得花费我们很多很多时间和精力,可能它才是最难突破的关口。

就如这个程序,看似很简单,实现的功能并不复杂,但对我们来说就不容易了。

所以能做到现在这个地步,我觉得并没有什么遗憾的。

当然这个程序有很多缺点,比如说如果不严格的按照格式输入,可能就会出现问题等等,我就不一一说了,希望以后的程序中能够解决掉这类的问题。

六、参考文献1)《数据结构》清华大学出版社2)《算法与数据结构考研试题精选》机械工业出版社七、部分9源程序1)一元多项式计算器部分程序Status LocateElem(LinkList L,ElemType e,Position &q,int(*compare)(ElemType,ElemType)) { // 若升序链表L中存在与e满足判定函数compare()取值为0的元素,则q指示L中// 第一个值为e的结点的位置,并返回TRUE;否则q指示第一个与e满足判定函数// compare()取值>0的元素的前驱的位置。

并返回FALSE。

(用于一元多项式)Link p=L.head,pp;do{pp=p;p=p->next;}while(p&&(compare(p->data,e)<0)); // 没到表尾且p->data.expn<e.expnif(!p||compare(p->data,e)>0) // 到表尾或compare(p->data,e)>0 {q=pp; return FALSE;}else // 找到{q=p; return TRUE;}}Status OrderInsert(LinkList &L,ElemType e,int(* compare)(ElemType,ElemType)) { // 将值为e的结点合并到升序链表L的适当位置Position la,lb;if(LocateElem(L,e,la,compare)) // L中存在该指数项{la->data.coef+=e.coef; // 改变当前结点系数的值if(!la->data.coef) // 系数为0{ // 删除多项式L中当前结点lb=PriorPos(L,la); // lb为当前结点的前驱if(!lb) // q无前驱 lb=L.head;DelFirst(L,lb,la);FreeNode(la);}return OK;}else // 生成该指数项并插入链表if(MakeNode(lb,e)) // 生成结点成功{InsFirst(L,la,lb); return OK;}else // 生成结点失败return ERROR;}int compare(ElemType a,ElemType b) // CreatPolyn()的实参{ // 依a的指数值<、=或>b的指数值,分别返回-1、0或+1……… }void CreatPolyn(polynomial &P,int m) //创建多项式{ // 输入m项的系数和指数,建立表示一元多项式的有序链表PElemType e;int i,flag=1,k;InitList(P);FILE *fp;char filename[13];printf("请选择输入方式,1为文件输入,2为手动输入,0退出 ");while(flag){scanf("%d",&k);switch(k){case 1:printf("请输入数据文件名(pol1.txt或者pol2.txt):"); scanf("%s",filename);fp=fopen(filename,"r");for(i=1;i<=m;i++){ // 依次输入m个非零项(可按任意顺序)fscanf(fp,"%f%d",&e.coef,&e.expn);OrderInsert(P,e,compare);}fclose(fp); break;case 2:for(i=1;i<=m;i++){ // 依次输入m个非零项(可按任意顺序)printf("请输入第%d项的系数和指数:",i);scanf("%f%d",&e.coef,&e.expn);OrderInsert(P,e,compare);}break;case 0:flag=0;printf("***退出输入***\n"); break;default :printf("您的选择错误,请重选\n");}}}void PrintPolyn(polynomial P) //打印多项式{ Link q;q=P.head->next; // q指向第一个结点int flag=1;//项数计数器if(!q){//若多项式为空,输出0putchar('0');printf("\n");return;}while(q){if(q->next!=NULL){if(q->data.coef>0){printf("%2.1fX%d + ",q->data.coef,q->data.expn); q=q->next;} else{printf("(%2.1f)X%d+ ",q->data.coef,q->data.expn); q=q->next;} }else {if(q->data.coef>0){printf("%2.1fX%d ",q->data.coef,q->data.expn); q=q->next;} else{printf("(%2.1f)X%d ",q->data.coef,q->data.expn); q=q->next;} }}printf("\n");}polynomial AddPolyn(polynomial &Pa,polynomial &Pb) //加法{……… }polynomial SubPolyn(polynomial &Pa,polynomial &Pb) //减法{……… }polynomial MulPolyn(polynomial &Pa,polynomial &Pb) // 多项式乘法:Pa=Pa*Pb{ polynomial P;Position qa,qb;ElemType a,b,c;InitList(P);qa=GetHead(Pa);qa=qa->next;while(qa){a=GetCurElem(qa);qb=GetHead(Pb);qb=qb->next;while(qb){b=GetCurElem(qb);c.coef=a.coef*b.coef;c.expn=a.expn+b.expn;OrderInsert(P,c,compare);qb=qb->next;}qa=qa->next;}return P;}float ValuePolyn(polynomial Pa,float x){//输入x值,计算并返回多项式的值int i;Position qa=GetHead(Pa);float sum=0,t;for(qa=qa->next;qa;qa=qa->next){t=1;for(i=qa->data.expn;i!=0;){if(i<0){t/=x;i++;}//指数小于0,进行除法else{t*=x;i--;}//指数大于0,进行乘法}sum+=qa->data.coef*t;}return sum;}void main(){polynomial p,q,r;InitList(p); InitList(q); InitList(r);int m,flag=1,choose;float x;menu();while(flag){printf("请选择");scanf("%d",&choose);switch(choose){case 1:printf("请输入一元多项式Z1的项数:");scanf("%d",&m);CreatPolyn(p,m);printf("请输入一元多项式Z2的项数:");scanf("%d",&m);CreatPolyn(q,m); break;case 2:printf("Z1=");PrintPolyn(p);printf("Z2=");PrintPolyn(q); break;case 3:r=AddPolyn(p,q);printf("Z1+Z2=");PrintPolyn(r);ClearList(r); break;case 4:r=SubPolyn(p,q);printf("Z1-Z2=");PrintPolyn(r);ClearList(r); break;case 5:r=MulPolyn(p,q);printf("Z1*Z2=");PrintPolyn(r);ClearList(r); break;case 6:printf("输入x的值:x=");scanf("%f",&x);printf("多项式Z1在指定%g处的值%g\n",x,ValuePolyn(p,x));printf("多项式Z2在指定%g处的值%g\n",x,ValuePolyn(q,x));break;case 0:flag=0;printf("\n***程序结束***\n"); break;default :printf("您的选择错误,请重选\n");}}2)地图着色部分程序void color(MGraph &G,int r_color[]) //着色函数{ int i,j,k; //栈的下标是国家编号,内容是色数r_color[0]=1;i=1;j=1; //编号1的国家涂1色,i为国家号,j为涂色号while(i<G.vexnum){while(j<=4&&i<=G.vexnum){k=0; //k指已涂色的区域号while(k<i&&r_color[k]*G.arcs[i][k].adj!=j) k++;//判断已有的邻区是否涂了相同色if(k<i) j=j+1; //用j+1色继续判断else {r_color[i]=j;i++;j=1;}//如果判断颜色不相同,则赋予颜色}if(j>4) {i--;j=r_color[i]+1;}}}void main(){int r_color[MAX_VERTEX_NUM]; MGraph G;CreateFAG(G);DisPlay(G);color(G,r_color);Print(G,r_color);DestroyGraph(G);}。

相关文档
最新文档