数据结构与算法实习指导书

合集下载

数据结构上机指导书_实验一

数据结构上机指导书_实验一

数据结构与算法实验指导书中国石油大学(北京)计算机科学与技术系前言《数据结构》是计算机及相关专业的一门核心基础课程,也是很多高校考研专业课之一。

它主要介绍线性结构、树结构、图结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法及时、空效率分析。

这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。

通过学习,要求学生能够掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。

学习这门课程,习题和实验是两个关键环节。

学生理解算法,上机实验是最佳的途径之一。

因此,实验环节的好坏是学生能否学好《数据结构》的关键。

为了更好地配合学生实验,特编写实验指导书。

一、实验目的更好的理解算法的思想、培养编程能力。

二、实验要求1、每次实验前学生必须根据试验内容认真准备实验程序及调试时所需的输入数据。

2、在指导教师的帮助下能够完成实验内容,得出正确的实验结果。

3、实验结束后总结实验内容、书写实验报告。

4、遵守实验室规章制度、不缺席、按时上、下机。

5、实验学时内必须做数据结构的有关内容,不允许上网聊天或玩游戏,如发现上述现象,取消本次上机资格,平时成绩扣10分。

6、实验报告有一次不合格,扣5分,两次以上不合格者,平时成绩以零分记。

三、实验环境 VC++6.0或者VC2010四、说明1、本实验的所有算法中元素类型可以根据实际需要选择。

2、实验题目中带*者为较高要求,学生可自选;其余部分为基本内容,应尽量完成(至少完成70%,否则实验不合格)。

3、数据结构是很多高校的硕士研究生入学考试的专业课之一,希望有志于考研的学生能够在学习过程中注意各种算法的理解,以便为考研做一定的准备。

五、实验报告的书写要求1.明确实验的目的及要求;2.记录实验的输入数据和输出结果;3.说明实验中出现的问题和解决过程;4.写出实验的体会和实验过程中没能解决的问题;六、参考书目《数据结构》(C++语言描述)王红梅等清华大学出版社《DATA STRUCTURE WITH C++》 William Ford,William Topp清华大学出版社(影印版)实验平台控制台程序1、启动Microsoft VC6.0集成开发环境如图所示:2、单击“文件”菜单,选择“新建”项。

数据结构与算法实习_实验指导书

数据结构与算法实习_实验指导书

数据结构与算法实习_实验指导书数据结构与算法课程实习实验指导书目录实验一顺序表的基本操作 (2)实验二链表的基本操作 (3)实验三二叉树的基本操作 (4)实验四综合应用 (5)附录A 实验报告示例 (9)附录B实验报告封面、评语得分表 (12)实验一顺序表的基本操作【实验目的】1、掌握顺序存储的概念,学会对顺序表的基本操作。

2、加深对顺序存储数据结构的理解,逐步培养解决实际问题的能力。

【实验性质】设计型实验【实验内容】1、实现顺序表显示;2、实现顺序表插入;3、实现顺序表查找(显示比较次数);4、实现顺序表删除(显示移动次数);5、实现顺序表排序(分别实现简单选择、快速,显示比较次数、移动次数);6、实现顺序表的折半查找(显示比较次数);7、编程实现一个顺序表的就地逆置,即利用原表的存储空间将顺序表逆置;8顺序表有序插入(显示比较次数、移动次数),屏幕提示后,从键盘输入一个元素值,在经过排序的线性表中插入这个元素;屏幕显示比较次数和移动次数,应有溢出判断和报告;9、要求以较高的效率实现删除顺序表中元素值在x到y(x和y自定)之间的所有元素;10、编程实现将两个非递减的顺序表进行合并,要求同样的数据元素只出现一次;*11、编程实现顺序表的shell排序(步长为5, 3,1);*12、编程实现堆排序算法;*13、利用三元组顺序表存储矩阵,实现矩阵的转置(请独立写程序实现)。

【实验环境】VC++ 6.0【实验要求】将如上文件保存在命名为学号+姓名”勺文件夹中并上传到指定的服务器。

实验二链表的基本操作【实验目的】1、掌握链表的概念,学会对链表进行操作。

2、加深对链式存储结构的理解,逐步培养解决实际问题的编程能力。

【实验性质】设计型实验【实验内容】1、实现单链表的创建;2、实现单链表的显示;3、实现单链表的查找(显示比较次数);4、实现单链表的插入;5、实现单链表的删除(显示比较次数);6、对已创建的链表(数据不限)进行直接插入排序;7、将链接存储线性表逆置,即最后一个结点变成第1个结点,原来倒数第2个结点变成第2个结点,如此等等;8、生成有序的两个单链表A和B (链表的数据和个数自定),其首结点指针分别为a 和b,要求将两个单链表合并为一个有序的单链表C,其首结点指针为c,并且合并后的单链表的数据不重复;9、将一个首结点指针为a的单链表A分解成两个单链表A和B,其首结点指针分别为a和b,使得链表A中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序;10、请编程实现链栈的基本操作函数,并通过调用这些基本函数,实现十进制和八进制转换的功能。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。

具体而言,实验的目的包括:1、加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解,掌握其特点和操作方法。

2、培养学生运用数据结构解决实际问题的能力,提高算法设计和程序实现的能力。

3、增强学生的逻辑思维能力和调试程序的能力,培养学生的创新意识和团队合作精神。

二、实验环境1、操作系统:Windows 或 Linux 操作系统。

2、编程语言:C、C++、Java 等编程语言中的一种。

3、开发工具:如 Visual Studio、Eclipse、Code::Blocks 等集成开发环境(IDE)。

三、实验要求1、实验前,学生应认真预习实验内容,熟悉相关的数据结构和算法,编写好实验程序的代码框架。

2、实验过程中,学生应独立思考,认真调试程序,及时记录实验过程中出现的问题及解决方法。

3、实验完成后,学生应撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、问题分析与解决等。

