数据结构课程设计总结报告
数据结构课程设计实验报告完整版

数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。
二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。
在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。
三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。
2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。
3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。
4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。
5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。
四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。
2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。
通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。
3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。
链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。
在实现链表时,我们定义了一个节点结构,包含数据域和指针域。
通过指针的方式将节点连接起来,形成一个链式结构。
同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。
4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。
数据结构实践课总结报告(2篇)

第1篇一、前言数据结构是计算机科学中的基础课程之一,它主要研究数据的组织、存储、检索和维护方法。
通过学习数据结构,我们可以更好地理解和设计算法,提高计算机程序的效率。
本学期,我参加了数据结构实践课程,通过动手实践,我对数据结构有了更深入的理解和认识。
以下是我对本次实践课程的总结报告。
二、课程内容概述本次数据结构实践课程主要涵盖了以下内容:1. 线性表:包括顺序表和链表,以及它们的插入、删除、查找等操作。
2. 栈和队列:栈是一种后进先出(LIFO)的数据结构,队列是一种先进先出(FIFO)的数据结构。
3. 树:包括二叉树、二叉搜索树、平衡二叉树等,以及它们的遍历、查找、插入、删除等操作。
4. 图:包括图的邻接矩阵和邻接表表示,以及图的遍历、最短路径、最小生成树等算法。
5. 查找算法:包括二分查找、散列表查找等。
6. 排序算法:包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。
三、实践过程1. 课前准备在课程开始之前,我认真阅读了教材和参考资料,对数据结构的基本概念和理论有了初步的了解。
同时,我学习了C++、Java等编程语言,为实践课程打下了良好的基础。
2. 实践环节(1)线性表:我实现了顺序表和链表,并实现了插入、删除、查找等操作。
在实现过程中,我学习了数组和指针的使用,提高了我的编程能力。
(2)栈和队列:我实现了栈和队列,并实现了入栈、出栈、入队、出队等操作。
通过实践,我了解了栈和队列在实际应用中的优势。
(3)树:我实现了二叉树、二叉搜索树和平衡二叉树,并实现了查找、插入、删除等操作。
在实现过程中,我学习了递归的使用,提高了我的算法设计能力。
(4)图:我实现了图的邻接矩阵和邻接表表示,并实现了图的遍历、最短路径、最小生成树等算法。
通过实践,我了解了图在实际应用中的广泛用途。
(5)查找算法:我实现了二分查找和散列表查找,并比较了它们的优缺点。
在实现过程中,我学会了如何分析算法的效率。
(6)排序算法:我实现了冒泡排序、选择排序、插入排序、快速排序和归并排序,并比较了它们的性能。
大二数据结构设计报告总结_概述及范文模板

大二数据结构设计报告总结概述及范文模板1. 引言1.1 概述本篇长文是基于大二数据结构设计的报告总结,旨在对数据结构的概念、设计原则和实际应用进行详细介绍。
通过对某个具体案例的分析,我们将探索该数据结构的设计与实现,并评估其效果并提出改进方案。
此外,我们将讨论该数据结构的可扩展性考虑以及未来发展方向。
1.2 文章结构本文共分为五个主要部分:引言、正文、案例分析、结论与总结以及致谢。
下面将依次介绍每个部分的内容和组织方式。
1.3 目的本报告的目标是系统地总结大二学期所学习的数据结构设计知识,并针对其中一个重要数据结构进行深入研究。
通过本次报告,我们希望能够理解不同类型的数据结构以及它们在计算机科学领域中的应用。
同时,我们将探讨在实际应用中遇到的问题和挑战,并提出改进方案和未来发展方向建议。
以上为文章“1. 引言”部分内容。
2. 正文:2.1 数据结构介绍:数据结构是计算机科学中的一项重要概念,它涉及如何组织和存储数据以便于有效地访问和操作。
在本报告中,我们将主要关注几种常见的数据结构,包括数组、链表、栈、队列、树和图等。
每种数据结构都有其独特的特点和适用场景。
2.2 设计原则:在设计数据结构时,我们需要遵循一些基本原则来确保其高效性和可靠性。
其中一些设计原则包括:抽象性(通过隐藏实现细节来简化使用)、封装性(将相关操作封装在一个统一的接口中)、可扩展性(能够容易地添加新的功能或修改现有功能)以及高效性(尽量减少时间和空间复杂度等)。
2.3 实际应用案例:数据结构的设计在各个领域都有广泛的应用。
例如,在信息检索系统中,合适的数据结构可以提高搜索速度;在图像处理中,使用合理的数据结构可以加快图像处理过程;而在网络路由中,优化的数据结构可以提高网络传输效率等。
本节将选择一个具体场景,并讨论该场景下如何选择并设计适当的数据结构来解决问题。
在大二学期的数据结构课程中,我们通过对不同数据结构的学习和实践,加深了对数据结构的理解和应用能力。
2024年数据结构课程设计心得体会范文(二篇)

