数据结构课程设计文档
数据结构课程设计文档模板

课程设计报告课程名称:数据结构设计题目:公路收费模拟系统院部:专业:组别:第2组起止日期:指导教师:计算机与信息工程学院二○一二年制课程设计任务书目录1.引言 (2)课程设计题目 公路收费模拟系统组长 学号班级系别专业组员指导教师课程设计目的 掌握数据结构的基本理论和基本方法;培养学生的编程能力、协作能力以及 撰写文档的能力。
课程设计环境 Window XP ,Microsoft Visual C++ 6.0。
课程设计任务根据实际问题,构造相应的数据结构,设计解决问题的算法,以及撰写规范 的文档。
课程设计工作进度计划序号 起止日期 工作内容 分工情况1 4月9日至 4月15日 选题 所有的组员根据所选的题目查找资料,讨论思路2 4月16日至 4月22日 讨论解题思路3 4月23日至 5月20日 编码及单元测 试4 5月21日至 6月11日 集成测试 56月12日至 6月28日撰写文档指导教师签字: 年 月 日系(教研室)审核意见:系(教研室)主任签字: 年 月 日2 .需求分析 (2)2.1课程设计题目 (2)2.2课程设计内容 (2)2.3课程设计要求 (2)2.4课程设计思想 (2)2.5软硬件运行环境 (2)3 概要设计 (2)3.1课程设计的流程图 (2)3.2主要的数据结构 (2)3.3算法分析 (3)4 详细设计 (4)4.1绘出计算机程序框图 (4)4.2程序的实现 (4)4.2.1预编命令,定义结构体和全局变量 (4)4.2.2从文件中读入图的结构 (4)4.2.3显示出收费站的结构 (5)4.2.4弗洛伊德算法 (6)4.2.5求最短路径的长度 (6)4.2.6判断车型函数 (7)4.2.7计算路费的函数 (8)4.2.8结束函数 (9)4.2.9菜单函数 (9)4.2.10主体函数 (9)4.3数据存储格式 (10)5 调试分析与调试结果说明 (10)5.1 系统调试分析 (10)5.2 调试结果 (11)5.2.1开始界面 (11)5.2.2显示收费站的结构 (11)5.2.3显示最短路径 (12)5.2.4显示站与站之间的费用 (12)5.2.5退出系统 (12)6 课程设计总结与体会 (13)7 致谢 (13)8 参考文献 (13)1.引言高速公路传统的收费方式以手工收费为主,这种传统的收费方式效率低、出错率高,管理人员无法及时的看到收费报表,无法及时了解一线收费人员的收费情况。
数据结构的课程设计

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

通讯录操作系统一.需求分析当今时代是飞速发展的信息时代。
在各行各业中离不开信息管理以及处理,这正是计算机被广泛应用于管理系统的原因。
计算机管理的好处在于利用它能够进行信息储存以及信息编辑。
用计算机储存和控制,大大提高了工作效率也减少了好多人的工作量。
通讯录信息系统不仅仅帮助了人们记忆,同时也为不少管理者提供了方便。
其设计理念较简单,将传统的纸张与笔录方式改为计算机自动化进行通讯录信息管理,既省时间又提高工作效率。
用c语言构建的通讯录系统设计,通过课上学到一些关于结构体、数组、指针、函数以及循环函数的运用和字符串的处理等基本知识可以初步的实现通讯录的输入、显示、查找、删除等简单实用功能,给人们带来更多的方便。
通讯录信息系统的主要功能清单如下:1) 建立通讯录链表;2) 通讯者结点的插入(按编号的次序插入有序通讯录表);3) 通讯者信息的查询(按编号或姓名查找通讯者信息);4) 通讯者信息的删除(按编号或姓名删除通讯者信息);5) 通讯录的显示(显示所有通讯者信息列表);6) 通讯录信息系统的退出测试数据见调试分析。
二.详细设计算法分析:↓↓↓↓↓↓主函数流程图:主函数流程图创建函数流程图:显示通讯录流程图:查找函数流程图(1)find函数:find函数流程图(2)search函数Search函数流程图删除操作流程图:插入函数流程图:退出函数流程图:图11退出函数流程图3)调试分析及测试结果进入系统后,系统会出现图所示菜单:在主菜单中输入1后,系统会给出提示,如图所示:在主菜单中输入3后,输入要找的姓名。
在系统没有要找信息时或链表为空时,系统会给出提示,确认用户是否继续查找,如图所示:(链表为空时的查找)若要继续查找则按1 ,不是则按0,如图所示:(链表非空的查找)在主菜单中输入0后,系统会给出提示,提示用户输入相关信息,如图所示:依次输入提示信息输入信息:1wuyifeinv139********Wuhan2wwnv132********Wuhan再在主菜单输入1后,程序显示如图所示:在主菜单中输入2后输入要删除的编号,系统便自动删除要删除的通讯录信息,如图15所示:按1显示查看是否删除如图:输入4进行插入操作,如图所示:插入信息如下2wyfnv12345678912wuhan按1进行显示如下图:现在如果没有其他的操作则可按5退出,操作如图所示:实验心得:通过这次课程设计,我熟练的掌握了结构体、数组、指针、函数以及循环函数的运用和字符串的处理,了解代码中出现错误寻找错误的方法,初步了解到了一个完整的应用程序,应该如何处理美观与实用之间的关系,如何处理实际需求与操作难度之间的关系,并让我深刻了解到数据结构这门课的重要性和实用性,在以后的学习中,我将更加努力的学习并动手实践这门课程。
数据结构课程设计pdf

