《数据结构与算法实践》大作业
数据结构与算法初步大作业

数据结构与算法初步大作业院别电子信息工程学院专业电子信息工程班级电子信息工程1班学号姓名教师郑国杰西安思源学院电信学院编制实验序号: 1 实验名称:用栈完成算术表达式求值一、实验预备知识1.复习C语言种的编写函数的相关内容。
2.复习栈的运算。
二、实验目的1.用栈结构完成一个算法:可以计算较复杂的数学中缀表达式。
三、实验要求1.编写创建并初始化栈的算法。
2.编写对输入的较复杂的数学中缀表达式进行计算的算法3.编写主函数,将上面的函数连接在一起,构成一个完整的程序。
4.将实验源程序调试并运行,写入输入、输出结果,并对结果进行分析。
四、实验步骤栈的应用实验内容:1.编写能将较为复杂的数学中缀表达式通过栈运算的方式,进行正确计算的函数。
2.由键盘输入“ (62+95)*106-1024/768*(3972-2436) ”3.计算得到正确的结果五、程序调试过程(列出程序清单,写出运行结果,运行结果截图)#include<stdio.h>#include<stdlib.h>#include<math.h>#define Maxsize 20typedef struct SqStack1{ float stack[Maxsize];int top;}SeqStack1;typedef struct SqStack2{ char stack[Maxsize];int top;}SeqStack2;void InitStack1(SeqStack1 *s){ s->top=-1; }void InitStack2(SeqStack2 *s){ s->top=-1; }void push1(SeqStack1 *s,float item) { if(s->top==Maxsize-1){ printf("数字栈满了\n");system("pause");exit(1);}s->top++;s->stack[s->top]=item;}void push2(SeqStack2 *s,char item) { if(s->top==Maxsize-1){printf("符号栈满了\n");system("pause");exit(1);}s->top++;s->stack[s->top]=item;}float Pop1(SeqStack1 *s){ char panduan;if(s->top==-1){ printf("数字栈是空的\n");system("pause");exit(1);}s->top--;return s->stack[s->top+1];}char Pop2(SeqStack2 *s){char panduan;if(s->top==-1){ printf("符号栈是空的\n");system("pause");exit(1);}s->top--;;return s->stack[s->top+1];}char GetTop(SeqStack2 *s){char panduan;if(s->top==-1){printf("符号栈是空的,没有第一个\n");system("pause");exit(1);}return s->stack[s->top];}int main(){ int i=0,j;float x;char fuhao,luru[30];SeqStack1 *s1;SeqStack2 *s2;s1=(struct SqStack1*)malloc(sizeof(struct SqStack1));s2=(struct SqStack2*)malloc(sizeof(struct SqStack2));InitStack1(s1);InitStack2(s2);printf("请输入计算式:");scanf("%s",luru);for(j=0;luru[j]!='\0';j++);//用j表示luru数组的长度luru[j]=';';luru[j+1]='\0';push2(s2,';');while(luru[i]){ if(luru[i]>=48&&luru[i]<=58){push1(s1,atof(luru+i));}while(luru[i]>=48&&luru[i]<=58||luru[i]=='.'){i++;}switch(luru[i]){case '+': if(GetTop(s2)==';'||GetTop(s2)=='(')push2(s2,luru[i]);else {x=Pop1(s1);fuhao=Pop2(s2);if(fuhao=='+')x=x+Pop1(s1);else if(fuhao=='-')x=Pop1(s1)-x;else if(fuhao=='*')x=x*Pop1(s1);else if(fuhao=='/')x=Pop1(s1)/x;push1(s1,x);push2(s2,luru[i]);}break;case '-': if(GetTop(s2)==';'||GetTop(s2)=='(')push2(s2,luru[i]);else {x=Pop1(s1);fuhao=Pop2(s2);if(fuhao=='+')x=x+Pop1(s1);else if(fuhao=='-')x=Pop1(s1)-x;else if(fuhao=='*')x=x*Pop1(s1);else if(fuhao=='/')x=Pop1(s1)/x;push1(s1,x);push2(s2,luru[i]);}break;case '*': if(GetTop(s2)==';'||GetTop(s2)=='('||GetTop(s2)=='+'||GetTop(s2)=='-')push2(s2,luru[i]);else {x=Pop1(s1);fuhao=Pop2(s2);if(fuhao=='+')x=x+Pop1(s1);else if(fuhao=='-')x=Pop1(s1)-x;else if(fuhao=='*')x=x*Pop1(s1);else if(fuhao=='/')x=Pop1(s1)/x;push1(s1,x);push2(s2,luru[i]);}break;case '/': if(GetTop(s2)==';'||GetTop(s2)=='('||GetTop(s2)=='+'||GetTop(s2)=='-')push2(s2,luru[i]);else {x=Pop1(s1);fuhao=Pop2(s2);if(fuhao=='+')x=x+Pop1(s1);else if(fuhao=='-')x=Pop1(s1)-x;else if(fuhao=='*')x=x*Pop1(s1);else if(fuhao=='/')x=Pop1(s1)/x;push1(s1,x);push2(s2,luru[i]);}break;case ')': if(GetTop(s2)=='(')Pop2(s2);else {x=Pop1(s1);fuhao=Pop2(s2);if(fuhao=='+')x=x+Pop1(s1);else if(fuhao=='-')x=Pop1(s1)-x;else if(fuhao=='*')x=x*Pop1(s1);else if(fuhao=='/')x=Pop1(s1)/x;push1(s1,x);push2(s2,luru[i]);}break;case '(': push2(s2,luru[i]);break;case ';':while(GetTop(s2)!=';'){x=Pop1(s1);fuhao=Pop2(s2);if(fuhao=='+')x=x+Pop1(s1);else if(fuhao=='-')x=Pop1(s1)-x;else if(fuhao=='*')x=x*Pop1(s1);else if(fuhao=='/')x=Pop1(s1)/x;push1(s1,x);}printf("%s\b=%f\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\n",luru,Pop1(s1));break;}i++;}system("pause");}六、总结检验1、是否达到实验目的?何处体现?答:达到实验目的,如上程序与截图,按要求得到正确答案。
数据结构与算法实践练习题目及解答