2024年数据结构课程设计心得体会范文【导言】数据结构课程设计是我大学期间的一门重要课程,通过完成此次课程设计,我对数据结构的理解更加深入,也充分锻炼了我在编程方面的能力。
在本次课程设计中,我选择了实现一个图的最短路径算法,下面我将结合此次课程设计,谈谈我的心得体会。
【正文】一、对数据结构的理解数据结构是计算机科学中非常重要的基础课程,它是实现算法的基础。
在本次课程设计中,我深入学习了图的相关知识,掌握了图的基本概念以及图的存储结构。
通过学习数据结构课程,我了解到数据结构是计算机中用来存储和组织数据的一种方式,它是为了解决实际问题而设计的,能够有效地提高算法的执行效率。
在实际应用中,数据结构与算法是相辅相成的,只有合理地选择和应用数据结构,才能更好地实现算法的功能。
二、对图的理解图是一种非线性结构,是由节点和节点之间的关系组成的,它是一种非常灵活的数据结构。
在课程设计中,我实现了图的最短路径算法,通过深入学习和实践,我对图有了更深入的理解。
图的最短路径算法是一种用于寻找图中两个节点之间最短路径的算法,常见的最短路径算法有Dijkstra算法和Floyd算法。
在实现过程中,我选择了Dijkstra算法来解决问题。
通过实践,我进一步了解了Dijkstra算法的原理和实现过程,并学会了如何使用该算法来解决实际问题。
三、对编程能力的提升在完成本次课程设计过程中,我需要用编程语言实现所学的算法。
我选择了C++语言作为实现工具,通过编写代码来实现最短路径算法。
在这个过程中,我不仅复习了C++语言的基础知识,还学会了如何使用C++语言来实现复杂的算法。
通过不断地调试和优化代码,我进一步提升了自己在编程方面的能力,锻炼了自己解决实际问题的能力。
四、对团队协作的认识在完成本次课程设计中,我选择了和同学进行合作,共同完成图的最短路径算法的实现。
通过与同学的合作,我认识到团队合作是非常重要的,只有通过团队合作,才能更好地完成任务。
数据结构课程设计报告总结

数据结构课程设计报告总结一、背景与目的数据结构是计算机科学中的一门核心课程,它涉及到如何有效地组织、存储和处理数据。
本次课程设计的目的是通过实际项目,加深对数据结构基本概念和原理的理解,提高解决实际问题的能力。
二、项目内容与实现本次课程设计,我们选择了“学生信息管理系统”作为项目主题。
该系统需要存储和管理学生信息,包括学号、姓名、年龄、成绩等。
为了满足这些需求,我们采用了多种数据结构,如数组、链表、栈、队列和二叉搜索树等。
在实现过程中,我们首先定义了学生类,包含各种属性。
然后,我们使用数组来存储学生信息。
为了方便查找,我们采用二叉搜索树对学生信息进行排序。
此外,我们还实现了添加、删除、查找和修改学生信息的功能。
三、遇到的问题与解决方案在实现过程中,我们遇到了以下几个问题:1. 如何在O(log n)的时间内查找学生信息?解决方案:我们采用了二叉搜索树来存储学生信息,从而实现了在O(log n)的时间内查找学生信息。
2. 如何有效地实现对学生信息的批量修改?解决方案:我们采用链表作为底层数据结构,对学生信息进行动态管理。
当我们需要修改大量学生信息时,只需遍历链表,修改对应节点的值即可。
3. 如何处理大量数据的存储和查询?解决方案:我们采用数据库作为存储系统,将学生信息存储在数据库中。
通过编写SQL语句,我们可以方便地对学生信息进行查询和修改。
四、总结与展望通过本次课程设计,我们不仅加深了对数据结构基本概念和原理的理解,还提高了解决实际问题的能力。
在实现过程中,我们学会了如何将理论知识应用到实际项目中,也意识到了数据结构在软件开发中的重要性。
展望未来,我们将继续深入学习数据结构相关知识,努力提高自己的编程能力和算法水平。
同时,我们也希望能够将所学的数据结构知识应用到更多的实际项目中,为软件开发做出更大的贡献。
数据结构课程设计总结