数据结构课程设计 pdf一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,包括线性表、栈、队列、树、图等;2. 使学生了解不同数据结构的特点,并能运用其解决实际问题;3. 引导学生掌握常见数据结构的相关算法,如排序、查找等。
技能目标:1. 培养学生运用数据结构描述问题的能力,提高编程实现复杂问题的技能;2. 培养学生具备分析算法复杂度,选择合适数据结构和算法解决问题的能力;3. 提高学生的团队协作能力,通过小组讨论和项目实践,培养学生的沟通表达能力和协作精神。
情感态度价值观目标:1. 激发学生对计算机科学的兴趣,培养学生主动探索、勇于创新的精神;2. 培养学生具备良好的学习习惯,严谨的学术态度,对待问题敢于质疑、善于思考;3. 引导学生认识到数据结构在实际应用中的重要性,提高学生的专业认同感。
本课程针对高中年级学生,结合数据结构课程性质,注重理论与实践相结合,培养学生解决实际问题的能力。
考虑到学生的年龄特点,课程设计力求生动有趣,以激发学生的学习兴趣。
在教学过程中,注重启发式教学,引导学生主动探索、积极思考,提高学生的综合素质。
通过本课程的学习,期望学生能够达到上述课程目标,为后续计算机科学课程打下坚实基础。
二、教学内容1. 线性表:介绍线性表的定义、特点和基本操作,包括顺序存储和链式存储的实现方法。
教材章节:第一章第一节进度安排:2课时2. 栈和队列:讲解栈和队列的基本概念、性质以及应用场景,实现顺序栈和链栈、循环队列等。
教材章节:第一章第二节进度安排:3课时3. 树和二叉树:阐述树和二叉树的基本概念、性质、存储结构及遍历方法,包括二叉排序树、平衡二叉树等。
教材章节:第二章进度安排:5课时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、源代码要求在关键的位置有注释,增加程序的可读性。
程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。
杭电数据结构课程设计

杭电数据结构课程设计一、课程目标知识目标:1. 学生能理解数据结构的基本概念,掌握线性表、栈、队列、树、图等常见数据结构的特点与应用。
2. 学生能描述各类数据结构的存储方式和操作方法,了解其时间复杂度和空间复杂度。
3. 学生能运用所学的数据结构知识解决实际问题,如排序、查找、最短路径等。
技能目标:1. 学生能运用编程语言(如C++、Java等)实现常见数据结构及其相关算法。
2. 学生能分析实际问题的数据特征,选择合适的数据结构进行问题求解。
3. 学生能通过课程项目实践,培养团队协作、沟通表达、问题解决等综合能力。
情感态度价值观目标:1. 学生对数据结构产生兴趣,认识到数据结构在计算机科学与软件开发中的重要性。
2. 学生在解决实际问题的过程中,培养积极探究、勇于创新的精神。
3. 学生通过团队协作,学会尊重他人、分享经验,提高沟通能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在培养学生掌握数据结构的基本知识、技能和素养。
学生特点:学生具备一定的编程基础和数学素养,具有较强的逻辑思维能力,但对数据结构的应用和实际操作能力有待提高。
教学要求:结合课程性质和学生特点,注重理论与实践相结合,强调动手实践和实际应用,提高学生的数据结构知识水平和问题解决能力。
通过课程目标分解,将知识、技能和情感态度价值观目标融入教学过程,为后续教学设计和评估提供依据。
二、教学内容1. 线性表:介绍线性表的定义、特点、存储结构(顺序存储、链式存储),以及线性表的相关操作(插入、删除、查找等)。
教材章节:第2章 线性表2. 栈与队列:讲解栈和队列的基本概念、存储结构及操作方法,分析其应用场景。
教材章节:第3章 栈与队列3. 树与二叉树:阐述树的基本概念、存储结构、遍历方法,重点讲解二叉树的性质、存储结构、遍历算法(前序、中序、后序)及二叉树的应用。
教材章节:第4章 树与二叉树4. 图:介绍图的定义、存储结构(邻接矩阵、邻接表),图的遍历算法(深度优先搜索、广度优先搜索),以及最短路径、最小生成树等算法。
《数据结构课程设计》百度文档