数据结构与算法实践练习题目及解答以下是一些数据结构与算法的实践练题目及其解答。
1. 数组相关题目题目一给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的索引。
def twoSum(nums, target):nums_dict = {}for i in range(len(nums)):nums_dict[nums[i]] = i题目二给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
def moveZeroes(nums):count = 0for i in range(len(nums)):if nums[i] != 0:nums[count] = nums[i]count += 1while count < len(nums):nums[count] = 0count += 12. 链表相关题目题目三反转一个单链表。
class ListNode:def __init__(self, val=0, next=None): self.val = valself.next = nextdef reverseList(head):prev = Nonecurr = headwhile curr is not None:next_node = curr.nextcurr.next = prevprev = currcurr = next_nodereturn prev题目四给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
def deleteDuplicates(head):curr = headwhile curr is not None and curr.next is not None:if curr.val == curr.next.val:curr.next = curr.next.nextelse:curr = curr.nextreturn head以上是一些数据结构与算法的实践练习题目及其解答。
《数据结构与算法》习题与答案

《数据结构与算法》习题与答案(解答仅供参考)一、名词解释:1. 数据结构:数据结构是计算机存储、组织数据的方式,它不仅包括数据的逻辑结构(如线性结构、树形结构、图状结构等),还包括物理结构(如顺序存储、链式存储等)。
它是算法设计与分析的基础,对程序的效率和功能实现有直接影响。
2. 栈:栈是一种特殊的线性表,其操作遵循“后进先出”(Last In First Out, LIFO)原则。
在栈中,允许进行的操作主要有两种:压栈(Push),将元素添加到栈顶;弹栈(Pop),将栈顶元素移除。
3. 队列:队列是一种先进先出(First In First Out, FIFO)的数据结构,允许在其一端插入元素(称为入队),而在另一端删除元素(称为出队)。
常见的实现方式有顺序队列和循环队列。
4. 二叉排序树(又称二叉查找树):二叉排序树是一种二叉树,其每个节点的左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。
这种特性使得能在O(log n)的时间复杂度内完成搜索、插入和删除操作。
5. 图:图是一种非线性数据结构,由顶点(Vertex)和边(Edge)组成,用于表示对象之间的多种关系。
根据边是否有方向,可分为有向图和无向图;根据是否存在环路,又可分为有环图和无环图。
二、填空题:1. 在一个长度为n的顺序表中,插入一个新元素平均需要移动______个元素。
答案:(n/2)2. 哈希表利用______函数来确定元素的存储位置,通过解决哈希冲突以达到快速查找的目的。
答案:哈希(Hash)3. ______是最小生成树的一种算法,采用贪心策略,每次都选择当前未加入生成树且连接两个未连通集合的最小权重边。
答案:Prim算法4. 在深度优先搜索(DFS)过程中,使用______数据结构来记录已经被访问过的顶点,防止重复访问。
答案:栈或标记数组5. 快速排序算法在最坏情况下的时间复杂度为______。
《数据结构与算法》试卷