数据结构课程设计总结1. 引言数据结构是计算机科学中的重要基础课程,它研究如何组织和管理数据以实现高效的操作。
在本次数据结构课程设计中,我们学习了多种常见的数据结构,并通过实践应用它们解决了一系列问题。
本文将对我们在课程设计中的重要观点、关键发现和进一步思考进行全面、深入地总结。
2. 重要观点2.1 数据结构的选择与应用在解决实际问题时,选择合适的数据结构非常关键。
不同的数据结构适用于不同类型的问题,我们需要根据问题的特点来选择最合适的数据结构。
例如,在处理大量插入和删除操作的场景下,链表是一个较好的选择;而在需要快速查找元素的场景下,二叉搜索树或哈希表可能更合适。
此外,我们还学习了如何将多个数据结构组合使用来解决复杂问题。
例如,可以使用哈希表和链表来实现LRU缓存淘汰算法;可以使用堆和图来解决最短路径问题。
2.2 算法复杂度分析在设计和实现算法时,我们需要考虑算法的时间复杂度和空间复杂度。
时间复杂度反映了算法执行所需的时间,空间复杂度反映了算法所需的额外空间。
我们学习了如何通过对算法进行逐行分析和数学推导来计算时间复杂度。
常见的时间复杂度有O(1)、O(logn)、O(n)、O(nlogn)和O(n^2)等。
在实际应用中,我们应该选择具有较低时间复杂度的算法来提高程序的执行效率。
空间复杂度则是衡量算法对内存消耗的指标。
通常使用额外数据结构或递归调用会增加程序的空间复杂度。
因此,在设计算法时,我们需要权衡时间和空间之间的折衷关系。
2.3 递归与迭代递归和迭代是两种常见的解决问题的方法。
递归是一种通过将问题分解为规模更小但类似于原始问题的子问题来解决问题的方法。
迭代则是通过重复执行相同或类似操作来解决问题。
在课程设计中,我们学习了如何使用递归和迭代来实现不同数据结构上的操作。
例如,在二叉树上查找一个节点可以使用递归或迭代的方式;在链表上反转链表可以使用递归或迭代的方式。
我们需要根据具体问题的特点选择适合的方法。
数据结构课程设计总结csdn