四、实验内容(一)线性表1、顺序表的实现与操作实现顺序表的创建、插入、删除、查找等基本操作。

分析顺序表在不同操作下的时间复杂度。

2、链表的实现与操作实现单链表、双向链表的创建、插入、删除、查找等基本操作。

比较单链表和双向链表在操作上的优缺点。

(二)栈和队列1、栈的实现与应用实现顺序栈和链式栈。

利用栈解决表达式求值、括号匹配等问题。

2、队列的实现与应用实现顺序队列和链式队列。

利用队列解决排队问题、广度优先搜索等问题。

(三)树1、二叉树的实现与遍历实现二叉树的创建、插入、删除操作。

实现二叉树的前序、中序、后序遍历算法,并分析其时间复杂度。

2、二叉搜索树的实现与操作实现二叉搜索树的创建、插入、删除、查找操作。

分析二叉搜索树的性能。

(四)图1、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。

数据结构实验指导书(新版)

数据结构实验指导书(新版)

《数据结构和算法》实验指导书实验及学时数分配序号实验名称学时数(小时)1 实验一线性表 42 实验二树和二叉树 23 实验三图 24 实验四查找 25 实验五内部排序 2合计12几点要求:一、上机前:认真预习相关实验内容,提前编写算法程序,上机时检查(未提前编写程序者,扣除平时成绩中实验相关分数)。

二、上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调试过程中的问题、解决方法以及运行结果。

上机时签到;下机时验收签字。

三、下机后:按要求完成实验报告,并及时提交(实验后1周内)。

实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素。

1、通过键盘读取元素建立线性表;(从键盘接受元素个数n以及n个整形数;按一定格式显示所建立的线性表)2、指定一个元素,在此元素之前插入一个新元素;(从键盘接受插入位置i,和要插入的元素值;实现插入;显示插入后的线性表)3、指定一个元素,删除此元素。

10学时 数据结构与算法实验指导书

10学时 数据结构与算法实验指导书

《数据结构与算法》实验指导书沈阳工程学院信息工程系目录实验一:线性表的实现3实验二:顺序栈、链栈的实现错误!未定义书签。

实验三:队列的实现错误!未定义书签。

实验四:二叉树的存储和实现5实验五:图的存储和实现6实验六:常用排序算法的实现7实验七:基本查找算法的实现8实验一:线性表的实现一、实验目的与要求1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。

2.掌握线性表的顺序存储结构的定义及C语言实现。

3.掌握线性表的链式存储结构——单链表的定义及C语言实现。

4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验环境安装有Visual C++6.0或其它C编译环境的PC机一台。

三、实验预习与准备1.复习教材相关章节内容。

2.复习C语言中关于结构体与指针的相关内容。

3.认真阅读实验题目,事先写好程序。

四、实验内容和步骤实验题目1:实现顺序表各种基本运算的算法。

编写一个程序,实现顺序表的各种基本运算,以下各功能分别用一个函数来实现,并在此基础上设计一个主函数进行验证各函数的正确性:(1)初始化顺序表L。

(必做)(2)输出顺序表L。

(必做)(3)输出顺序表L的长度。

(4)判断顺序表L是否为空。

(5)输出顺序表L的第i个元素的值。

(6)输出元素x的位置。

(7)在第i个元素位置上插入x元素。

(必做)(8)删除L的第i个元素。

(必做)(9)删除L中值为x的元素。

实验题目2:实现单链表各种基本运算的算法。

编写一个程序,实现单链表的各种基本运算,以下各功能分别用一个函数来实现,并在此基础上设计一个主函数进行验证各函数的正确性:(1)初始化单链表L。

(必做)(2)输出单链表L。

(必做)(3)释放单链表L。

(4)输出单链表L的长度。

(5)判断单链表L是否为空。

(6)输出单链表L的第i个元素的值。

(7)输出元素x的位置(或地址)。

(8)在第i个元素位置上插入值为x的元素。

《数据结构与算法》实验指导书(计科101)

《数据结构与算法》实验指导书(计科101)

职业技术、职业师范学院《数据结构和算法》实验指导书适用专业:计算机科学与技术专业贵州大学二OO九年二月前言数据结构和算法是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。

基于以上的三点要求,在编写这本实验指导书时贯穿这样的中心思想:让读者通过实验课,理论结合实践,达到这三点要求。

读者在使用这本书时,要以这三点要求为出发点,力求理解结构、掌握算法、读懂程序。

依据理论课的讲授情况,本书的实验安排以表(包括有序表、链表等),树,图三个基本的数据结构为重点。

实验一:有序表的建立、插入与删除实验学时:2实验类型:验证实验要求:必修一、实验目的1、了解有序表的顺序存贮结构。

2、掌握有序表元素在内存中是怎样存贮的。

二、实验内容在有序表中实现如下操作:1、插入一个新元素到第i个位置。

使原来标号为增1。

2、删除第i个位置的元素。

3、存一个新元素到第i个位置。

4、读表5、检索表中第i个元素。

6、求表的长度三、实验原理、方法和手段1、插入一个新元素到第i个位置,既把元素ai向后移一个位置,成为元素ai+1,把新元素放入到第i个位置,其他元素依次后移。

存一新元素到第i个位置是把元素ai冲掉后存上新值。

删除第i个元素就是把余后的元素依次向前移一个位置。

即:以元素ai+1,ai+2,···,依次取代ai,ai+1,···。

删除后的表长是n-1(n是原表长)。

