数据结构实验指导

合集下载

数据结构实验-实验指导书

数据结构实验-实验指导书

实验一线性表操作一、实验目的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、掌握顺序表抽象数据类型的定义。
2、掌握顺序表的存储实现。
3、掌握顺序表的操作算法实现。
4、了解顺序表的应用。
二、实验学时
2学时
三、实验类型
验证Байду номын сангаас实验
四、实验需求
1、硬件
每位学生配备计算机一台;
2、软件
WindowsXP/Windows7操作系统;开发工具软件:Microsoft Visual Studio2010。
实验步骤:
(1)启动Visual Studio 2010,创建窗体应用程序。
(2)增加顺序表类,代码参考如下:
class SqListClass
{
const int MaxSize = 100;
public string[] data;//存放顺序表中元素
public int length;//存放顺序表的长度
while (i < length && pare(data[i], e) != 0)
i++;//查找元素e
if (i >= length)//未找到时返回0
return 0;
else
return i + 1;//找到后返回其逻辑序号
}
public bool ListInsert(int i, string e) //插入数据元素
2、顺序表的存储和运算的代码实现;
3、数据结构的应用特点。
九、课外自主实验
1、假设两个递增有序顺序表L1和L2,分别含有n和m个元素,设计一个算法将它们的所有元素归并为一个递增有序顺序表L3。在顺序表类中增加相应方法,在窗体中增加相应控件和代码,调试运行并观察运行结果。

数据结构实验指导书new(完整版)

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

数据结构实验指导书目录实验说明 (3)实验要求 (4)实验1 线性表的顺序存储结构的实现及其应用 (5)实验2 线性表的链式存储结构的实现及其应用 (10)实验3 栈和队列的存储结构的实现 (17)实验4 树和二叉树的存储结构的实现 (26)实验5 图的存储结构的实现 (34)实验6 图的简单应用 (39)实验7 查找算法的实现 (44)实验8 排序算法的实现 (47)上机实验报告(仅供参考) (52)实验说明A.每班学习委员或班长至少在上机实验前一周到软件学院教务室(创新大楼西楼4楼教务室)购买上机实验报告B.上机实验报告封面上要写完整:班级、姓名、指导老师姓名,学期、报告日期等。

C.其它1)本学期上机实验一共16学时,大家需要完成8个实验。

2)上机前写好预习报告(即上机报告中调试分析之前的内容),准备好程序和测试数据。

3)报告要简洁明了,一个实验报告只有3页,书写时字体大小不要太大,以免写不下。

4)请按照指定时间完成上机报告,上机报告于课程结束后上交存档,缺交上机报告达三分之一者取消考试资格。

5)请大家认真完成上机任务及上机报告,严禁抄袭。

有任何问题可以及时跟任课教师联系!6)希望在愉快的环境中完成本学期的学习,请大家积极配合!谢谢!实验要求一、实验步骤⒈问题分析充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据元素之间的关系等。

⒉数据结构设计针对要求解决的问题,考虑各种可能的数据结构,并且力求从中找出最佳方案(必须连同算法一起考虑),确定主要的数据结构(可以采用抽象数据类型描述)及全局变量。

对引入的每种数据结构和全局变量要详细说明其功能、初值和操作特点。

⒊算法设计算法设计分概要设计和详细设计。

概要设计着重解决程序的模块设计问题,这包括考虑如何把被开发的问题程序自顶向下分解成若干顺序模块,并决定模块的接口,即模块间的相互关系以及模块之间的信息交换问题。

概要设计可以由模块的功能说明和模块之间的调用关系图完成。

详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出,采用类C 语言描述。

⒋测试用例设计准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。

⒌上机调试对程序进行编译,纠正程序中可能出现的语法错误。

测试前,先运行一遍程序看看究竟将会发生什么,如果错误较多,则根据事先设计的测试方案并结合现场情况进行错误跟踪,包括打印执行路径或输出中间变量值等手段。

二、实验报告每次上机实验前,应该写好预习报告。

预习报告包括如下内容:(1)问题描述:简述题目要做什么。

(2)设计部分:包括抽象数据类型描述,其他各个模块的功能说明,模块之间的调用关系图,存储结构的定义、基本操作的实现、其他模块的算法等。

(3)测试用例设计每次实验结束后,在预习报告的基础上撰写完整的实验报告。

实验报告应包括如下内容:(1)、(2)同预习报告(3)调试报告:调试过程中遇到的问题以及如何解决;对设计和编码的讨论和分析。

(4)测试结果。

根据预习报告中设计的测试用例进行程序测试,可以贴相应的运行结果截图。

(5)算法分析与改进:重要算法的时间复杂度和空间复杂度分析;算法改进的设想。

(6)总结和体会所有实验做完后,上交上机实验源程序(.h, .cpp)、可执行文件(.Exe)和相应的运行结果截图。

源程序要加注释。

如果题目规定了测试数据,则截图结果要包含这些测试数据和运行输出,当然还可以含有其它测试数据和运行输出(有时需要多组数据)。

实验1 线性表的顺序存储结构的实现及其应用实验目的1.熟悉C语言的上机环境,掌握使用VC环境上机调试程序的基本方法;2.会定义线性表的顺序存储结构。

3.熟悉对顺序表的一些基本操作和具体的函数定义。

4.理解利用基本操作进行一些实际的应用型程序设计。