一、前言本文旨在总结数据结构课程设计的经验和心得体会,结合自身学习和实践情况,探讨课程设计的重点和难点,为今后的课程设计提供借鉴。
二、课程设计内容1. 课程设计目的数据结构是计算机科学和技术专业的重要基础课程,旨在培养学生对数据的存储、管理和操作能力,以及解决实际问题的能力。
课程设计的目的是让学生通过设计和实现程序,加深对数据结构原理的理解,提高编程能力。
2. 课程设计内容(1)知识体系课程设计涉及的知识体系包括线性表、栈、队列、树、图等基本数据结构,以及相应的算法和实现技巧。
(2)案例分析通过实际案例,让学生了解数据结构在实际应用中的作用和意义,培养学生分析和解决问题的能力。
(3)实验设计设计多个实验项目,涵盖各种数据结构和算法的实现,帮助学生加深对知识的理解和掌握。
三、课程设计难点1. 抽象思维能力数据结构是一门较为抽象的课程,学生普遍存在理解和抽象概念的难度,需要在课程设计中加强相关讲解和实例演示。
2. 算法设计能力算法是数据结构的核心,而算法设计是学生的一大难点,需要通过案例分析和实验设计,引导学生掌握算法的设计和实现方法。
3. 编程实现能力课程设计中,学生需要通过编程实现各种数据结构和算法,这需要学生具备一定的编程实践能力,课程设计应注重培养学生的实际操作能力。
四、课程设计经验1. 实例教学在课程设计中,注重实际案例的分析和讲解,通过实例教学引导学生深入理解数据结构的应用场景和解决方法。
2. 培养实践能力课程设计强调学生的编程实践能力,通过多个实验项目,帮助学生掌握数据结构和算法的实现技巧。
3. 提供帮助和指导对于数据结构课程设计中遇到的问题和困难,提供及时的帮助和指导,引导学生正确完成课程设计任务。
五、课程设计总结数据结构课程设计是一项涉及多方面知识和能力的任务,提高学生的抽象思维能力、算法设计能力和编程实现能力是课程设计的关键。
通过实例教学和实践操作,帮助学生深入理解数据结构的应用场景和解决方法,进一步提高学生的实际操作能力。
《数据结构》课程设计报告

