《数据结构》实验指导书
数据结构实验-实验指导书
实验一线性表操作一、实验目的1熟悉并掌握线性表的逻辑结构、物理结构。
2熟悉并掌握顺序表的存储结构、基本操作和具体的函数定义。
3熟悉VC++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。
4熟悉VC++操作环境的使用以及多文件的输入、编辑、调试和运行的全过程。
二、实验要求1实验之前认真准备,编写好源程序。
2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。
3不断积累程序的调试方法。
三、实验内容基本题:1对元素类型为整型的顺序存储的线性表进行插入、删除和查找操作。
加强、提高题:2、编写一个求解Josephus问题的函数。
用整数序列1, 2, 3, ……, n表示顺序围坐在圆桌周围的人。
然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。
最后分析所完成算法的时间复杂度。
定义JosephusCircle类,其中含完成初始化、报数出圈成员函数、输出显示等方法。
(可以选做其中之一)加强题:(1)采用数组作为求解过程中使用的数据结构。
提高题:(2)采用循环链表作为求解过程中使用的数据结构。
运行时允许指定任意n、s、m数值,直至输入n = 0退出程序。
实验二栈、队列、递归应用一、实验目的1熟悉栈、队列这种特殊线性结构的特性2熟练掌握栈、队列在顺序存储结构和链表存储结构下的基本操作。
二、实验要求1实验之前认真准备,编写好源程序。
2实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。
3不断积累程序的调试方法。
三、实验内容基本题(必做):1分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。
2、假设以带头结点的循环链表表示队列,并且只设一个指针指向对尾结点,不设头指针,试设计相应的置队空、入队和出队的程序。
加强题:3设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx都是中心对称的字符串。
数据结构实验指导书
数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。
具体而言,实验的目的包括: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:顺序表基本操作一、实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。
3.掌握对多函数程序的输入、编辑、调试和运行过程。
二、实验要求1.预习C语言中结构体的定义与基本操作方法。
2.对顺序表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容:1.编写程序实现顺序表的下列基本操作:(1)初始化顺序表La。
(2)将La置为空表。
(3)销毁La。
(4)在La中插入一个新的元素。
(5)删除La中的某一元素。
(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。
(7)打印输出La中的元素值。
2.编写程序完成下面的操作:(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。
(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。
(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。
四、思考与提高假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A ∩B ?一、实验目的1.学会定义单链表的结点类型,实现对单链表的一些基本操作和具体的函数定义,了解并掌握单链表的类定义以及成员函数的定义与调用。
2.掌握单链表基本操作及两个有序表归并、单链表逆置等操作的实现。
二、实验要求1.预习C语言中结构体的定义与基本操作方法。
2.对单链表的每个基本操作用单独的函数实现。
3.编写完整程序完成下面的实验内容并上机运行。
4.整理并上交实验报告。
三、实验内容1.编写程序完成单链表的下列基本操作:(1)初始化单链表La。
(2)在La中插入一个新结点。
(3)删除La中的某一个结点。
(4)在La中查找某结点并返回其位置。
数据结构实验指导书new(完整版)
数据结构实验指导书实验一线性表的创建与应用一、实验目的1、掌握线性表的定义2、掌握线性表的基本操作:插入、删除、查找以及线性表合并等运算在链接存储结构上的运算。
二、实验内容1、阅读并运行本实验程序(有序顺序表实现)2、用单链表方式实现本程序相应功能(有序单链表)3、利用有序单链表实现一元多项式的加法的功能。
三、实验要求1、认真阅读和掌握本实验的参考程序(有序顺序表)。
2、上机运行该程序。
3、保存和打印出程序的运行结果,并结合程序进行分析。
4、按照有序顺序表功能,重新改写程序并运行,打印出文件清单和运行结果5、创建有序单链表时,要用头插法和尾插法同时实现。
6、实现一元多项式的加法的功能,并输出结果。
7、最好能将结果写入到文本文件中。
四、注意事项:1、实验学时:4学时2、实验完成一周内提交实验报告(实验报告本)3、实验结果要求抓图打印4、严禁抄袭五、实验附件程序(有序顺序表)Odsqlist.h文件:#define LIST_INIT_SIZE 8 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量#define OVERFLOW -2#define ERROR 0#define OK 1#define TRUE 1#define FALSE 0typedef int Status;typedef int ElemType;typedef struct {ElemType *elem; // 存储空间基址int length; // 当前长度int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)}SqList; // 俗称顺序表typedef SqList OdSqList; //有序顺序表Status InitList(OdSqList&); // 结构初始化void Destroy(OdSqList&); //销毁有序顺序表void ClearList(OdSqList&);//清空有序表Status ListEmpty(OdSqList);//判有序表为空int ListLength(OdSqList);//求表长int LocateElem(OdSqList,ElemType); // 查找void ListInsert(OdSqList&,ElemType); // 插入元素Status ListDelete(OdSqList&, int,ElemType& ); // 删除元素int ListDeletem(OdSqList&L, ElemType e); // 删除所有值为e的元素,返回删除的元素个数int ListDeletemn(OdSqList&, ElemType, ElemType ); // 删除所有值界于mink~maxk的元素,并返回删除的元素个数void ListTraverse(OdSqList);//遍历非递减有序线性表odsqlist.cpp文件:#include<stdio.h>#include<stdlib.h>#include "odsqlist.h"Status InitList( OdSqList& L ){// 构造一个空的线性表L.elem = (ElemType*) malloc (LIST_INIT_SIZE*sizeof(ElemType));if (!L.elem)exit(OVERFLOW);L.length = 0;L.listsize = LIST_INIT_SIZE;return OK;} // InitListvoid ListTraverse(OdSqList L){//遍历线性表int i;printf("listsize is %d.\n",L.listsize);printf("listlength is %d.\n",L.length);printf("the list is:(");for(i=1;i<=L.length;i++)printf("%d ",L.elem[i-1]);printf(")\n");}int LocateElem(OdSqList L, ElemType e){// 在顺序表中查询第一个满足判定条件的数据元素,若存在,则返回它的位序,否则返回 0int i;i = 1; // i 的初值为第 1 元素的位序ElemType *p;p = L.elem; // p 的初值为第 1 元素的存储位置while (i <= L.length && *p++!=e) ++i;if (i <= L.length) return i;else return 0;}void ListInsert(OdSqList &L, ElemType e) {// 在顺序表L中保序插入新的元素eElemType *newbase,*p,*q;if (L.length >= L.listsize) { // 当前存储空间已满,增加分配newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (ElemType));if (!newbase) exit(OVERFLOW);// 存储分配失败L.elem = newbase; // 新基址L.listsize += LISTINCREMENT; // 增加存储容量}q = &(L.elem[0]); // q 指示第1个元素位置for (p = &(L.elem[L.length-1]);p>=q&&*p>e; --p)*(p+1) = *p; // 插入位置及之后的元素右移*(p+1) = e; // 插入e++L.length; // 表长增1}Status ListDelete(OdSqList &L, int i, ElemType &e) {ElemType *p,*q;if ((i < 1) || (i > L.length)) return ERROR;// 删除位置不合法p = &(L.elem[i-1]); // p 为被删除元素的位置e = *p; // 被删除元素的值赋给 eq = L.elem+L.length-1; // 表尾元素的位置for (++p; p <= q; ++p) *(p-1) = *p;// 被删除元素之后的元素左移--L.length; // 表长减1return OK;}void Destroy(OdSqList& L){//销毁有序顺序表free(L.elem);}void ClearList(OdSqList& L){//清空有序表L.length=0;}Status ListEmpty(OdSqList L){//判有序表为空if(L.length==0)return TRUE;else return FALSE;}int ListLength(OdSqList L){//求表长return L.length;}int ListDeletem(OdSqList& L, ElemType e){// 删除所有值为e的元素,返回删除的元素个数ElemType *p,*q,*r;int i=0;//删除的元素个数p=&L.elem[0];//扫描指针for(q=&L.elem[L.length-1];*p<e&&p<=q;p++);if(p<=q&&*p==e){i++;for(r=p+1;*r==e&&r<=q;r++,i++);if(r<=q)for(;r<=q;r++,p++)*p=*r;}L.length-=i;return i;}int ListDeletemn(OdSqList& L, ElemType mink, ElemType maxk){// 删除所有值界于mink~maxk的元素,并返回删除的元素个数ElemType *p,*q,*r,temp;int i=0;if(maxk<mink){temp=maxk;maxk=mink;mink=temp;}p=&L.elem[0];for(q=&L.elem[L.length-1];*p<mink&&p<=q;p++);//p指针指向第1个大于等于mink的元素if(p<=q&&*p<=maxk){//若*p小于等于maxki++;for(r=p+1;*r<=maxk&&r<=q;r++,i++);//r指针指向第1个大于maxk的元素if(r<=q)for(;r<=q;r++,p++)*p=*r;}L.length-=i;return i;}app.cpp文件:#include<stdio.h>#include<stdlib.h>#include "odsqlist.h"void main(){OdSqList L;int k;char i;ElemType e,mink,maxk;printf("OdSqList is init……\n");i=InitList(L);ListTraverse(L);while(1){printf("\n\nplease select:\n");printf("1------insert\n");printf("2------traverse\n");printf("3------deletei\n");printf("4------deletek\n");printf("5------deletemink-maxk\n");printf("6------locate\n");printf("7------isempty\n");printf("8------length\n");printf("9------clearlist\n");printf("0------quit\n");scanf("%d",&k);switch(k){case 1:printf("please input e:");scanf("%d",&e);ListInsert(L,e);ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 2:ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 3:while(1){printf("please input delete i:");scanf("%d",&i);if(ListDelete(L,i,e)==ERROR)printf("delete positon is error!\n");else {printf("Deleted elem is %d\n",e);break;}}ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 4:printf("please input delete e:");scanf("%d",&e);ListTraverse(L);printf("%d elem is deleted.\n",ListDeletem(L,e));ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 5:printf("please input delete mink and maxk:");scanf("%d%d",&mink,&maxk);ListTraverse(L);printf("%d elem is deleted.\n",ListDeletemn(L,mink,maxk));ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 6:printf("please input locate e:");scanf("%d",&e);i=LocateElem(L,e);if(i==0)printf("locate Defaulted!\n");elseprintf("located no. is %d\n",i);ListTraverse(L);scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 7:if(ListEmpty(L))printf("the orderlist is empty!\n");elseprintf("the orderlist is not empty!\n");scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 8:printf("length is %d.\n",ListLength(L));scanf("%c",&i);printf("please press any key to continue……");scanf("%c",&i);break;case 9:ClearList(L);printf("the orderlist is empty!\n");scanf("%c",&i);print f("please press any key to continue……");scanf("%c",&i);break;case 0:Destroy(L);exit(1);break;}}}实验二栈(队列)的创建与应用一、实验目的1.掌握栈(队列)的基本操作:初始化栈(队列)、判栈(队列)为空、出栈(队列)、入栈(队列)等运算。
数据结构课程实验指导书
《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。
本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。
数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。
通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。
二、实验前的准备工作1.每个学生需配备一台计算机,操作系统需Windows2000/XP以上版本,软件需Visual C++6.0以上版本。
2.实验前要求学生按实验要求编写好相关实验程序,准备上机调试运行。
三、实验的步骤(一)建立一个文件夹,如“数据结构”,用来存放自己的所有实验程序,在该文件夹中建立子目录用来存放每个项目(一个子目录一个项目),如“顺序表”,项目中需要的所有文件都存在该文件夹中。
(二)新建一个项目文件1.双击Visual C++ 6.0快捷图标,进入Visual C++ 6.0集成开发环境;或者点击“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”进入Visual C++ 6.0集成开发环境。
2.单击“File”菜单,选择“New”命令3.创建一个项目文件并保存在项目所在文件夹中;3. 创建源程序文件并保存在项目所在文件夹中;4.输入源程序;5.单击“保存”按钮保存源程序。
《数据结构》实验指导书
《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。
同时, 通过本课程的上机实习, 使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。
2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。
4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。
在程序调试通过后, 打印输出程序清单和运行结果。
5.上机结束后, 总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
分析程序的优缺点、时空性能以及改进思想, 写出心得体会。
实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。
要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。
数据结构-实验指导书
《数据结构》实验指导书计算机专业实验中心编2020年7月25日目录《数据结构》上机实验内容和要求............................. 错误!未定义书签。
实验一、顺序表的实现及应用................................. 错误!未定义书签。
实验二、链表的实现及应用................................... 错误!未定义书签。
实验三、栈的实现及应用..................................... 错误!未定义书签。
实验四、队列的实现及应用................................... 错误!未定义书签。
实验五、二叉树操作及应用................................... 错误!未定义书签。
实验六、图的遍历操作及应用................................. 错误!未定义书签。
实验七、查找算法的实现..................................... 错误!未定义书签。
实验八、排序算法的实现..................................... 错误!未定义书签。
《数据结构》上机实验内容和要求通过上机实验加深对课程内容的理解,增加感性认识,提高程序设计、开发及调试能力。
本实验指导书适用于16学时《数据结构》实验课,实验项目具体内容如下:实验报告要求请按照实验教师要求,按时提交实验报告电子版文件。
实验报告格式可个性化定义,内容包括但不限于以下内容:1、题目、姓名、学号、班级(首页)2、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。
3、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。
数据结构实验指导书(本科正式)
《数据结构》实验指导书实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。
【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。
(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。
若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。
若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。
【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立线性表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。
二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立单链表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。
三、用C语言编程实现两个按递增顺序排列线性表的合并1、编程实现合并按递增顺序排列的两个顺序表算法;2、编程实现合并按递增顺序排列的两个单链表算法。
【思考问题】结合实验过程,回答下列问题:1、何时采用顺序表处理线性结构的问题为最佳选择;2、何时采用链表处理线性结构的问题为最佳选择。
【实验报告要求】1、根据对线性表的理解,如何创建顺序表和单链表;2、实现顺序表插入和删除操作的程序设计思路;3、实现链表插入和删除操作的程序设计思路;4、实现两表合并操作的程序设计思路;5、调试程序过程中遇到的问题及解决方案;6、本次实验的结论与体会。
《数据结构》实验指导书(新)
数据结构实验指导书实验一线性表[实验目的]1.了解顺序表的结构特点及有关概念,掌握顺序表建立、插入、删除的基本操作算法。
2.了解单链表的结构特点及有关概念,掌握单链表建立、插入、删除的基本操作算法。
[实验内容]1.顺序表的实践。
1)建立4个元素的顺序表list[]={2,3,4,5},实现顺序表建立的基本操作。
2)在list[]={2,3,4,5}的元素4和5之间插入一个元素9,实现顺序表插入的基本操作。
3)在list[]={2,3,4,9,5}中删除指定位置(i=3)上的元素9,实现顺序表的删除的基本操作。
2.单链表的实践。
1)建立一个包括头结点和3个结点的(4,2,1)的单链表,实现单链表建立的基本操作。
2)在已建好的单链表中的指定位置(x=2)插入一个结点3,实现单链表插入的基本操作。
3)在一个包括头结点和4个结点的(4,2,3,1)的单链表的指定位置删除一个结点,实现单链表删除的基本操作。
[实验要点及说明]线性表(linear list)是n(n≥0)个数据元素a1,a2,…a n组成的有限序列。
其中n 称为数据元素的个数或线性表的长度,当n=0时称为空表,n>0时称为非空表。
通常将非空的线性表记为(a1,a2,…,a n),其中的数据元素a i(1≤i≤n)是一个抽象的符号,a i是第i个数据元素,称i为数据元素a i在线性表中的位置。
其具体含义在不同情况下是不同的,即它的数据类型可以根据具体情况而定,本书中,我们将它的类型设定为elemtype,表示某一种具体的已知数据类型。
顺序表也称为线性表的顺序存储结构。
其存储方式为:在内存中用一组地址连续的存储单元依次存储线性表的数据元素,但该连续存储空间的大小要大于或等于顺序表的长度。
一般让线性表中第一个元素存放在连续存储空间第一个位置,第二个元素紧跟着第一个之后,其余依此类推。
可定义顺序表如下:#define maxnumelemtype list[maxnum];int num=-1;线性表的链式存贮结构,也称为链表。
数据结构 实验指导手册
数学与计算机科学学院计算机科学与技术专业
《数据结构》课程实验
指导手册
目录
实验1:顺序表的定义及其相关操作算法的实现 (1)
实验2:链表的定义及其相关操作算法的实现 (2)
实验3:栈和队列的定义及其基本操作算法的实现 (4)
实验4:串模式匹配算法的设计与实现 (5)
实验5:二叉树的创建、遍历及其它基本操作的实现 (6)
实验6:哈夫曼树及哈夫曼编码的算法实现 (7)
实验7:查找算法的实现(1) (8)
实验8:查找算法的实现(2) (9)
实验9:几个主要排序算法的实现与比较 (10)
实验1:顺序表的定义及其相关操作算法的实现
实验2:链表的定义及其相关操作算法的实现
实验3:栈和队列的定义及其基本操作算法的实现
实验4:串模式匹配算法的设计与实现
实验5:二叉树的创建、遍历及其它基本操作的实现
实验6:哈夫曼树及哈夫曼编码的算法实现
实验7:查找算法的实现(1)
实验8:查找算法的实现(2)
实验9:几个主要排序算法的实现与比较。
《数据结构》实验指导书(新教学计划)
数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)实验题目 (3)实验一单链表的插入、删除 (3)[实验目的] (3)[实验内容] (3)[测试数据] (3)[实现提示] (3)实验二栈及其应用 (5)[实验目的] (5)[实验内容] (5)[测试数据] (5)实验三二叉树的递归算法 (5)[实验目的] (5)[实验内容] (6)[测试数据] (6)实验四查找及排序算法的应用 (7)[实验目的] (7)[实验内容] (7)[测试数据] (7)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。
本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。
本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。
由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。
由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。
为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。
数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。
在掌握基本算法的基础上,掌握分析、解决实际问题的能力。
通过实验实践内容的训练,突出构造性思维训练的特征, 提高学生组织数据及编写大型程序的能力。
数据结构实验指导书
数据结构实验指导书一、实验目的本实验旨在通过实践操作,加深对数据结构的理解,掌握数据结构的基本操作和算法设计。
二、实验内容1. 实验环境搭建:a. 安装编程环境,如C++编译器或Java开发环境。
b. 配置相关的开发工具和库文件。
2. 实验一:线性表的实现与应用a. 实现线性表的基本操作,包括初始化、插入、删除、查找等。
b. 实现线性表的应用,如实现一个简单的通讯录管理系统。
3. 实验二:栈和队列的实现与应用a. 实现栈的基本操作,包括入栈、出栈、判空等。
b. 实现队列的基本操作,包括入队、出队、判空等。
c. 实现栈和队列的应用,如实现一个简单的表达式计算器。
4. 实验三:二叉树的实现与应用a. 实现二叉树的基本操作,包括创建、插入、删除、遍历等。
b. 实现二叉树的应用,如实现一个简单的文件系统。
5. 实验四:图的实现与应用a. 实现图的基本操作,包括创建、插入节点、插入边、遍历等。
b. 实现图的应用,如实现一个简单的社交网络系统。
三、实验步骤1. 实验环境搭建:a. 下载并安装编程环境,如Dev-C++或Eclipse。
b. 配置相关的开发工具和库文件,确保能够正常编译和运行程序。
2. 实验一:线性表的实现与应用a. 设计线性表的数据结构,包括元素类型和相关操作。
b. 实现线性表的初始化、插入、删除和查找等基本操作。
c. 设计并实现一个简单的通讯录管理系统,包括添加联系人、删除联系人和查找联系人等功能。
3. 实验二:栈和队列的实现与应用a. 设计栈和队列的数据结构,包括元素类型和相关操作。
b. 实现栈的入栈、出栈和判空等基本操作。
c. 实现队列的入队、出队和判空等基本操作。
d. 设计并实现一个简单的表达式计算器,支持基本的四则运算。
4. 实验三:二叉树的实现与应用a. 设计二叉树的数据结构,包括节点类型和相关操作。
b. 实现二叉树的创建、插入、删除和遍历等基本操作。
c. 设计并实现一个简单的文件系统,支持文件和文件夹的创建、删除和查找等功能。
数据结构实验指导书
实验一线性表的基本操作一、实验目的线性表是最简单的一种线性结构,它有两种存储方法:顺序存储和链式存储。
实验目的如下:1、会定义线性表的顺序存储结构和链式存储结构。
2、熟悉顺序表和链表的一些基本操作和应用。
3、加深对线性表的理解,逐步培养解决实际问题的编程能力。
二、实验环境运行C或VC++的微机。
三、实验内容1.基本操作:●初始化线性表●向线性表指定位置插入元素●删除指定元素值的线性表记录●删除指定位置的线性表记录●查找线性表中的元素●输出线性表元素2.提高题目(1)已知线性表LA的数据元素(n个,n为偶数),现要求将LA 拆开成两个新的线性表LB,LC。
要求LB中的数据元素为LA中的奇数位序的数据元素(a1, a3, …, a n-1),LC中的数据元素为LA中的偶数位序的数据元素(a2, a4, …, a n)。
2. 已知线性表LA的数据元素(n个),现要求将LA的数据元素复制到另一个线性表LB中。
3. 设有一个线性表采用顺序存储结构,表中的数据元素值为正整数(n个)。
设在O(n) 时间内,将线性表分成两为两部分,其中左半部分每个元素都小于原表的第一个元素,而右半部分则相反。
4. 将一个头结点指针为a的单链表A分解成两个单链表A和B,其头结点指针分别为a和b,使得A链表中含有原链表中序号为奇数的元素,而B链表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。
5. 约瑟夫问题:设编号为1,2,…,n的n(n>0)个人按顺时针方向围坐一圈,每人持有一正整数密码。
开始时任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到m 时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新从1报数。
如此下去,直到所有人全部出列为止。
令n最大值取30。
要求设计一个程序模拟此过程,求出出列编号序列(采用循环单链表结构)。
四、实验报告所有的基础操作和5到题目都需要课堂检查,直接打分。
最新数据结构实验指导书
《数据结构》实验指导书(适用于计算机科学与技术、网络工程、软件工程专业)计算机科学与技术学院软件教研室2006-8目录前言 (3)实验一、单链表的基本操作 (4)实验二、二叉树的遍历 (6)实验三、折半查找和二叉排序树 (8)实验四、内部排序 (10)前言《数据结构》是计算机科学与技术、网络工程等专业的专业基础必修课,主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法进行分析和评价。
本课程的学习应使学生深刻地理解数据结构的逻辑结构和物理结构的基本概念及有关算法,培养学生基本的、良好的程序设计技能以及针对具体问题,选择适当的数据结构,设计出有效算法的能力。
《数据结构》是一门理论和实践相结合的课程,它在整个计算机专业教学体系中处于举足轻重的地位,是计算机科学的算法理论基础和软件设计的技术基础,其上机实验的目的主要是编程实现数据结构各章的主要算法,训练学生实际动手进行程序设计和程序调试的能力,加深对数据结构相关概念和算法的理解。
实验一、单链表的基本操作一、实验目的1、掌握线性链表的操作特点,即指针是逻辑关系的映像。
2、掌握动态产生单链表的方法。
3、熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。
4、熟练掌握单链表的取元素操作二、实验内容1、定义单链表类型并动态创建单链表2、实现线性表链式存储结构下元素的插入操作3、实现线性表链式存储结构下元素的删除操作4、实现线性表链式存储结构下取元素操作三、实验环境TC或VC++或Java四、实验步骤1、单链表的存储定义2、从键盘上依次输入21、18、30、75、42、56,逆序创建单链表,并输出单链表中的各元素值。
3、分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。
4、删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。
5、取单链表中的第5个数据元素和第7个数据元素五、问题讨论1、单链表具有什么优缺点?2、单链表的定义与顺序表的定义有什么区别?3、逆序创建单链表有什么好处?4、为什么单链表中取元素、插入和删除操作在开始不判断给定位置i的合法性?5、如何改进单链表的定义,使其可以在操作前判断判断给定位置i的合法性?六、实验报告内容1、实验目的2、实验内容和具体要求3、完成情况和实验记录,实验记录为实验过程中遇到的问题及解决方法4、程序清单5、所输入的数据及相应的运行结果6、问题回答7、实验心得实验二、二叉树的遍历一、实验目的1、掌握二叉树的特点及其存储方式。
《数据结构》实验指导书
《数据结构》实验指导书实验指导书课程名称:数据结构计算机科学与工程系《数据结构》课程组目录前言 .................................... 1 一、实验的作用和目的 ..................... 2 二、实验方式与考核方式................... 2 三、实验要求 ............................. 3 四、实验报告要求......................... 4 五、实验内容 .. (5)实验一线性表应用 (5)实验二栈与队列应用 (10)实验三二叉树的操作 (14)实验四图的遍历 ................................................18 实验五查找算法应用 (21)六、选做实验内容 (24)实验六排序 ................................................ ....24 实验七数组和广义表 (26)实验八串 ................................................ . (27)前言《数据结构》数据结构是计算机科学与技术及相关专业的一门重要专业基础课,它主要介绍线性结构、树型结构、图状结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法,以及算法的时间、空间效率分析。
这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。
通过本课程的学习,使学生熟练地掌握数据结构的内在逻辑关系及其在计算机中的表示方法,以及相关基本操作的算法实现;掌握典型算法的设计思想及程序实现;熟悉各种数据结构在计算机科学中的基本应用;培养和训练学生结合实际应用,根据实际问题选取合适的数据结构、存储方案设计出简洁、高效、实用的算法;并为学习《操作系统》、《编译原理》、《数据库原理》等后续课程和研制开发各种系统和应用软件打下扎实的理论与实践基础。
《数据结构》实验指导书
实验一线性表的操作一、实验目的1.掌握在VC++6.0的集成环境中调试程序的基本方法。
2.掌握线性表的插入和删除操作在顺序存储结构和链式存储结构上的实现。
二、实验内容(三选一)(一)线性表的插入和删除操作在顺序存储结构和链式存储结构上的实现。
(1)线性表的插入和删除操作在顺序存储结构上的实现。
其中函数ListInsert_Sq的功能是在顺序线性表中第i个元素之前插入一个元素,函数ListDelete_Sq的功能是删除顺序线性表中第i个元素。
#define LIST_INIT_SIZE 1000#define LISTINCREMENT 10#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define OVERFLOW -2//顺序表的存储结构定义typedef int Status;typedef int ElemType;typedef struct{ElemType *elem; //首地址int length; //顺序表的长度int listsize; //顺序表的存储容量} SqList;Status InitList_Sq(SqList &L) // 顺序表的初始化{}// InitList_Sq(Status ListInsert_Sq (SqList &L, int i, ElemType e) //插入{ //在顺序表的第i个位置插入值e为的元素}// ListInsert_SqStatus ListDelete_Sq(SqList &L, int i, ElemType &e) //删除{ //在顺序表的第i个位置删除一个元素,值在存进e中}// ListDelete_Sqint main( ){ElemType y;SqList L;int i,n;InitList_Sq(L); /* 初始化线性表*/printf("输入顺序表需存进的元素数量!\n");scanf("%d",&n);while(n<1 || n>10){printf("请输入1--10之间的整数!\n");scanf("%d",&n);}/* 以上循环语句的功能是控制输入数据个数的合法性,可以修改*/printf("依次输入存进顺序表中的数据元素:\n");for(i=1;i<=n;i++){scanf(“%d”,&y);ListInsert_Sq(L,i,y) ;}/* 以上循环语句的功能是依次输入要存进顺序表中的元素,并存进顺序表*/printf("顺序表中的元素为:");for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);/* 以上循环语句的功能是依次输出顺序表中的元素*/printf("\n");printf(“输入要删除元素的位置!\n”);scanf(“%d”,&n);if(ListDelete_Sq(L,n,y)==OK) { printf(“删除成功!”); printf("被删除的元素是:%d\n",y); }printf("顺序表中的元素为:");for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);/* 以上循环语句的功能是依次输出顺序表中的元素*/printf("\n");system("pause");return 0;}实验程序运行示例:(2)线性表的建立、插入、删除、打印和查找操作在链式存储结构上的实现。
数据结构实验指导书含答案模板
数据结构实验指导书含答案《数据结构》实验指导书专业:__电子商务___班级:___ 级电商2班_____组序:_____________学号:__12134675_____姓名:____王苏桐____中国矿业大学管理学院年 12 月上篇程序设计基础实验一 Java编程环境【实验目的】1.掌握下载Java sdk软件包、Eclipse软件的安装和使用方法2.掌握设置Java程序运行环境的方法3.掌握编写与运行Java程序的方法4.了解Java语言的概貌【实验内容】一 JDK下载与安装1. 下载JDK为了建立基于SDK的Java运行环境,需要先下载免费SDK软件包。
SDK包含了一整套开发工具,其中包含对编程最有用的是Java编译器、Applet查看器和Java解释器。
下载链接。
2.安装SDK运行下载的JDK软件包,在安装过程中能够设置安装路径及选择组件,默认的组件选择是全部安装,安装成功后,其中bin文件夹中包含编译器(javac.exe)、解释器(java.exe)、Applet查看器(appletviewer.exe)等可执行文件,lib文件夹中包含了所有的类库以便开发Java程序使用,demo文件夹中包含开源代码程序实例。
安装成功后,文件和子目录结构如图1所示。
其中bin文件夹中包含编译器(javac.exe)、解释器(java.exe)、Applet查看器(appletviewer.exe)等可执行文件,lib文件夹中包含了所有的类库以便开发Java程序使用,sample文件夹包含开源代码程序实例,src压缩文件中包含类库开源代码。
图1二.设置环境变量JDK中的工具都是命令行工具,需要从命令行即MS-DOS提示符下运行它们。
很多人可能会不习惯,但这是Sun特意采取的策略,为的是把精力更多投入到Java语言本身而不是花在开发工具上。
以Windows XP 为例说明设置过程。
右击桌面“我的电脑”图标,选择“属性”菜单图 2在“高级”选项卡中单击“环境变量”按钮,将出现“环境变量”设置界面图 3在“系统变量”框中点击“新建”按钮,在出现的“编辑系统变量”对话框中,在“变量名”栏的文本框内输入“JavaHome”,在变量值栏的文本框内输入jdk安装的主目录。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验课程大纲本大纲是针对计算机科学与技术专业本科对数据结构的基本要求而编写的。
一、目的与任务数据结构是一门实践性很强的课程,每个学生必须完成一定数量的上机作业。
通过上机作业,要求在数据结构的逻辑特性和存贮表示、基本数据结构的选择和应用、算法设计及其实现等方面加深对课程基本内容的理解。
同时,在程序设计方法、程序设计风格及上机操作等基本技能和科学作风方面受到比较系统的、严格的训练。
提高分析问题和用计算机解决实际问题的能力。
为后续课程的学习以及为应用软件特别是非数值软件的开发打下良好的理论基础和实践基础。
二、课程内容1.顺序表的表示和运算(0-2学时)2.链表的表示和运算(2学时)3.栈的应用(2-3学时)4.队列的应用(2-3学时)5.二叉树的基本操作和应用(2-6学时)6.图及其应用(2-6学时)7.排序(4-6学时)8.查找(2-4学时)三、基本要求1.逐步理解和掌握程序设计和上机操作的基本方法和技能。
2.理解并实现各种基本数据结构的存贮表示、运算方法及其典型应用;学会根据实际问题的要求设计算法的数据结构,并具有一定的比较和选用数据结构及算法的能力。
3.理解并实现常用的查找和排序的基本方法。
四、学时分配五、实验内容注:带*的内容以及练习与思考题,可根据实际学时、专业方向特点等具体要求,做相应调整或从略。
实验一、顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。
实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。
(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。
(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。
(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。
要求尽可能少地修改前面的程序来得到新程序。
(这里用于比较的字段为分数)练习及思考题:(1)不同类型的数据元素所对应的顺序表在类型定义和操作实现上有什么异同?(2)顺序表的操作上有什么特点?(3)不固定数据元素的个数,而通过特殊数据来标记输入数据的结束,实现这样的输入操作。
实验二、链表实验目的:熟悉链式表的逻辑特性、存储表示方法的特点和链式表的基本操作。
实验要求:了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。
实验内容:编写程序实现下列的要求:(1) 设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。
(2) 键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。
(3) 键盘输入关键字值x,打印出表中所有关键字值<=x的结点数据。
(用于比较的关键字字段为分数)。
(4) 输入关键字值x,删除表中所有关键字值<=x的结点。
(用于比较的关键字字段为分数)。
(5) * 释放该链表(删除所有结点)。
(6) * 若要求建立的学生成绩单链表为有序表,重新编写算法和程序实现前面的要求(3)。
(用于比较的字段为分数)。
练习及思考题:(1)不同类型的数据元素所对应的链式表在类型定义和操作实现上有什么异同?(2)有头结点的链式表,有什么特点?实验三、栈的应用实验目的:熟悉栈的逻辑特性、存储表示方法和栈的基本操作。
实验要求:了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。
实验内容:(1) 判断一个表达式中的括号(仅有一种括号,小、中或大括号)是否配对。
编写并实现它的算法。
(2) 用不同的存储方法,求解上面的问题。
(3) * 若表达式中既有小括号,又有大括号(或中括号),且允许互相嵌套,但不能交叉,写出判断这样的表达式是否合法的算法。
如2+3*(4-{5+2}*3)为合法;2+3*(4-{5+2 * 3} 、2+3*(4-[5+2 * 3)为不合法。
练习及思考题:(1)求解八皇后问题,并将它扩展到n皇后问题。
(2)递归问题是如何利用栈来求解的。
实验四、队列的应用实验目的:熟悉队列的逻辑特性、存储表示方法和队列的基本操作及应用。
实验要求:了解并熟悉队列的逻辑特性、顺序和链式存储表示方法和队列的基本操作的实现和应用。
实验内容:迷宫问题(1) 定义不同存储类型的队列并实现队列的基本操作。
(2) *求解m*n迷宫问题,输出解的个数及每个解。
编写并实现它的算法。
(3)* 用不同的存储方法,求解上面的问题。
练习及思考题:(1)队列是特殊的线性表,它的特殊性体现在什么地方。
实验五、二叉树的基本操作和应用实验目的:熟悉树的基本概念,树状结构的逻辑特性、存储表示方法和二叉树的基本操作。
实验要求:熟悉树的基本概念,树状结构的逻辑特性、存储表示方法和树的基本操作,实现二叉树的遍历算法(前序、中序和后序遍历)及其简单应用。
实验内容:(1) 实现行政机构的二叉树表示,设数据元素类型为字符串(如总经理、业务部经理、财务部经理、业务主管A、业务主管B、业务员A1、业务员A2、业务员B1、业务员B2(可没有)、财务主管A、财务主管B、财务员A1、财务员A2(可没有)、财务员B1、财务员B2),建立这棵二叉树。
(2) 实现该二叉树的前序、中序和后序遍历,输出遍历结果。
(3) 按职务从高到低的次序依次输出这些职位。
(即按层遍历、要求利用队列来实现)(4) *键盘输入一个职位,查找并输出其上级和下级职位。
(5) *求该机构的职务等级数。
练习及思考题:(1)不同类型的数据元素所对应的二叉树在类型定义和操作实现上有什么异同?(2)写出求二叉树的叶子结点数的算法。
(3)如何利用栈,实现二叉树的前序非递归遍历。
实验六、图及其应用实验目的:熟悉图的基本概念、逻辑特性、存储表示方法、基本操作和基本应用。
实验要求:熟悉图的基本概念、逻辑特性、存储表示方法,实现无向网的存储表示、图的深度优先搜索遍历、广度优先搜索遍历、单源最短路径算法。
实验内容:(1) 实现交通网、通信网或局域网的邻接矩阵存储表示,设数据元素类型为字符串(如地名、房间号等)。
(2) 实现该网的深度优先搜索遍历,输出遍历结果。
(3) *实现上述网络的邻接表存储表示,实现其广度优先搜索遍历,输出遍历结果。
(4) *求从一个地点到其它各个地点的最短路径。
练习及思考题:(1)图和网的建立算法有何差异?(2)如何求图中每对顶点之间的最短路径?实验七(一)、插入排序和交换排序的比较实验目的:熟悉插入排序和交换排序算法及其特点。
实验要求:编写算法实现插入排序和交换排序,并对待排序的数据进行排序。
实验内容:(1) 设数据元素为学生成绩(含姓名、成绩字段),关键字为学生成绩字段,实现这样的线性表的存储。
数据让用户自行输入。
(2) 编写算法实现插入排序(直接插入排序)和交换排序(快速排序、冒泡排序),要求输出每一趟(遍)的结果和最终结果,并应用它对上面的数据序列进行排序。
(3)* 证明快速排序算法是不稳定的。
练习及思考题:(1)简述快速排序的思想。
(2)快速排序算法的效率与每趟排序后分割成的两个文件的大小接近程度有关,这依赖于枢轴元素的选取,试讨论如何选取枢轴元素。
(3)排序方法的稳定性是指什么?那些排序方法是稳定的,那些是不稳定的。
实验七(二)、排序方法的效率比较实验目的:熟悉各种排序算法极其特点和效率。
实验要求:熟悉各种排序算法极其特点和效率。
实验内容:(1) 输入或给定若干个已经有序或逆序的线性表。
(2) 分别利用选择排序(直接选择排序)、插入排序(直接插入排序)和交换排序(快速排序、冒泡排序)、*归并排序等各种排序方法对他们进行排序,并输出他们各自的比较和移动记录次数。
(3) 检验实际结果(运行时间和比较、移动记录次数)和理论结果的差异,并进行讨论各种方法的优劣。
(4) * 随机产生100,200,500,1000,2000等若干个随机整数,并将他们存到一个线性表中,再实现内容(2)、(3)的要求。
练习及思考题:(1)简述各种排序算法的的思想和适用特点。
(2)讨论哪些排序方法适用于单链表,如何实现单链表的这些排序方法。
实验八、顺序和二分查找实验目的:熟悉顺序和二分等查找方法。
实验要求:实现顺序和二分等查找方法。
实验内容:(1) 建立一个整数构成的顺序表。
(2) 根据用户输入的查找值,实现顺序表的顺序查找。
(3) 建立一个有序的整数构成的顺序表(可直接利用前面排序实验的结果)。
(4) 根据用户输入的查找值,实现二分查找,并输出比较的元素、元素的比较次数等。
要求实现递归和非递归算法。
(5) *模拟统计查找长度,随机产生100,200,500,1000,2000等若干个随机整数,在(3)中定义的有序表中查找这些值,统计查找成功和查找不成功的平均查找长度。
练习及思考题:(1)顺序查找和二分查找的适用范围有何不同。
(2)讨论哪些查找方法适用于单链表,如何实现单链表的这些查找方法。
附:实验报告的主要内容1.需求和规格说明(问题描述)描述问题,简述题目要解决的问题是什么,规定软件做什么,原题条件不足时要补全。
2.设计a.设计思想:存储结构,主要算法的基本思想。
不要画框图。
b.设计表示:每个函数或过程的头和规格说明;列出每个函数或过程所调用和被调用的过程和函数。
c.详细设计表示:主要算法的框架。
3.用户手册:即使用说明,如输入怎样的数据、输入多少、何时输入、如何结束等。
4.调试报告:测试用例,测试结果,调试过程中遇到的主要问题是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等。
5.附录:源程序清单和结果。
程序要加注释,还可手工添加一些注释。
测试数据及输出结果。