一、选择题1.下列哪种数据结构适合用于实现优先队列?A.栈B.队列C.二叉堆(正确答案)D.链表2.在进行图的深度优先搜索(DFS)时,使用哪种数据结构可以帮助记录已访问过的顶点,从而避免重复访问?A.栈B.队列C.集合(正确答案)D.哈希表3.下列排序算法中,哪种算法的时间复杂度在最坏情况下为O(n2),但在平均情况下和最好情况下可以达到O(nlogn)?A.快速排序(正确答案)B.归并排序C.堆排序D.插入排序4.在二叉树的遍历中,前序遍历的顺序是?A.根节点-> 左子树-> 右子树(正确答案)B.左子树-> 根节点-> 右子树C.左子树-> 右子树-> 根节点D.根节点-> 右子树-> 左子树5.下列哪种查找算法在有序数组中查找特定元素时,具有最优的时间复杂度O(logn)?A.顺序查找B.二分查找(正确答案)C.插值查找D.斐波那契查找6.在哈希表中,处理哈希冲突的一种常见方法是?A.开放寻址法(正确答案)B.链地址法C.再哈希法D.以上都是7.下列关于二叉搜索树(BST)的说法中,哪一项是正确的?A.在BST中,每个节点的左子树只包含小于该节点的数B.在BST中,每个节点的右子树只包含大于该节点的数C.在BST中,每个节点的左子树只包含小于该节点的数,右子树只包含大于该节点的数(正确答案)D.BST中不允许有重复值的节点8.下列哪种算法是解决最短路径问题的经典算法,适用于带权重的图?A.迪杰斯特拉算法(Dijkstra)(正确答案)B.弗洛伊德算法(Floyd)C.贝尔曼-福特算法(Bellman-Ford)D.A*算法(A-star)。
数据结构与算法大作业

课程设计说明书课程名称:数据结构与算法设计题目:校园导游程序院系:计算机科学与信息工程学院学生姓名:丁守亮学号:201003030007专业班级:10级软件工程一班指导教师:闫怀平2012年6 月15日课程设计任务书校园导游程序摘要:随着现代旅游业的快速发展,图文声像导游方式和实地口语导游方式都已经不能满足现阶段旅游者的需求,信息化的飞速发展造就了地理信息系统(GIS)和全球定位系统(GPS),促使消费者更多的选择自助游和自驾游等方式出行。
而近年来高等院校的发展使得高校也成为了一个景点。
如何让游客以最短的时间到达旅游目的地就是本文所寻求解决的问题。
文章通过最短路径算法,并结合实际情况以高等院校为例采集所需要的数据,理论上使得游客可以轻松的寻找到最适合自己的旅游线路,并以此为依据合理安排自己的行程。
关键词:数据结构图结点边权景点路径距离目录1.设计背景 (1)1.1课程设计目的 (1)1.2题目要求 (1)2.设计方案 (2)2.1功能构思 (2)2.2方法实现 (3)3.方案实施 (4)3.1基本操作 (4)3.2各步操作函数模块 (4)4.结果和结论 (17)4.1运行结果 (17)4.2结论 (25)5.收获和致谢 (26)6.参考文献 (27)7.附件 (28)1. 设计背景1.1 课程设计目的数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且已成为其他理工专业的热门选修课。
从课程性质上讲,数据结构是一门专业技术基础课。
它的教学要求是:学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当地逻辑结构,存储结构和其相应的算法,并初步掌握算法的时间分析和空间分析的技术。
另一方面,本课程的学习也是复杂程序的设计的训练过程,要求学生编写的程序结构清楚和正确易读,符合软件工程的规范。
如果说高级语言程序设计的训练过程,要进行结构化的程序设计的初步训练的话,那么数据结构就要培养我们的数据抽象能力。
数据结构与算法作业