4、参考程序/* 有序表的建立、插入与删除 */static int array[100];int j,i,n,p;int ch;void du(){printf("please tell me which numbers do you operate:");scanf("%d",&i);while (i>n){printf("ERROR,please enter new element");scanf("%d",&i);}}void da(){printf("the list is:");for(j=0;j<n;j++)printf("%3d",array[j]);printf("\n");}void show(){printf("-----------------------------------\n"); printf(" the function of the list\n");printf(" 1: insert\n");printf(" 2: delete\n");printf(" 3: save new element\n");printf(" 4: read list\n");printf(" 5: check\n");printf(" 6: the length of the list\n");printf(" 0: end\n");printf("-----------------------------------\n"); }main(){printf("please input the length of list:");scanf("%d",&n);printf("\n");printf("please enter number:");for (i=0;i<n;i++)scanf("%d",&array[i]);p=1;while (p!=0){show();printf ("enter p: ");scanf("%d",&p);if(p>=0&&p<=6){switch(p){case 1:printf("the inserted number places the front of the operation\n");du();for (j=n-1;j>=i-1;j--)array[j+1]=array[j];printf("please enter number:\n");scanf("%d",&ch);array[i-1]=ch;n+=1;da();break;case 2:du();for(j=i-1;j<=n;j++)array[j]=array[j+1];n-=1;da();break;case 3:du();printf("please enter new number:\n");scanf("%d",&ch);printf("\n");array[i-1]=ch;da();break;case 4:da();break;case 5:du();printf("what is the %d number:",i);printf("%3d\n",array[i-1]);break;case 6:printf("the length of the list is:");printf("%3d\n",n);break;case 0: p=0; break;}}}printf("ERROR,please enter new number\n");}四、实验组织运行要求本实验根据课堂教学进度,讲授相关知识后组织到计算机实验室进行实验。

数据结构与算法基础实验指导书

数据结构与算法基础实验指导书

数据结构与算法基础实验指导书实验1 线性表及其应用实验目的1.掌握线性表顺序存储结构的特点及线性表在顺序存储结构中各种基本操作的实现。

2.掌握线性表链式存储结构的特点及线性表在链式存储结构中各种基本操作的实现。

3.重点巩固和体会线性表在链式存储结构上的各种操作和应用。

实验要求对学生要求:1.掌握单向链表的存储特点及其实现。

2.掌握单向链表的插入、删除算法及其应用算法的程序实现。

3.掌握多项式的代数运算算法。

4.根据算法编写与实验内容相关的程序,要求该程序的多项式动态输入输出。

对实验指导教师要求:1.掌握单向链表的存储特点及其实现。

2.掌握单向链表的插入、删除算法及其应用算法的程序实现。

3.编写并运行该题目程序代码,具有该题目的参考答案。

5.深刻理解题目内涵,能够清晰描述问题,掌握该题目涉及的知识点,指导学生实验时需要注意的问题。

实验内容采用链式结构实现任意多项式的存储,求两个多项式的和。

实验评分标准一.课堂表现(10分)1.出勤情况(按时,迟到,早退,缺席)2.是否遵守课堂纪律二.实验结果(50分)1.当堂按时完成(10)2.独立完成(10),(和同学协商完成,在老师帮助下完成)3.结果正确无误(10)4.功能齐全,界面美观,具有较好演示效果(10)5.在源程序中有必要的注释和说明(5)6.程序文档齐全(5)三.实验报告(40)1.对预习要求的回答(10)2.实验过程中遇到的问题如何解决的(10)3.实验的体会(10)4.思考题(10)实验2 树及其应用实验目的1.掌握树的链式存储方式及其操作实现(创建、遍历、查找等)。

2.掌握二叉树用不同方法表示所对应的不同输入形式。

3.掌握二叉树中各种重要性质在解决实际问题中的应用。

4.掌握哈夫曼树的构造方法及其编码方法。

5.掌握二叉排序树的特性及其构造方法。

实验要求对学生要求:1.掌握二叉树的链式存储特点及其实现。

2.掌握二叉树的创建、遍历、查找算法及其程序实现。

《数据结构与算法》实验指导书.

《数据结构与算法》实验指导书.

《数据结构与算法》实验指导书实验1 顺序表一、实验目的(1)掌握顺序表的逻辑结构、存储结构及描述方式。

(2)掌握顺序表的定位、插入、删除等操作。

二、实验要求(1)调试程序要记录调试过程中出现的问题及解决办法;(2)给出每个问题的算法或画出流程图;(3)编写程序要规范、正确,上机调试过程和结果要有记录,并注意调试程序集成环境的掌握及应用,不断积累编程及调试经验;(4)做完实验后给出本实验的实验报告。

三、实验设备、环境奔腾以上计算机,装有Turbo C 2.0或Visual C++软件四、实验步骤及内容实验步骤:1.根据题目,编写程序。

2.上机调试通过。

3.按照金陵科技学院实验报告格式,撰写各实验报告。

实验内容:(1)编写一个函数print_all_data,该函数的作用是逐个输出顺序表中所有数据元素的值。

编写主函数,从键盘输入顺序表,调用函数print_all_data,测试结果。

(2)编写顺序表定位操作函数locata,该函数的作用是在顺序表中查找是否存在数据元素的值与变量x的值相等。

如果存在满足条件的数据元素,则返回顺序表中和x值相等的第1个数据元素在表中的下标;如果不存在,则返回-1。

编写主函数,从键盘输入顺序表,以及变量x的值,调用函数locate,测试结果。

(3)编写一个函数insert,该函数的作用是在递增有序的顺序表中插入一个新结点x,要求保持顺序表的有序性,输出插入前后顺序表状态。

编写主函数,从键盘输入顺序表以及变量x的值,调用函数insert,测试结果。

(4)编写一个函数delete,该函数的作用是删除顺序表中所有等于X的数据元素。

若顺序表中没有满足条件的数据元素,则输出合适的信息。

若有满足条件的数据元素,则输出删除前后顺序表状态。

编写主函数,从键盘输入顺序表以及变量x的值,调用函数delete,测试结果。

五、讨论、思考题1、如何在排列有序的顺序表中插入新元素,而保证顺序表的有序性?2、如何在排列有序的顺序表中删除某元素,而保证顺序表的有序性?实验2 单链表一、实验目的(1)掌握单链表的逻辑结构、存储结构及描述方式。