实验要求1.独立完成。

2.程序调试正确,有执行结果。

实验内容(基础题必做,应用题任选)1、基础题:编写应用程序(填空),实现可以在顺序表中插入任意给定数据类型数据的功能(定义为ElemType抽象数据类型)。

要求在主函数中定义顺序表并对该顺序表插入若干个整数类型的数据(正整数),对它们求和并输出。

请把主函数设计为一个文件SqList.cpp,其余函数设计为另一个文件SqList.h。

请填空完成以下给出的源代码并调试通过。

(1)文件SqList.h:typedef struct List{ElemType *elem;int length;}SqList;void InitList(SqList &L){ //构造一个空的顺序表…………}void ClearList(SqList &L){ //清空线性表,不销毁………………}int ListLength (SqList L){ //求线性表长度………..}bool ListInsert (SqList &L, int i , ElemType e){ //在线性表L中第i个数据元素之前插入新数据元素e…….}ElemType GetElem(SqList L, int i){ //在线性表L中求序号为i的元素,该元素作为函数返回值…………..}(2)文件SqList.cpp:#include <stdio.h>#include <stdlib.h>typedef ElemType; //填空1#define MAXSize 10#include "SqList.h"void main(void){SqList myList;int i=1, x, sum=0, n;InitList ( ); //填空2scanf(“%d”, &x);while ( x!= -1 ){if (ListInsert (myList, i, )==false) { //填空3printf("错误!\n");return ;}i++;scanf(“%d”, &x);}n = ListLength (myList);for (i=1; i<=n; i++) //求所有数据元素的和{x=GetElem(myList, i);sum = + x; //填空4}printf("%d\n ", sum);ClearList(myList);}2.应用题(1)求集合A、B的并集C。

(2)归并两个有序表La和Lb成一个新的有序表Lc。

有序指值非递减。

要求:把该函数添加到文件SqList.h中,并在主函数文件SqList.cpp中添加相应语句进行测试。

实验步骤参考:1.打开Visual C++6.0,“文件”菜单——>“新建”——>“工程”——>“win32 Console Application”——>输入“工程名称”和存储“位置”——>“确定”。

2.默认创建“一个空工程”——>“完成”——>“确定”。

3. “文件”菜单——>“新建”——>“文件”——>“C/C++ Header File”——>输入文件名SqList.h(默认为.h类型,可省去.h)——>“确定”4.“文件”菜单——>“新建”——>“文件”——>“C++ Source File”——>输入文件名SqList.cpp(默认为.cpp类型,可省去.cpp)——>“确定”。

5.打开FileView双击SqList.h,完成头文件的编写。

SqList.h主要含结构体的定义和函数的实现。

6.打开FileView双击SqList.cpp,完成源文件的编写和填空。

SqList.cpp主要含main()函数的实现。

7.编译运行。

实验2 线性表的链式存储结构的实现及其应用实验目的1.掌握线性表的建立、插入、删除等基本操作的编程实现,进一步编程实现查找、排序等操作,存储结果采用顺序表存储结构。

2.理解利用基本操作进行一些实际的应用型程序设计。

实验要求1.可以依次完成主要功能来体现功能的正确性,也可以用菜单管理完成大部分功能,要求可以重复运行。

2.准备好测试数据,程序调试正确,有执行结果。

3.程序是自己开发的,在界面上注明***原创;参考或改写他人的,注明***参考他人版。

实验内容(基础题必做,应用题任选1个)1、基础题:线性表基本操作的实现(演示单链表的创建、插入、删除、查找、输出等操作),通过简单实例测试各基本操作函数算法的正确性。

基本操作函数如下:Status InitList(LinkList &L)//初始化只含有头结点的空的单链表,返回函数状态值void DestroyList(LinkList &L) //销毁单链表void ClearList(LinkList &L) //清空单链表,仅保留头结点bool ListEmpty(LinkList L) //判断是否为空链表int ListLength(LinkList L) //返回单链表的长度void PrintList(LinkList L)//遍历函数,顺序输出单链表中的各元素的值Status GetElem(LinkList L,int i,ElemType &e)//用参数e返回单链表L中第i个元素的值Status ListInsert(LinkList &L,int i,ElemType e)//在单链表L的第i个数据元素之前插入数据元素eStatus ListDelete(LinkList &L,int i,ElemType &e)//删除单链表L中第i个结点,并用e返回其值int LocateElem(LinkList L,ElemType e)//返回e元素在单链表L中的位序,若不存在,返回02、应用题:(1)将一个已知的单链表进行逆置运算,如(a1,a2,…,an)变为(an,…a2,a1)。

(2)求集合A、B的并集C。

(3)归并两个有序表La和Lb成一个新的有序表Lc。

有序指值非递减。

实验步骤参考:1.打开Visual C++6.0,“文件”菜单——>“新建”——>“工程”——>“win32 Console Application”——>输入“工程名称”和存储“位置”——>“确定”。

2.默认创建“一个空工程”——>“完成”——>“确定”。

3. “文件”菜单——>“新建”——>“文件”——>“C/C++ Header File”——>输入文件名LinkList.h(默认为.h类型,可省去.h)——>“确定”4.“文件”菜单——>“新建”——>“文件”——>“C++ Source File”——>输入文件名LinkList.cpp(默认为.cpp类型,可省去.cpp)——>“确定”。

相关文档
最新文档