《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。
本课程目标如下:1. 知识目标:(1)理解数据结构的基本概念,包括线性表、栈、队列、串、数组、树、图等;(2)掌握各类数据结构的存储表示和实现方法;(3)了解常见算法的时间复杂度和空间复杂度分析;(4)掌握排序和查找算法的基本原理和实现。
2. 技能目标:(1)能够运用所学数据结构解决实际问题,如实现字符串匹配、图的遍历等;(2)具备分析算法性能的能力,能够根据实际问题选择合适的算法和数据结构;(3)具备一定的编程能力,能够用编程语言实现各类数据结构和算法。
3. 情感态度价值观目标:(1)培养学生对计算机科学的兴趣,激发其探索精神;(2)培养学生团队合作意识,提高沟通与协作能力;(3)培养学生面对问题勇于挑战、善于分析、解决问题的能力;(4)引导学生认识到数据结构在计算机科学中的重要地位,激发其学习后续课程的兴趣。
本课程针对高年级学生,课程性质为专业核心课。
结合学生特点,课程目标注重理论与实践相结合,强调培养学生的实际操作能力和解决问题的能力。
在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。
通过本课程的学习,学生将具备扎实的数据结构基础,为后续相关课程学习和职业发展奠定基础。
二、教学内容根据课程目标,教学内容主要包括以下几部分:1. 数据结构基本概念:线性表、栈、队列、串、数组、树、图等;教学大纲:第1章 数据结构概述,第2章 线性表,第3章 栈和队列,第4章 串。
2. 数据结构的存储表示和实现方法:教学大纲:第5章 数组和广义表,第6章 树和二叉树,第7章 图。
3. 常见算法的时间复杂度和空间复杂度分析:教学大纲:第8章 算法分析基础。
4. 排序和查找算法:教学大纲:第9章 排序,第10章 查找。
教学内容安排和进度如下:1. 第1-4章,共计12课时,了解基本概念,学会使用线性表、栈、队列等解决简单问题;2. 第5-7章,共计18课时,学习数据结构的存储表示和实现方法,掌握树、图等复杂结构;3. 第8章,共计6课时,学习算法分析基础,能对常见算法进行时间复杂度和空间复杂度分析;4. 第9-10章,共计12课时,学习排序和查找算法,掌握各类算法的实现和应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
郑州轻工业学院课程设计任务书题目家族关系查询系统专业、班级软件外包11-01 学号 541107080145 姓名周朱莉主要内容、基本要求、主要参考资料等:主要内容:建立家族关系数据库,实现对家族成员关系的相关查询。
基本要求:(1)建立家族关系并能存储到文件中;(2)实现家族成员的添加。
(3)可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。
课程设计按照教学要求需要一周时间完成,总共要上机调试程序10小时。
对每个题目要有需求分析,在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。
给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。
源程序要按照写程序的规则来编写。
要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。
程序能够运行,要有基本的容错功能。
尽量避免出现操作错误时出现死循环;主要参考资料:数据结构(C语言版),在网上查询的相关资料及部分代码完成期限:2013.6.18-2013.6.20指导教师签名:课程负责人签名:2013年 6 月 18 日郑州轻工业学院本科数据结构课程设计总结报告设计题目:家族关系查询系统学生姓名:周朱莉系别:计算机与通信工程专业:软件外包班级:11-01学号:541107080145指导教师:卢冰2013年6 月20 日一、设计题目(任选其一)家族关系查询系统二、运行环境(软、硬件环境)电脑及Visual C++ 6.0三、算法设计的思想随着社会发展,人们使用纸质的家谱已经非常不方便而且不利于在家谱里进行添加和修改。
而用算法设计一个家族关系查询系统则可以解决这个问题。
数据结构的二叉树刚好满足家谱的基本结构。
首先建立一个文件作为家谱,然后在文件中输入字符串,实现了在文件中按照数据的逻辑关系进进输入便可建立相应的三叉链表。
然后就是进行数据的存储、删除及查找工作。
四、算法的流程图家谱的创建:载入家谱:修改家谱:成员查询:五、算法设计分析本次设计研究的是建立家族关系,实现对家族成员关系相关查询的问题。
在设计中使用的数据结构为树状结构,树状结构采用三叉链表实现。
我们在建立好家族关系后将其存储在文件中,在文件中家族关系是以树的形式存储,运用树的操作使家族关系得以准确建立。
家族关系查询系统可分为六大模块,分别是创建、修改、查询、保存、退出等。
建立家族关系模块,建立家族关系并存入文件。
建立时首先输入家族关系的名称,以此名称为名建立文本文件。
接下来按层输入成员姓名,输入一个在文件中写入一个字符串,以回车键结束。
打开一个家族关系。
在界面输入选项名,以家族关系名为文件名打开文件,如果家族关系不存在,返回空;如果存在,打开文件,读取文件。
向家族中添加一个新成员,添加的新成员要根据其父亲确定其在家族中的位置。
首先判断该父亲是否在此家族关系中,若存在,则查找其父亲,将新节点插入其父亲的最后一个孩子之后;若没有孩子,直接作为左孩子插入。
以写入的方式打开文件,更新数组中的信息,然后将数组中的信息写入文件保存,关闭文件。
查找功能模块,查找一个成员的所有祖先及其兄弟,查找一个成员的所有祖先路径,需要从它的父亲一直向上查找带根结点。
查找一个成员的兄弟,一个成员的兄弟为其父亲除了该结点以外的所有孩子。
对于要操作的结点,先判断它是否是根结点,若是根结点,则无兄弟;若不是根结点,则找到该结点的父亲。
接着判断父亲的兄弟是否都存在,如果都不存在,则无兄弟;如果都存在,对父亲的孩子操作。
六、源代码#include <stdio.h>#include <stdlib.h>#include <string.h>#include<conio.h>typedef char TElemType;typedef int status;typedef struct BiTPNode{TElemType data[10];struct BiTPNode *parent,*lchild,*rchild; //父亲及左右孩子指针}BiTPNode,*BiPTree;BiPTree P;BiPTree T;//家谱的创建int Cre(){system("cls");FILE *fp; //声明指向文件的指针char [40],str[10];printf("请输入家谱名称:");getchar();gets(); //输入家谱名称while([0]==NULL){printf("家谱名不能为空,请重新输入:");gets();if((fp=fopen(,"w"))==NULL){printf("%s家谱创建失败!\n",);return 0;}printf("请输入家谱内容:\n");while (strlen(gets(str))>0){fputs(str,fp); //向文件写入字符串putc('\n',fp);}fclose(fp); //关闭文件printf("按任一键继续!");getch();return 1;}status loc(BiPTree T,BiPTree &P,TElemType name[10]){ if(T)P=T;//字符串的比较if(!strcmp(name,T->data)) return 1;if(loc(T->lchild,P,name)) return 1;if(loc(T->rchild,P,name)) return 1;}elsereturn 0;}//构造二叉树status inittree(BiPTree &T){T=(BiTPNode *)malloc(sizeof(BiTPNode));if(T)return 0;T->lchild=NULL;T->rchild=NULL;T->parent=NULL;return 1;}//载入家谱status Crt(BiPTree &T){FILE *fp;BiPTree Q,R,M,N;char [40],name[10];system("cls"); //清屏R=(BiTPNode *)malloc(sizeof(BiTPNode)); //分配存储空间M=(BiTPNode *)malloc(sizeof(BiTPNode));N=(BiTPNode *)malloc(sizeof(BiTPNode));printf("请输入家谱名:");getchar();gets();while([0]==NULL){printf("家谱名不能为空,请重新输入:");gets();}if((fp=fopen(,"r"))==NULL){printf("%s家谱打开失败!\n",);return 0;}inittree(T);fscanf(fp,"%s",name); //从文件读入姓名strcpy(T->data,name);T->lchild=NULL;T->rchild=NULL;T->parent=NULL;fclose(fp);if((fp=fopen(,"r"))==NULL){printf("%家谱打开失败!\n",);return 0;}fscanf(fp,"%s",name);while(!feof(fp)){if(loc(T,P,name)){fscanf(fp,"%s",name);Q=(BiTPNode *)malloc(sizeof(BiTPNode));strcpy(Q->data,name);P->lchild=Q; //构建孩子Q->parent=P;Q->lchild=NULL;Q->rchild=NULL;N=P;}else if(!loc(T,P,name)){Q=(BiTPNode *)malloc(sizeof(BiTPNode));R=N;R=R->lchild;while(R){M=R;R=R->rchild;}strcpy(Q->data,name);M->rchild=Q;Q->parent=M;Q->lchild=NULL;Q->rchild=NULL;}fscanf(fp,"%s",name);}printf("信息载入成功,按任一键继续!");getch();return 1;}//添加成员status in(BiPTree &T){char father[10],name[10];BiPTree Q,M;system("cls");printf("请输入要添加到该家谱中的人的父亲姓名:");getchar();gets(father);while(!loc(T,P,father)){printf("%s不在该家谱中!请重新输入:",father);gets(father);}printf("请输入要添加到该家谱中的人的姓名:");gets(name);Q=(BiTPNode *)malloc(sizeof(BiTPNode));M=(BiTPNode *)malloc(sizeof(BiTPNode));strcpy(Q->data,name);Q->lchild=NULL;Q->rchild=NULL;if(!P->lchild){P->lchild=Q;Q->parent=P;}else {P=P->lchild;while(P){M=P;P=P->rchild;}M->rchild=Q;Q->parent=M;}printf("成员添加成功,按任一键继续!");getch();return 1;}//删除成员status de(BiPTree &T){char name[10];system("cls");printf("请输入要删除的人的姓名:");getchar();gets(name);while(!loc(T,P,name)){printf("%s不在该家谱中!请重新输入:",name);gets(name);}if(!P->rchild){if(P->parent->lchild==P)P->parent->lchild=NULL;elseP->parent->rchild=NULL;free(P);}else if(P->rchild){if(P->parent->lchild==P)P->parent->lchild=P->rchild;elseP->parent->rchild=P->rchild;free(P);}printf("成员删除成功,按任一键继续!");getch();return 1;}status Show(TElemType e[10]){printf("%s ",e);return 1;}//二叉树的遍历status pre(BiPTree T,status(*visit)(TElemType[10])){ if(T) {if ((*visit)(T->data))if (pre(T->lchild,visit))if (pre(T->rchild,visit)) return 1;return 0;}else return 1;}//家族成员查询status Sea(BiPTree T){char name[10];BiPTree N;N=(BiTPNode *)malloc(sizeof(BiTPNode));system("cls");printf("请输入要查寻的人的姓名:");getchar();gets(name);while(!loc(T,P,name)){printf("%s不在该家谱中!请重新输入:",name);gets(name);}N=P;if(P==T)printf("%s的父亲在该家谱中没有记载!\n",P->data);else {while(N->parent->rchild==N)N=N->parent;printf("%s的父亲是:%s\n",P->data,N->parent->data);}N=P;if(P==T)printf("%s没有兄弟!\n",P->data);else if(!P->rchild&&P->parent->rchild!=P)printf("%s没有兄弟!\n",P->data);else {printf("%s的兄弟有:\n",name);while(N->rchild){printf("%s ",N->rchild->data);N=N->rchild;}N=P;while(N->parent->rchild==N){printf("%s ",N->parent->data);N=N->parent;}printf("\n");}if(P==T)printf("%s的祖先在该家谱中没有记载!\n",name);elseprintf("%s的祖先是:%s\n",name,T->data);N=P;if(!P->lchild){printf("%s没有孩子!\n",name);printf("%s没有后代\n",name);}else {printf("%s的孩子有:\n",name);printf("%s ",P->lchild->data);N=N->lchild;while(N->rchild){printf("%s ",N->rchild->data);N=N->rchild;}printf("\n");printf("%s的后代有:\n",name);pre(P->lchild,Show);printf("\n");}printf("按任一键继续!");getch();return 1;}//文件的创建status write(BiPTree T,char [40]){FILE *fp;if((fp=fopen(,"a+"))==NULL){printf("%s文件创建失败!\n",);return 0;}fprintf(fp,"%s ",T->data);T=T->lchild;while(T){fprintf(fp,"%s ",T->data);T=T->rchild;}fprintf(fp,"\n"); //输出fclose(fp);return 1;}status prewrite(BiPTree T,status(*visit)(BiPTree,char[40]),char [40]){if(T) {if (T->lchild)(*visit)(T,);prewrite(T->lchild,visit,);prewrite(T->rchild,visit,);return 1;}else return 1;}status wrong(){char a;scanf("%c",&a);printf("无此选项,请重新选择!(按任一键继续!)");getch();return 1;}//家谱的存储status Sav(BiPTree T){FILE *fp;char [40];system("cls");printf("请输入新的文件名:");getchar();gets();while([0]==NULL){printf("家谱名不能为空,请重新输入:");gets();}prewrite(T,write,);printf("%s家谱保存成功,按任一键继续!",);getch();return 1;}//修改家谱status Upd(){system("cls");int xz;while(1){system("cls");printf("\n\n\n\n");printf("(*^◎^*)家族成员的添加与删除操作(*^◎^*) \n"); printf("(*^◎^*) 请选择(*^◎^*)\n"); printf("(*^◎^*) 1.添加成员. (*^◎^*)\n"); printf("(*^◎^*) 2.删除成员. (*^◎^*)\n");printf(" (*^◎^*) 3.返回上一级. (*^◎^*)\n"); printf(" 请选择:");scanf("%d",&xz);switch(xz){case 1 : in(T);break;case 2 : de(T);break;case 3 : return 0;default :wrong();break;}}}main(){P=(BiTPNode *)malloc(sizeof(BiTPNode));int xz;while(1){system("cls");printf("\n\n\n\n");printf("(*^◎^*) 家族关系查询系统(*^◎^*) \n"); printf("(*^◎^*) 具体操作如下(*^◎^*) \n"); printf("(*^◎^*) 1.创建家谱. (*^◎^*) \n"); printf("(*^◎^*) 2.载入家谱. (*^◎^*) \n"); printf("(*^◎^*) 3.修改家谱. (*^◎^*) \n"); printf("(*^◎^*) 4.查寻成员. (*^◎^*) \n"); printf("(*^◎^*) 5.保存家谱. (*^◎^*) \n"); printf("(*^◎^*) 6.退出程序. (*^◎^*) \n"); printf(" 请选择操作:");scanf("%d",&xz);switch(xz){case 1 :Cre();break;case 2 :Crt(T);break;case 3 :Upd();break;case 4 :Sea(T);break;case 5 :Sav(T);break;case 6 :return 0;default :wrong();break;}}}六、运行结果分析主界面及其操作选项:输入家谱名称及家谱内容:载入已建立家谱:家族成员的添加及删除主选项:家族成员的添加:家族成员的删除:家族成员的查询操作:七、收获及体会转眼课程设计已经结束,从选择任务到上网查找资料,到源代码的完成,到代码真正的运行出来。