综合实践1(数据结构与算法分析)指导书

综合实践1(数据结构与算法分析)指导书

综合实践1(数据结构与算法分析)指导书一、目的和要求数据结构与算法分析综合实践不仅是数据结构与算法分析课程的实践教学环节,而且是一门综合性实验项目。

通过这个实践环节,培养学生综合运用数据结构与算法分析基本知识和程序设计基本知识,解决实际问题,提高程序设计与调试程序的能力。

本综合实践的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。

具体要求如下:1.学生通过实践掌握线性表、树、图等数据结构的存储结构及算法实现;2.培养利用数据结构知识和基本算法设计方法解决实际问题的能力;3.初步具备查阅资料、分析设计、上机实现和书写科技报告的能力;4.掌握程序测试和调试技术。

二、综合实践的内容及时间安排综合实践要求独立完成,题目自选(参考题目见附录,也可自拟),但需要老师确认,一人一题,要求有界面进行功能的选择,只能用文件存储数据和处理数据不能使用数据库。

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

综合实践设计报告内容如下:1、问题描述与分析在该部分先叙述要解决的问题,并给出解决问题的每个模块的功能要求。

2、数据结构设计和基本算法设计方法的选择为完成题目所选择的数据逻辑结构、存储结构及相应算法,说明原因和合理性(主要的成绩考核项,这项内容如果没有,成绩为不合格)。

3、软件结构设计在此说明软件的构架,模块之间的关系。

4、算法设计各个算法的流程图或类C语言描述的算法,算法实现的源程序以及算法分析。

源程序要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

5、调试分析选择测试数据,测试输出的结果,时间复杂度和空间复杂度的分析。

6、总结1)综合实践过程的收获;2)遇到问题以及解决问题的思路和方法;3)程序调试能力的思考;4)在综合实践设计过程中对《数据结构与算法分析》课程的认识等内容。

三、基本要求1、参加综合实践的学生要珍惜机会、勤奋工作、勇于创新、勇于探索、勇于实践,虚心向指导教师请教,向同学学习,独立完成设计任务。

数据结构实验指导书(新版)

数据结构实验指导书(新版)

《数据结构与算法》实验指导书实验及学时数分配几点要求:一、上机前:认真预习相关实验内容,提前编写算法程序,上机时检查(未提前编写程序者,扣除平时成绩中实验相关分数)。

二、上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调试过程中的问题、解决方法以及运行结果。

上机时签到;下机时验收签字。

三、下机后:按要求完成实验报告,并及时提交(实验后1周内)。

实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素。

1、通过键盘读取元素建立线性表;(从键盘接受元素个数n以及n个整形数;按一定格式显示所建立的线性表)2、指定一个元素,在此元素之前插入一个新元素;(从键盘接受插入位置i,和要插入的元素值;实现插入;显示插入后的线性表)3、指定一个元素,删除此元素。

(从键盘接受删除元素位置i,实现删除;显示删除后的线性表)二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素。

《数据结构与算法实验》实验指导

《数据结构与算法实验》实验指导

湖北汽车工业学院实验报告班号序号姓名课程名称数据结构与算法实验第 1 号实验完成日期年月日午实验一线性表操作一、实验目的1.掌握用 C语言调试程序的基本方法。

2. 掌握结构体类型的基本用法。

3.掌握线性表的基本运算,包括顺序表和链表的基本操作,如插入、删除等。

二、实验内容1.利用顺序表完成一个班级的一个学期的所有课程的管理:能够增加、删除、修改学生的成绩记录。

2.建立一个单链表,同时对该链表实现指定位置的插入、删除操作。

三、实验操作(在空白处填上合适的代码)(一)利用顺序表完成一个班级学生课程成绩的简单管理1、预定义以及顺序表结构类型的定义(1)#define ListSize //根据需要自己设定一个班级能够容纳的最大学生数(2)typedef struct Stu{int num; //学生的学号char name[10]; //学生的姓名float wuli; //物理成绩float shuxue; //数学成绩float yingyu; //英语成绩}STUDENT; //存放单个学生信息的结构体类型typedef struct List{stu[ListSize]; //存放学生的数组定义,静态分配空间int length; //记录班级实际学生个数}LIST; //存放班级学生信息的顺序表类型2、建立班级的学生信息void listcreate(LIST *Li,int m) //m为该班级的实际人数{int i;Li->length=0;for(i=0;i<m;i++) //输入m个学生的所有信息{printf("please input the %dth student's information:\n",i+1);printf("num=");scanf("%d", ); //输入第i个学生的学号printf("name=");scanf("%s", ); //输入第i个学生的姓名printf("wuli=");scanf("%f", ); //输入第i个学生的物理成绩printf("shuxue=");scanf("%f", ); //输入第i个学生的数学成绩printf("yingyu=");scanf("%f", ); //输入第i个学生的英语成绩Li->length++; //学生人数加1}}3、插入一个学生信息int listinsert(LIST *Li,int i) //将学生插入到班级Li的第i个位置。

数据结构与算法设计实验指导书

数据结构与算法设计实验指导书

数据结构与算法设计实验指导书实验1顺序表的操作一、实验目的通过对线性表的一些基本的操作和具体的函数实现,深入理解线性表的逻辑结构特性;了解并掌握线性表的顺序存储结构的描述方法与顺序表的基本操作(建立、插入)的实现算法及各函数间的调用关系;熟练掌握对程序的输入、编辑、调试和运行过程。

二、实验内容程序编程类题目:顺序表的操作:实现顺序表的建立、插入等。

题目:设线性表中的数据元素是按值非递减有序排列的,试以顺序存储结构,编写一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。

解:本题的算法思想是:先找到适当的位置,然后后移元素空出一个位置,再将 x 插入,并返回向量的新长度三、实验步骤1.问题理解和分析充分地分析和理解问题本身,弄清要求做什么。