《数据结构与算法》作业说明:1、题号形式: 每题都以【sn,cha,sec】开头,sn表明本题的题目序号,每道题都有唯一的序号;cha表示内容所在的章;sec表示内容所在的节。
如【17,2,1】表示序号17的题来自第2章第1节。
2、题型:1) 选择题:序号1-180题2) 是非题:序号181-220题3) 分析计算作图题:序号221-250题(选自《数据结构题集》—严蔚敏等编)3、内容取舍:根据本学期上课课件中的内容,未上课章节的练习可舍弃。
4、必做题或选做题:是非题和选择题(序号1-220)只要在上过课的章节中都是必做题,分析计算作图题(序号221-250)在每题后标出是必做题还是选做题,其中16个必做题14个选做题。
1) 选择题:序号1-180题【1,1,1】数据结构形式地定义为(D,S),其中D是①B 的有限集合,S 是D上的②D 的有限集合。
① A. 算法 B. 数据元素 C. 逻辑结构 D. 数据操作② A. 结构 B. 操作 C. 存储 D. 关系【2,1,1】数据结构中,从逻辑上可以把数据结构分成① D 。
① A. 动态结构和静态结构 B. 紧凑结构和非紧凑结构C. 内部结构和外部结构D. 线性结构和非线性结构【3,1,1】数据结构是研究数据的①C 以及它们之间的相互关系。
① A. 理想结构,物理结构 B. 理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构【4,1,1】数据的定义取决于数据的逻辑结构,而数据的实现取决于数据的物理结构。
A. 正确AB. 不正确【5,1,2】在数据结构中,与所使用的计算机无关的是数据的①C 结构。
① A.存储 B.物理 C.逻辑 D.物理与存储【6,1,3】数据结构课程主要研究以下三方面的内容,它们是①D 。
① A. 数据、数据元素、数据类型1B. 数据元素、数据类型、算法实现C. 数据元素、数据的逻辑结构、数据的存储结构D. 数据的逻辑结构、数据的存储结构、数据的运算【7,1,3】在下列叙述中,正确的是①C 。
数据结构大作业实验报告要求范文
浙江工商大学计算机与信息工程学院数据结构实验大作业报告专业:班级:学号:姓名:指导教师:年月一、大作业报告内容包括以下几个部分⒈问题描述:(题目)⒉设计:⑴数据结构设计和核心算法设计描述;⑵主控及功能模块层次结构;⑶主要功能模块的输入、处理(算法框架描述)和输出;⑷功能模块之间的调用与被调用关系等。
⒊测试:测试范例,测试结果,测试结果的分析与讨论,测试过程中遇到的主要问题及所采用的解决措施。
⒋使用说明和作业小结:⑴使用说明主要描述如何使用你的程序以及使用时的主要事项;⑵在小结中说明程序的改进思想、经验和体会;⒌整理一份程序清单及运行示例的结果。
将以上各项文字材料及程序清单等装订成册,形成一个完整的报告。
题目从以下题目中任选一个,每人1个题目。
(一)试设计一个航空客运定票系统。
基本要求如下:1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
若需要,可登记排队候补;3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
3、实现提示:两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。
由于预约人数无法预计,队列也应以链表作为存储结构。
《第15课数据结构与算法》作业设计方案-初中信息技术浙教版20七年级下册自编模拟
《数据结构与算法》作业设计方案(第一课时)一、作业目标本次《数据结构与算法》的作业设计旨在使学生能够:1. 理解基本的数据结构概念,如数组、链表等;2. 掌握算法的基本思想,并能通过实例理解其执行过程;3. 培养学生的逻辑思维能力和问题解决能力;4. 增强学生利用信息技术知识解决实际问题的能力。
二、作业内容本次作业内容主要包括以下几个部分:1. 理论学习:学生需认真阅读教材中关于数据结构与算法的基础知识,包括不同数据结构的定义、特点及适用场景,常见算法的原理和实现方法等。
2. 实践操作:学生需完成以下实践操作任务:(1)绘制常见数据结构(如数组、链表)的示意图,并简要说明其结构特点;(2)选择一种算法(如二分查找),分析其执行过程并编写伪代码或实际代码实现;(3)结合实际生活场景,设计一个涉及数据结构和算法的应用案例,并简述其实现思路。
3. 作业报告:学生需撰写一份关于本次实践操作的报告,报告中应包括:(1)对所选数据结构或算法的详细解释;(2)实践操作过程的详细描述,包括遇到的问题及解决方法;(3)应用案例的设计思路及实现可能性分析。
三、作业要求1. 学生需在规定时间内完成作业,并保证作业的准确性和完整性;2. 理论学习部分要求学生对知识点有深入理解,并能准确表述;3. 实践操作部分要求学生动手实践,真实记录操作过程,并保证代码的正确性;4. 作业报告中要求内容详实,思路清晰,分析深入;5. 严禁抄袭,如发现抄袭行为,将按照学校相关规定处理。
四、作业评价1. 教师将根据学生的作业完成情况、理论理解程度、实践操作能力以及报告撰写质量等方面进行评价;2. 评价标准包括:知识点掌握程度、实践操作能力、创新性与实用性、报告撰写质量等;3. 评价结果将作为学生平时成绩的一部分,并反馈给学生以便其了解自己的学习情况。
五、作业反馈1. 教师将对每位学生的作业进行认真批改,指出其中的优点和不足;2. 通过课堂讲解、个别辅导等方式,帮助学生理解自己的不足之处,并给出改进建议;3. 鼓励学生之间相互交流学习心得和经验,促进学习氛围的营造。
数据结构与算法作业(1)
3. 二维数组Aij, 0<=i<=5, 2<=j<=9,问按行存储 A24和按列存储哪一个矩阵元素在相同位置?
作业 5
1. 设一棵完全二叉树,共有1001个结点,试问: (1)有多少个叶子结点; (2)有多少度为2的结点; (3)有多少结点只有非空左子树。 2. 设一棵二叉树,其中序和后序遍历为: 中序:BDCEAFHG; 后序:DECBHGFA 画出该二叉树的逻辑结构,并写出先序遍历结果。 3. 给出一组元素{17,28,36,54,30,27,94, 15,21,83,40,17},要求画出由此生成的二 叉排序树 4. 给出一组权值W={8,2,5,3,2,17,4},画 出由此生成的huffman树
作业 2
1. 已知线性表L(x1, x2,…,xn)各元素按递增有序排列,用向 量方式做存储结构。试编写算法,删除表中值分布在 c与d(c<d)之间的元素 2. 编写一算法,将向量L(x1, x2,…,xn)倒置 3. 试编写算法,求已知单链表的长度,并考虑表空情况 4. 已知一循环链表中各数值已按递增有序排列,现要求 插入一结点后,链表仍有序 5. 缩写单链表倒置算法 6. 在双向链表的值为a、b的两个结点之间插入值为x的 结点
2 4 ^
4
2
5
4 ^
7. 有A、B、C、D四个村庄要建乡村俱 乐部,应设在哪个村才能使各村到俱乐 部的路径之和最小?写出各村庄到中心 俱乐部的路径及长度。
A
15
10 6 2 4
B
3
C
8
D
作业 7
1. 画一棵对20个记录{1,2,3,…,20}进行对分查找 的判定树,并求等概率情况下的平均查找长度。 2. 设有10记录的关键字分别为: ICKES,BARBER,ELYOT,KERN,FRENCE,LOWES,BENSD, FONK,ERVIN,KNOW。构造=10/13的Hash表, 怪关键字首字母在字母表中的序号为Hash函数 值,采用随机探测解决冲突,dj=(d1+Rj) mod 13,Rj取自随机数列:3,7,1,12,10,…,统 计该表的平均查找长度ASL。 3. 100个记录的表,关键字为中国人名姓氏,给 出hash表的设计方案,要求等概情况下查找长 度≤3。
数据结构实践作业
数据结构作业利用单向链表数据结构完成对链表的如下操作:1、创建一条含整数结点的无序链表2、链表结点的输出3、链表结点的升序排序4、分别计算链表中奇数和偶数结点之和并输出5、释放链表具体要求将程序功能做成菜单,形式如下:1、创建一条含整数结点的无序链表2、链表结点的输出3、链表结点的升序排序4、分别计算链表中奇数和偶数结点之和并输出5、释放链表0、退出《数据结构》大作业1 总体要求将程序功能做成菜单,形式如下:(1)创建一条含整数结点的无序链表(2)链表结点的输出(3)链表结点的升序排序(4)分别计算链表中奇数和偶数结点之和并输出(5)释放链表2 开发环境软件环境:Window10,Visual Studio 20173 系统运行效果截图(1)主菜单:(2)创建一条含整数结点的无序链表:3,6,2,5,9(3)链表结点的输出(4)链表结点的升序排序(5)分别计算链表中奇数和偶数结点之和并输出(6)释放链表4 源程序#include<iostream>//头文件using namespace std;//节点数据结构定义struct node{int data;node *next;};//创建一条含整数结点的无序链表node *CreateLinkList(){node *p1, *p2, *head;int n;p2 = NULL;head = NULL;cout <<"正在创建一个无序链表\n";cout <<"请输入一个整数,以-1结束:";cin >> n;//循环输入一个整数,直到数值为-1结束,创建一条无序链表while (n != -1){p1 = new node;p1->data = n;//采用尾插法,新建一个结点并连接到链表尾部if (head == 0){head = p1; p2 = p1; //首结点的建立}else{p2->next = p1; p2 = p1;}cout <<"请输入一个整数,以-1结束:";cin >> n;}if (head != 0) //尾结点p2->next = 0;return(head);}//输出结点void PrintLinkList(const node *head){const node *p;p = head;while (p != NULL){cout <<" "<< (p->data);p = p->next;}cout << endl;}//升序排序void SortLinkList(node *head){node temp;node *p = NULL;node *q = NULL;//判断结点为空或者只有一个结点if (head == NULL || head->next == NULL){return;}//p->next!=NULL为链表倒数第2个结点for (p = head; p->next != NULL; p = p->next) {for (q = p->next; q != NULL; q = q->next){if (p->data > q->data) //升序{ //交换数据域temp.data = q->data;q->data = p->data;p->data = temp.data;}}}return;}//奇数结点和int OddSumLinkList(const node *head){int sum = 0;const node *p;p = head;while (p){//判断数值为是否奇数if (p->data % 2 != 0){sum = sum + p->data;}p = p->next;}return sum;}//偶数结点和int EvenSumLinkList(const node *head){int sum = 0;const node *p;p = head;while (p){//判断是否偶数if (p->data % 2 == 0){sum = sum + p->data; //偶数结点的数值累加}p = p->next;}return sum;}//释放链表void DeleteLinkList(node *head){node *p;while (head){p = head;head = head->next;delete p;}printf("释放成功\n");}void main(){node *head;head = NULL;int select;cout <<"************菜单************"<< endl;cout <<"输入对应选择,执行对应操作"<< endl;cout <<"1.创建一条含整数结点的无序链表"<< endl;cout <<"2.链表结点的输出"<< endl;cout <<"3.链表节点的升序排序"<< endl;cout <<"4.分别计算链表中奇数和偶数结点之和并输出"<< endl;cout <<"5.释放链表"<< endl;cout <<"0.退出"<< endl;while (1){cout <<"\n请输入选择:";cin >> select;switch (select) //判断选项,并执行对应的函数{case 1:{head = CreateLinkList();printf("无序链表创建完成\n");break;}case 2:{printf("输出链表中各结点数据:");PrintLinkList(head);break;}case 3:{SortLinkList(head);printf("升序后:");PrintLinkList(head);break;}case 4:{int oddsum;int evensum;oddsum = OddSumLinkList(head);evensum = EvenSumLinkList(head);printf("奇数和= %d,偶数和= %d\n", oddsum, evensum);break;}case 5:{DeleteLinkList(head);break;}case 0:{cout <<"退出"<< endl;exit(0);}default:{cout <<"输入选项有误,请重新输入:"<< endl;break;}}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构与算法实践》大作业
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
基本要求:
(1)设计你所在学校的校园平面图,所含场所不少于10个。
以图中顶点表示校内各场所,存放场所名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意场所相关信息的查询。
(3)为来访客人提供图中任意场所的问路查询,即查询任意两个景点之间的一条最短的简单路径。
(4)请绘制规范流程图(参考《C语言》第二章),附程序清单,及测试结果以及地图。
结果显示:
程序代码:
#include<stdio.h>
#include<string>
#include<iostream.h>
#define fi 9999
#define MAXVEX 10
struct node
{
int num;
string name;
}xuhao[10];
void Floyed(int cost[][MAXVEX],int n,int m,int x)
{
int A [MAXVEX][MAXVEX],path[MAXVEX][MAXVEX];
int i,j,k,pre;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
A[i][j]=cost[i][j];
path[i][j]=-1;
}
for(k=0;k<n;k++)
{ for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(A[i][j]>(A[i][k]+A[k][j]))
{
A[i][j]=A[i][k]+A[k][j];
path[i][j]=k;
}
}
if(m!=x)
{
cout << xuhao[m].name << " ———> " << xuhao[x].name << " ";
if(A[m][x]==fi)
{
if(m!=x)
cout << "该路径不存在\n" << endl;
}
else
{
cout << "最短路径长度是:" << A[m][x] << "米";
cout << "具体路径为:" << xuhao[m].name << "----";
pre=path[m][x];
while(pre!=-1)
{
cout<<xuhao[pre].name << "----";
pre=path[pre][x];
}
cout<<xuhao[x].name<<endl;
}
}
}
void main()
{ int i,k,l,x;;
cout << "宁波大学科学技术学院及周边平面图介绍:" << endl;
cout << " 序号———名称——————简介—————————" << endl;
cout << " 0 校门口学生、教师进出" << endl;
cout << " 1 一号实验楼机房供学生做实验" << endl;
cout << " 2 二号实验楼英语听力教室及舞蹈房" << endl;
cout << " 3 综合楼老师办公楼/图书馆/机房" << endl;
cout << " 4 三号教学楼上课,自习" << endl;
cout << " 5 二号教学楼上课,自习" << endl;
cout << " 6 一号教学楼上课,自习" << endl;
cout << " 7 宁大西区成教学院" << endl;
cout << " 8 操场在建中" << endl;
cout << " 9 学生村二村学生生活区" << endl;
cout<<endl;
xuhao[0].num=0;xuhao[0].name="校门口";
xuhao[1].num=1;xuhao[1].name="一号实验楼";
xuhao[2].num=2;xuhao[2].name="二号实验楼";
xuhao[3].num=3;xuhao[3].name="综合楼";
xuhao[4].num=4;xuhao[4].name="三号教学楼";
xuhao[5].num=5;xuhao[5].name="二号教学楼";
xuhao[6].num=6;xuhao[6].name="一号教学楼";
xuhao[7].num=7;xuhao[7].name="宁大西区";
xuhao[8].num=8;xuhao[8].name="操场";
xuhao[9].num=9;xuhao[9].name="学生村二村";
cout <<"输入你要查询的起始地点的序号:";
cin >> k;
cout << k << "\t" << xuhao[k].name << endl;
cout << "输入你要查询的终止地点的序号:";
cin>>x;
cout << x << "\t" << xuhao[x].name << endl;
cout << "以下是从" << xuhao[k].name << "出发到" << xuhao[x].name << "其他地方的最短路径:" << endl ;
int cost[10][MAXVEX]={
{0,100,100,150,fi,fi,fi,fi,fi,150},
{100,0,150,100,130,fi,fi,fi,fi,fi},
{100,150,0,100,fi,fi,fi,fi,200,fi},
{150,100,100,0,50,fi,fi,fi,fi,fi},
{fi,130,fi,50,0,20,fi,fi,fi,fi},
{fi,fi,fi,fi,20,0,20,fi,fi,fi} ,
流程图:
开始
学生村二村(9)
学生村二村(9)
起始序号=>k
终止序号=>x
输出最短路径长度
输出具体路径
结束
100。