一、需求分析1.问题描述索的实现.n个结点的二叉链表中含有n+1个空指针域。
利用二叉链表中的空指针域存放指向结点在某种遍历次序下的前趋和后继结点的指针。
加上了线索的二叉链表称为线索链表,叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
在此次课2.基本功能1 234:5 67 8 93.输入输出abcdefg这就实现了d结点插入结点hf*********************************** **课程设计题目: 线索二叉树的运算.** *@#结束:abcdef@@g1 中序输出二叉树2 进行二叉树线索化3 进行插入操作4 进行删除操作5 输出线索二叉树0 退出请选择:1→d→g→b→e→a→f→c1 中序输出二叉树2 进行二叉树线索化3 进行插入操作4 进行删除操作5 输出线索二叉树0 退出请选择:2'5'二、概要设计1.设计思路按某种顺一般的二关键在于如何将新结点作为左孩子和右孩子连接到它的父结点上。
可以设置一个已输入的结点地址。
1front队尾指针rear front=1,rear=0;2rear该结点为父结rear3front=front+1,使front指向下一个等待链接的父结点。
二叉树的中序线索化算法与中序遍历算法类似。
只需要将遍历算法中访问结点的操作具体化为建立正在访问的结点与其非空中序前趋结点间线索。
该算法应附设一个指针pre始pre的初值应为NULL p指示当前正在访问的结点。
结点*pre是结点*p*p是*pre的后继。
线索的(1t t的中序后继是其父亲的中序后(2t t的中序前驱是其父亲的中序前树的删除的类似(1p是叶子节(2p p有一p为根的左子树中的具有最大值节点的t中序后继是pp有一p为根的右子中的具有最小值节点t中序前驱是p序后继不变。
(3p删除。
2.ADT BinaryTree{数据对象D D是具有相同特性的数据元素的集合。
数据关系R若D=φR=φBinaryTree若D=φR=H H1D中存在唯一的成为根的数据元素root H2D—rootφD—root=D1,Dr D1∩Dr=φ3D1≠φD1中存在惟一的元素X1<root,X1>∈H,且存在D1上的关系H1∈H Dr≠φDr中存在惟一的元素Xr<root,Xr>∈H,且存在Dr上的关系Hr∈H,H={<root,X1>,<root,Xr>,H1,Hr}4D1,HDr Hr基本操作P*CreatTree()Inorder(*T)点。
数据结构刘畅课程设计

数据结构刘畅课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、栈、队列、树等常见数据结构的特点和应用场景。
2. 学会分析不同数据结构在解决实际问题中的效率,并能选择合适的数据结构进行问题求解。
3. 掌握排序和查找算法的基本原理,学会运用算法优化程序性能。
技能目标:1. 能够运用所学数据结构知识,设计并实现小型程序,解决实际问题。
2. 培养良好的编程习惯,提高代码编写和调试能力。
3. 培养学生团队协作和沟通能力,学会在项目中分工合作,共同解决问题。
情感态度价值观目标:1. 培养学生对数据结构学习的兴趣,激发学生主动探索的精神。
2. 培养学生面对复杂问题时,保持耐心、细心的态度,勇于克服困难。
3. 培养学生具备良好的信息素养,认识到数据结构在信息技术领域的重要性。
本课程针对高中年级学生,结合数据结构刘畅课程内容,注重理论与实践相结合,旨在提高学生的编程能力和解决问题的能力。
课程目标具体、可衡量,便于教师进行教学设计和评估。
通过本课程的学习,使学生能够在实际编程中灵活运用数据结构知识,为后续计算机专业课程打下坚实基础。
二、教学内容本课程教学内容紧密结合课程目标,依据教材《数据结构》刘畅版,主要包括以下章节:1. 数据结构概述:介绍数据结构的基本概念、作用和分类,为后续学习打下基础。
- 线性表、栈、队列:分析线性表的实现方式,讲解栈和队列的应用场景及操作方法。
- 树、二叉树:探讨树和二叉树的结构特点,掌握二叉树的遍历算法。
2. 算法设计与分析:学习算法设计的基本原则,分析常见算法的时间复杂度和空间复杂度。
- 排序算法:学习冒泡排序、选择排序、插入排序等常见排序算法,分析其优缺点。
- 查找算法:介绍顺序查找、二分查找等查找方法,并分析其效率。
3. 数据结构应用:结合实际案例,运用所学知识解决实际问题。
- 程序设计与实现:培养学生编写结构清晰、高效运行的程序。
- 项目实践:分组进行项目实践,锻炼学生团队协作能力和实际操作能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unopened -> pl = 0; unopened -> sst = 0; unopened -> spt = 0; unopened -> ssr = 0; unopened -> spr = 0; unopened -> loop = 0; printf("题目:设有n个传教士和m个野人来到河边,打算乘一只船 从右岸到左岸去。\n"); printf("该船的负载能力为两人。在任何时候,如果野人人数超过传 教士人数,野人\n"); printf("就会把传教士吃掉。他们怎样才能用这条船安全地把所有人 都渡过河去呢-\n"); printf("\n默认的n、m值皆为3\n"); for(; ;) {printf("\n是否修改?(Y/N):");
提示:可自左至右顺序扫视字符串s,逐个找出单字(单字
开始位置和单字长度),当该单字的长度比已找到的单字更长
时,就从头至尾扫视字符串t,在从t中找出与该单字长度相
等、字符相同的单字后,登录该单字的开始位置和长度,并回
到s,在其中找一个更长的单字,上述寻找过程直至字符串s扫
视结束,最后输出找到的单字。
22 2 4 4 4 8 3 8 1 1 1 1 2 1 则它的压缩数组为
3 2 3 4 -3 8 3 8 4 1 -2 2 1 4 找最长相同单字 从给定的两个由英文单字(词)组成的字符串s和t中,找出 其中都包含的最长的相同单字(同一字母的大小写视作不同字 符)。约定单字全由英文字母组成,单字之间由一个或多个空 白符分隔。
{ntx = unopened; //从待扩展链表中提取最前面的一个 if(ntx->loop == maxloop) return 0; addtoopened(ntx); //将ntx加入已扩展链表,并将这个节点从待 扩展链表中去掉 flag = stretch(ntx); //对ntx进行扩展, 返回-1,0,1 if(flag == 1) return 1; } }
int stretch(struct SPQ* ntx); void recorder( );
void main( ) { int flag; //标记扩展是否成功 for( ; ; ) { initiate( ); flag = search ( ); if(flag == 1)
{ recorder( ); releasemem( ); showresult( ); goon( ); } else
…
120
提示:计算k!采用对已求得的(k-1)!的结果连续累加 k-1次后求出。例如,4!=24,则计算5!对原来的24再累加4
次24后得到120。为了控制累加的位数,另引入整型变量用于 记录当前(k-1)!的位数。
2 银行卡问题 某银行共发出M张储蓄卡,每张储蓄卡拥有唯一的卡号,
每天每张储蓄卡至多支持储蓄卡持有者的N笔“3;3]中的每一行存放一张储蓄卡 的有关信息,其中:
{unopened -> sr = x; break; } else printf("\n输入值应大于0!\n请重新输入"); }
break; } if(choice=='N') break; } }
int search( ) { int flag; struct SPQ *ntx; //提供将要扩展的结点的指针 for( ; ; )
fsl = ntx -> sl; fpl = ntx -> pl; if ((sst <= fsr) && (( 2 - sst) <= fpr))//满足人数限制 { spt = 2 - sst;
fsr = fsr - sst; fpr = fpr - spt; if((fpr == 0) && (fsr == 0)) //搜索成功
这个问题还可以拓展为m个野人和n个传教士,而船一次可 以装下r个人的情况。
#include <stdio.h> #include <stdlib.h> #define maxloop 100 //最大层数 #define pristnum 3 //传教士默认值 #define slavenum 3 //野人默认值 struct SPQ { int sr,pr; //船运行一个来回后河右岸的野人、传教士的人数
2.算法分析与设计
3.参考程序
4.运行结果 图 是由本程序计算出的3个传教士和3个野人的安全渡河
方案。
图14-1 野人渡河问题的解答
5.总结与体会
附:野人渡河程序
3个野人和3个传教士来到河边,打算乘一只船从右岸到左 岸去。该船的负载能力为两人。在任何时候,如果野人人数超 过传教士人数,野人就会把传教士吃掉。他们怎样才能用这条 船安全地把所有人都渡过河去呢?
选作题:
1大数阶乘 对给定的n(n≤100),计算并输出k!(k=1,2, ……,n)的全部有 效数字,因k!的值可能很大,故采用一维数组存计算结果。设 数组的每个元素存储k!的一位数字,并约定从低位到高位依次 存于数组的第一个位置、第二个位置、……。例如,5! =120,在数组a中的存储形式为:
a[2] a[1] a[0]
5 寻找长整数
设A的个位数a[0]为指定的数p(取值分别为2,3,4,…,
9,)。若将A的个位数字移到其他各位数字之前,则其数
值为原数值的A的p倍。例如,p为4,则A为102564(各位
数字分别存入a[5],a[4],
…,a[0]之中),有
102564*4=410256。
寻找从 a[0]=p出发,用p乘已确定的位数的数值可推出其前1
的数字,逐位进行,直到用P乘a[n-1]等于a[0],递推计算结
束,A即为:
a[n-1]a[n-2] … …a[0]
数据结构与算法
课程设计报告
专业班级: 学号: 姓名:
日期:
实例 报数问题
1.问题描述 设有n个人围坐一圈并按顺时针方向1-n循环报数。若从第1 个人开始报数,凡是报的数字是7的倍数(如14、49)或其中 包含7(如17、71),则此人出圈,再从他的下一个人继续报 数,如此进行下去,直到只有一个人为止。 设计程序,要找到那个能留到最后的人的原始位置号与最 后应该报的数字。
2、当输入一棵二叉树的前序序列和中序序列(或后序序列 和中序序列),请设计自动生成二叉树的程序。
要求:在程序中以简单图形的方式输出该二叉树。 2、 对一个项目数是n(10<n<15)的工程,构造对应的AOV
网,然后设计程序求拓扑序列,求出关键路径。 要求:项目数n与各项目的时间与前期项目关系可动态输 入(在设计阶段可在程序中暂时给定)。
int sl,pl; //船运行一个来回后河左岸的野人、传教士的人数 int ssr,spr; //回来(由左向右时)船上的人数 int sst,spt; //去时(由右向左时)船上的人数 int loop; //本结点所在的层数 struct SPQ *upnode ,*nextnode; //本结点的父结点和同层的下一个 结点的地址 } spq; int loopnum; //记录总的扩展次数 int openednum; //记录已扩展节点个数 int unopenednum; //记录待扩展节点个数 int resultnum; struct SPQ *opened; struct SPQ *oend; struct SPQ *unopened; struct SPQ *uend; struct SPQ *result; void initiate( ); void releasemem( ); void showresult( ); void addtoopened(struct SPQ *ntx); int search( ); void goon( );
{ printf("无法找到符合条件的解"); releasemem( ); goon( ); } } } void initiate( ) { int x; char choice; uend = unopened = (struct SPQ*)malloc(sizeof(spq)); if(uend==NULL) { printf("\n内存不够! \n"); exit(0); } unopenednum=1; openednum=0; unopened -> upnode = unopened; //保存父结点的地址以成链表 unopened -> nextnode = unopened; unopened -> sr = slavenum; unopened -> pr = pristnum; unopened -> sl = 0;
{ newnode = (struct SPQ*) malloc (sizeof(spq)); if(newnode==NULL) { printf("\n内存不够!\n"); exit(0); } newnode -> upnode = ntx; //保存父结点的地址以成链表 newnode -> nextnode = NULL; newnode -> sr = 0; newnode -> pr = 0; newnode -> sl = opened -> sr; newnode -> pl = opened -> pr; newnode -> sst = sst; newnode -> spt = spt; newnode -> ssr = 0; newnode -> spr = 0; newnode -> loop = ntx -> loop + 1; oend -> nextnode = newnode; oend = newnode; openednum++; return 1; } else if ((fpr - fsr) * fpr >= 0) //判断是否满足传教士人数大于或等 于野人人数 {fsl = fsl + sst; fpl = fpl + spt; for (ssr = 0 ; ssr <= 1 ; ssr++) //返回 { int ffsl , ffpl;