2.上机前程序静态检查静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解程序而深入全面地理解程序逻辑。

3.程序调试和运行用多组不同的数据进行测试,记录测试数据和运行输出及结果4.完成实验报告按实验报告的要求完成书写工作。

实验2单链表的操作一、实验目的通过对单链表的一些基本的操作和具体的函数实现,深入理解线性表的逻辑结构特性;了解并掌握单链表的存储结构的描述方法与单链表的基本操作(建立、插入)的实现算法及各函数间的调用关系。

二、实验内容程序编程类题目:单链表的操作:实现单链表的建立;插入等。

题目:设线性表中的数据元素是按值非递减有序排列的,试以链式存储结构,编写一算法,将x插入到线性表的适当位置上,以保持线性表的有序性。

解:本题算法的思想是先建立一个待插入的结点,然后依次与链表中的各结点的数据域比较大小,找到插入该结点的位置,最后插入该结点。

三、实验步骤1.问题理解和分析充分地分析和理解问题本身,弄清要求做什么。

2.上机前程序静态检查静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解程序而深入全面地理解程序逻辑。

数据结构与算法实验指导书(计科1021)

数据结构与算法实验指导书(计科1021)

《数据结构和算法》实验指导书实验课程编号:07ZB101109 实验室名称:多媒体技术实验室系(院):数计学院实验室地点:N5-402实验课学时:36实验类别:专业课适用专业:计算机科学和技术是否独立设课:是执笔人:李文新审批人:一、实验课程教学目的和要求《数据结构和算法》是一门实践性很强的课程,光靠读书和做习题是不能提高实践能力的。

《数据结构和算法》的实验和程序设计语言课程中的实验不同,后者更多的强调语言方面的功能实现,而前者更接近实际,需要同学们自己分析问题,设计模型和算法,再上机调试完成。

《数据结构和算法》的实验的目的主要有两个:1)深化理解书本上的理论知识,将书本的知识变“活”(为已掌握,为已活用);2)理论和实践相结合,学会将相关的数据结构和算法使用于解决实际问题,培养数据结构的使用能力和软件工程所需要的实践能力。

《数据结构和算法》的实验类型1)验证性实验—主要是验证教材中已有的数据结构和算法。

2)设计性实验—针对具体问题,使用某一个知识点,自己设计数据结构和算法,培养对数据结构的简单运用能力。

3)综合性实验—针对具体问题,使用某几个知识点,自己设计数据结构和算法,培养对数据结构的综合运用能力。

《数据结构和算法》的实验安排项目实验题目学时说明一二结构体的运用结构体和指针的运用顺序表的保序插入操作222设计设计设计三链表的保序插入操作 2 设计四循环单链表的插入和删除 2 设计五栈和队的操作 2 验证六栈和队的的使用 2 设计七对称矩阵的压缩存储 2 验证八压缩矩阵的使用 2 设计九二叉树的操作 2 验证十二叉树的使用 2 设计十一二叉树的使用 2 设计十二图的操作 2 验证十三图的使用 2 设计十四图的使用 2 设计十五查找操作 2 验证十六查找使用 2 设计十七排序操作 2 验证十八排序使用 2 设计《数据结构和算法》实验的一般步骤1)需求分析:要对简单的问题描述进行详细的分析,充分理解问题,明确问题要求做什么,有什么数据,边界条件……。

《数据结构与算法》实验指导书16

《数据结构与算法》实验指导书16

《算法与数据结构》实验指导书.目录第一部分算法与数据结构课程实验概述 (1)一.实验目的 (1)二.实验要求 (1)2.1实验步骤 (1)2.2实验报告格式 (2)第二部分上机实验内容 (3)实验一迷宫问题 (3)实验二锦标赛问题 (4)实验三 Kruskal算法的设计 (6)实验四哈夫曼编码 (7)实验五树和二叉树 (8)实验六查找和排序 (10)附:实验(设计)报告封面 (11)附:实验(设计)报告参考格式 (11)其中实验一、实验二选择其中一题完成,实验三、实验四选择其中一题完成。

第一部分算法与数据结构课程实验概述一.实验目的《算法与数据结构》是计算机专业的主干课程和必修课程之一,其目的是让大家学习、分析和研究数据对象特征,掌握数据组织方法和计算机的表示方法,以便选择合适的数据逻辑结构和存储结构,设计相应的运算操作,把现实世界中的问题转化为计算机内部的表示与处理的方法,要求掌握算法的时间、空间复杂度分析基本技术,培养良好的程序设计风格,掌握进行复杂程序设计的技能。

在计算机科学领域,尤其是在系统软件和应用软件的设计和应用中要用到各种数据结构,因此,掌握数据结构对提高软件设计和程序编制水平有很大的帮助。

二.实验要求2.1实验步骤设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。

因此必须严格执行良好的实验步骤规范(包括上机操作规范)。

本课程实验的基本步骤是:2.1.1问题分析充分地分析和理解问题本身,明确问题要求做什么。

对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。

例如;输入、输出数据的类型、值的范围以及形式等。

同时为调试程序准备好测试数据,包含合法的输入数据和非法形式输入的数据。

2.1.2设计和编码设计即是对问题描述中涉及的操作对象定义相应的数据类型,定义主程序模块和各抽象数据类型;定义相应的存储结构并写出各过程和函数的伪码算法。

数据结构与算法实验指导书

数据结构与算法实验指导书

《数据结构与算法》实验指导书基本要求1.学生必须按时到实验室做实验,不得迟到早退,未经老师批准不得中途离开。

凡迟到者,应给予批评并作适当扣分。

实验课迟到20分钟以上及无故缺席者视为旷课,旷课者不予补做实验,本次实验以零分计。

学生因病或特殊情况不能按时到实验室做实验时,应办理正常请假手续。

请病假必须有医生签字的病假条,请事假必须有班主任签字的事假条。

不符合请假手续的,以旷课论处。

请假的学生由指导教师安排补做实验。

对于未做实验数达三分之一以上(含三分之一)的学生,实验课程按0分计。

2.学生在每次实验课之前,应仔细阅读实验教材,查阅相关的资料,写出预习报告。

预习报告的具体容包括:实验容、实验目的、实验原理图、实验步骤、实验数据记录表格等。

实验课前由任课教师检查预习报告,未写预习报告者不予做实验。

3.做实验前,了解设备的原理和正确使用方法。

在没有弄懂仪器设备的使用方法前,不得贸然使用,否则因使用不当造成仪器设备损坏的,根据民族学院《仪器设备损坏丢失处理暂行办法》规定进行处理。

实验室设备在实验过程中不准任意搬动和调换,非本次实验所用仪器设备,未经指导教师允许不得动用。

4.要求每位学生在实验过程中,要具有严谨的学习态度、认真、踏实、一丝不苟的科学作风。

实验过程中学生按照预习的容进行实验,且重视实验的调试过程,学会如何根据实验现象判断问题所在。

坚持每次实验都要亲自动手,不可“坐车”,每个实验每个学生都要独立完成,不允许抄袭,无特殊原因,中途不得退出实验,否则本次实验无效。

5.实验中若接线、改接、拆线都必须在切断电源的情况下进行,线路连接完毕再送电。

实验中,特别是设备刚投入运行时,要随时注意仪器设备的运行情况,如发现有过热、异味、冒烟、火花等,应立即断电,并请指导老师检查、处理。

6.实验过程中,如出现事故,就马上拉开电源开关,然后找指导教师和实验技术人员,如实反映事故情况,并分析原因和处理事故。

如有损坏仪表和设备时,应马上提出,按有关规定处理。

《数据结构与算法》实验指导书

《数据结构与算法》实验指导书

《数据结构与算法》实验指导书郁松软件学院第一部分:《数据结构》实验大纲一、数据结构实验的地位与作用《数据结构》是计算机、信息管理和电子商务专业一门重要的专业技术基础课程,是计算机、信息管理和电子商务专业的一门关键性课程。

本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了一些性能分析和比较,内容非常丰富。

本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。

《数据结构》课程内容丰富,学习量大,给学习带来一定的困难;所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度;隐含在各部分的技术和方法丰富,也是学习的重点和难点。

根据《数据结构》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。

通过实验实践内容的训练,突出学生程序思维训练和动手上机调试程序的能力,目的是提高学生组织数据及编写大型程序的能力二、数据结构实验的目的使学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在总是分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。

实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。

不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。

实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。

为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。

数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。

数据结构与算法课程实习手册

数据结构与算法课程实习手册

数据结构与算法课程实习手册数据结构与算法课程实习讲义2011-2012学年第二学期林士玮、闫季鸿计算机与信息学院电子商务系2012.05目录数据结构与算法课程实习要求与内容 (1)第一章线性表功能程序组 (3)1.静态线性表功能程序组的编制与测试 (3)2.动态线性表功能程序组的编制与测试 (7)第二章队列功能程序组 (11)第三章栈功能程序组 (14)第四章二叉树的功能程序组 (17)第五章线性表、栈和队列的应用 (21)1.线性表的应用----排序实现、航班信息的查询与检索 (21)2.栈与递归----猴子吃桃问题、汉诺塔问题 (24)3.栈的应用实例----括号匹配、数制转换、表达式求值等 (25)4.队列的应用实例----舞伴问题 (27)5.栈和队列的综合应用 (28)数据结构与算法课程实习要求与内容一、课程基本要求(一)能较熟练地编写有关线性表、栈、队列和二叉树等基本功能程序。

(二)能运用线性表、队列、栈等基本功能程序,设计并实现简单的应用程序。

(三)掌握程序调试的一般方法。

二、课程内容(一)基本算法训练1.静态线性表功能程序组的编制与测试建立、输出、插入、查找、删除、求长度等2.动态链表功能程序组的编制与测试头插法、尾插法建立有头节点和无头节点的链表链表输出、插入、查找、删除、求长度等3.栈功能程序组的编制与测试;初始化、入栈、出栈、判空等4.队列功能程序组的编制与测试;初始化、入队、出队、判空等5.二叉树功能程序组的编制与测试用先序法构造二叉树实现对二叉树的广义表和凹入表表示法实现对二叉树的前序、中序、后序遍历求出二叉树的节点总数和叶子总数交换二叉树的左右子树二叉排序树生成、查找、删除结点(适用各种位置的结点)(选做)生成赫夫曼树(选做)重点:通过基本算法训练,加深对《数据结构与算法》中基本算法的理解,提高编程能力。

难点:动态地址分配与指针操作。

(二)线性表、栈和队列的应用1.线性表的应用排序实现a)直接插入b)二分插入c)冒泡排序d)快速排序e)直接选择排序f)希尔排序(选做)g)根堆排序(选做)h)归并排序(选做)航班信息的查询与检索(选做)2.栈与递归猴子吃桃问题汉诺塔问题(选做)3.栈的应用实例括号匹配数制转换表达式求值(选做)4.队列的应用实例舞伴问题5.提高应用图书馆借书、还书、查询与入库(选做)《停车场管理》应用程序(选做)重点:提供完整的设计文档,文档应包含需求分析、概要设计、调试分析、用户手册以及源程序等内容。

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

数据结构与算法实习指导书上海交通大学电院数据结构大平台课程组目录1.关于实习步骤的要求和建议2.上机实习实习一线性结构实习二树和二叉树实习三查找实习四图3.实习报告样例1.关于实习步骤的要求和建议从以往的教学事先实习的经验来看,在初学阶段执行严格的实习步骤规范(包括上机操作规范),机时利用率会大大提高,有助于养成良好的程序编制风格,培养严谨、科学、高效的工作方式。

在以往的教学实践中,经常发现很多学生抱怨说,化了两个小时才找出一个错误,甚至一无所获。

他们不明白造成这种情况的原因,正是他们自己。

有的学生不屑于按实习步骤规范去做,甚至对于实习步骤的要求和建议看都不看一遍,认为那是浪费时间,这是及其害的。

实习步骤规范不但可以培养科学化的工作作风,而且还能有效地避免错误。

具体的步骤机规范如下:1.问题分析与系统的结构设计:充分地分析和理解问题本身,弄清要求作什么,限制条件是什么。

按照以数据结构为中心的原则划分模块,即定义数据结构及其在这些结构之上的操作,使得对数据结构的存取通过这些操作加以实现。

在这个过程中,要综合考虑系统功能。

要考虑系统结构清晰、合理、简单并且易于调试。

最后写出每个子程序(过程或函数)的规格说明,列出它们之间的调用关系,可以使用调用关系图表示则更加清晰,这样便完成了系统结构设计。

2.详细设计和编码详细设计的目的是对子程序(过程或函数)的进一步求精。

用IF 、WHILE和赋值语句等,以及自然语言写出算法的框架。

利用自然语言的目的是避免陷入细节。

在编码时,可以对详细设计的结果进一步求精,用高级语言表示出来。

程序的每一行最好不超过60 个字符。

每个子程序(或过程、函数)通常不要太长,以40 行为宜。

子程序(或过程、函数)包含的程序行数太多,易于造成理解的困难。

控制IF 、WHILE 等语句的连续嵌套的深度应加以控制。

程序的目的性必须明确。

对每一段程序完成的作用,除非常明显的除外(如:x = x + 1; 注释为 x 加 1,没有什么意义),都应加以注释。

这会对程序的调试提供很多方便。

另外,根据情况可以设立若干调试点,即输出若干信息,用于验证和你的设想是否一致。

另外,对于输入输出语句,必须对它们的作用加以说明。

否则,在调试程序时,无法了解系统需要输入什么,系统输出的又是什么。

程序的书写,必须按照一定的规范,如保留字小写时涂黑等等。

3.上机准备和静态检查上机准备:●高级语言文本●熟悉机器的用户手册,熟悉常用的命令。

●准备调试的工具,考虑调试方案。

如果机器上没有现成的调试工具可供利用,可以自己先设计一些以供使用。

●静态检查自己用一组数据手动执行程序;或同同学一起阅读自己的程序,以全面地了解该程序的逻辑。

4.上机调试程序自底向上,先调试底层模块,再调试上层模块。

最后,整个程序进行联调。

调试正确后将源程序和运行结果加以列印输出。

5.实习报告的整理●需求及规格说明问题描述,求解的问题是什么。

●设计:设计思想:存储结构、主要的算法思想。

设计表示:子程序(过程或函数)的规格说明,通过调用关系图表示它们之间的调用关系。

实现注释:详细设计表示:主要算法的框架。

●用户手册:使用说明。

●调试报告:问题是如何解决的,讨论与分析、改进设想、经验与体会、时空复杂度等。

●附录源程序清单和结果:源程序必须有注释,以及必要的测试数据和运行结果数据。

提倡用英文描述。

●实验报告要求:在程序开发过程中,逐步形成各种必要的文档及资料。

可以写在实验报告纸上,或以电子文档的形式进行书写。

2.上机实习●以下的实习题目配合课程的进度,请同学们务必自己完成。

为了锻炼自己的应用各种不同的数据结构的能力,尽可能的多作一些题目是非常必要的。

在完成各种不同题目的过程中,对各种算法的时、空复杂性的分析,将帮助您在更高的角度解决各种应用问题。

●为了减轻同学的负担,我们对同学的实习报告进行了精简。

本实习报告中的题目分以下几种类型:1、实习题:必须按照实习报告的规范完成。

每个实习的第一题都是实习题,必须编写详细的实习报告。

实习报告的书写方法,请参阅本指导书的第 3 部分:实习报告的样例。

2、作业题:同样必须完成。

只需交代清楚题目的解法,辅以求解程序和注释,使得别人能够看懂你的算法和程序即可。

不必象实习题那样书写完整的实习报告。

3、选作题:鼓励同学选作的题目,尤其是学有余力的同学。

以下为各次实习作业:实习一线性结构1、(实习题)请写出计算两个以单链接表表示的多项式相乘的程序。

2、(作业题)已知两个单链表 A 和 B 分别表示两个集合,其元素递增排列。

请编写程序求集合 A 和 B 的交集 C = A B,要求单链表C按其元素递增排列,并利用原表(即表A和表B)的结点空间存放表C。

3、(作业题)假设有二个栈共同使用一块顺序存储的空间,为简单起见可设为共同使用数组 int a〔200〕。

它们的栈底分别设在数组的两端,而栈顶指针在进行插入操作时,向中间方向移动。

请给出进出栈的程序。

4、(选作题)将具有头结点的单链表的所有指针全部进行倒向。

要求使用的额外空间只能为 O(1),时间代价只能为O(n),其中 n 为结点个数。

注意:如下图1所示的单链表,倒向之后将如图2所示。

图 1、倒向之前的单链表图 2、倒向之后的单链表实习二树和二叉树1、(实习题)请编写一个程序,确定二叉树的特征。

如:每个节点的层次,从根到该节点的枝长(路径长度),子孙的个数及祖先的个数。

每个节点在前序、中序、后序中的访问的序号。

2、(作业题)设二叉树的结点的数据场之值仅为一大写英文字母。

其前序和中序的遍历结果(打印结点的数据场之值)分别保存在字符串数组preorder[N] 及 inorder[N]之中,其中 N 未常数。

请设计程序以标准形式形式存储保存该二叉树。

3、(作业题)设树的根结点的层号为1,而其他各层上的结点的层号比其父结点的层号大 1。

另外设该树中的结点的数据场之值为正整数。

这样数对( I k,W k)就表示了该树中的结点的层号和其数据场之值。

从键盘上依次输入 m 个数对,如:( I1,W1),( I2,W2),……,( I m,W m);这些数对是按照结点的前序序列给出的。

注意这是用层号+前序表示一棵树的方法。

如:(1,A),(2,B ), (2,C ), (3,E ), (4,G ), (3,F ), (2,D ), (3,X ), (3,Y ), (3,Z );它所表示的树如图 3 所示。

请编写程序,以标准形式存储这棵树。

为了简单起见,可设这棵树上的结点的度数最大为 3,结点的存储形式为:其中:data 域为结点的数据场,parent 域为结点的父亲结点的地址,son1,son2,son3分别给出结点的三个儿子的地址。

图 3 、 一课三次树4、(选作题) 用标准形式给出了一棵度为三的树(每个结点包含数据场、指向儿子节点的指针场,可参阅上题 )。

设该三次树的数据场的值为一个字符,请编写一个程序,以树的两维形式表示打印节点的值。

注意:图 3 即为树的二维表示形式。

在实现时,为了方便可用打点的方法代替直线。

实习三 查找1、(实习题) 从键盘上输 入一串正整数, 最后输入-1作为输入结束的标志。

如输入的序列为:2,5,7,23,48,96,……,-1。

请以这些正整数的值作为二叉排序树中的结点的数据场之值,建立一棵二叉排序树。

注意:请采用动态存储方法保存这棵二叉排序树,事先并未知道该二叉排序树中的结点的个数。

2、 (作业题) 已知一棵排序二叉树,树中结点的形式为:其中,data 给出结点的数据场,info 给出本结点的左子树中的结点总数,left和 right 分别给出本结点的左儿子和右儿子的地址。

数据场data 和info 的类型皆为 int。

又已知该二叉排序树的根结点的地址为 root。

请设计二个函数,分别实现下述功能:1.按递增序找出该二叉排序树中的第 i 个小的结点。

2.插入数据场之值为 x 的结点,并仍应保持该二叉排序树的性质不变。

3、(作业题)已知一棵二叉排序树,其根结点的地址为 root。

请编写一个程序,构造出一棵具有相同结点的完全二叉树,且它同样是二叉排序树。

4、(选作题)在平衡的排序二叉树的中,试编写删除具有给定关键字的结点的函数。

实习四图1、(实习题)以数偶的形式依次从键盘上输入一串数据。

如:(A,B)为从起始结点(其数据场之值为一大写的英文字母 A ),到终止结点(其数据场之值为一大写的英文字母 B)的无向边。

最后输入(Z,Z)表示输入结束。

请用无向图的邻接多重表存储该无向图,并注意一定要使用动态存储结构。

2、(作业题)已知一以动态存储结构形式存储的,以邻接多重表表示的无向图。

请用KRUSKAL算法求出它的最小代价生成树。

3、(作业题)已知一以邻接矩阵形式存储的 AOV 图。

请求出它的所有的合理的拓扑排序的序列。

4 、(选作题)已知一以动态存储结构形式存储的,以邻接表表示的有向图。

请求出它的强连通分量。

3、实习报告样例一、实习题:约瑟夫(Josephus)问题:设有n 个人围成一个圆圈,任意给定一个正整数m,从第一个人开始顺时针计数,计到第m个人,将其从圆圈中除去。

然后再从下一个人开始,周而复始,直到圆圈中只剩一个人为止,那么剩下的那个人就是赢家。

1.需求分析和说明分析约瑟夫问题:n个人围成圈,从第一个人开始,数到第m个人,删除并以下一个人开始进行第二轮操作,直到最后一个人作为优胜者。

例如n=6, m=3, 处理过程下图。

2.设计n个人围圈,形成线性关系;处理为逐个删除,故用链式结构合适;又人员围成圆圈,所以此链式结构采用循环方式较好;排号按照一个方向进行,故数据结构采用带头结点的单向循环链表。

假设人员以首次的编号命名,对每个人员采用编号和姓名加以描述。

存储结构:struct person { //定义人员信息,包括序号和姓名int no;char name[10];};//circlinklist.h单向循环链表类template <class ElemType> class CircLinkList {CircLinkListNode<ElemType> *head, *tail; //指向表头结头和尾结点CircLinkListNode<ElemType> *currPtr; //指向当前工作结点CircLinkListNode<ElemType> *prevPtr;//指向当前工作结点的前一结点int size; //表中元素的个数int position; //表中当前元素所在的元素序号(位置)public:CircLinkList ( );//构造函数~ CircLinkList ( ); //析构函数void Clear ( );//链表置空int Length ( ) const{return size;};//求链表长度bool IsEmpty ( ) const{return (size==0);};//判断链表是否空bool IsEnd ( ) const{return (currPtr=tail);};//当前结点是否是尾结点int CurrentPosition() const{return position;}; //返回当前结点的序号ElemType Data ( ) const; //返回当前指针所指的结点中的元素值void GoNext ( ); //将当前指针指向当前结点后面的一个结点void Reset(int pos);//将当前指针指向序号为pos的结点CircLinkListNode<ElemType> *Find ( ElemType e );//查找从当前结点起第一个元素值为e的结点//各种位置上的插入操作void InsertFront (const ElemType e );//在首结点位置上插入元素值为e的新结点void InsertTail (const ElemType e );//在尾结点之后插入元素值为e的新结点,使其成为新的尾结点void InsertAt (const ElemType e );//在当前结点位置上插入元素值为e的新结点,//原来的当前结点成为其后一个结点void InsertAfter (const ElemType e );//在当前结点之后插入元素值为e的新结点ElemType RemoveFront( ); //删除首结点,并返回其元素值ElemType RemoveAt( ); //删除当前结点,并返回其元素值};算法思想:声明一个person类型的单向循环链表。

相关文档
最新文档