广工数据结构实验指导书(2015春)
- 格式:doc
- 大小:236.50 KB
- 文档页数:35
实验一线性表操作一、实验目的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都是中心对称的字符串。
《数据结构实验》指导书Data Structures and Algorithms Laboratory Projects王金荣2014-09-11目录1《数据结构实验》课程实验教学大纲--------------------------------------12 实验准备: 如何使用VC 6.0? ----------------------------------------------33 Projects---------------------------------------------------------------------------8 3.1 Project 1: 算法性能测量-------------------------------------------------8 3.2 Project 2: 有序表归并实验---------------------------------------------10 3.3 Project 3: 数据转换------------------------------------------------------11 3.4 Project 4: 二叉树遍历实验---------------------------------------------12 3.5 Project 5-1: 堆排序算法实现------------------------------------------13 3.6 Project 5-2: 归并排序算法实现---------------------------------------14 3.7 Project 5-3: 快速排序算法实现---------------------------------------15 3.8 Project 6-1: 图的深度优先搜索---------------------------------------16 3.9 Project 6-2: 图的广度优先搜索---------------------------------------173.10 Project 7: 散列实验---------------------------------------------------184.1 ACM题目-------------------------------------------------------------------19 4.1 ACM 1: ACboy needs your help again!-------------------------------19 4.2 ACM 2: Jumping the Queue--------------------------------------------21 4.3 ACM 3: Median ----------------------------------------------------------234.4 ACM 4: Ignatius and the Princess I------------------------------------255 实验报告格式-----------------------------------------------------------------28 6实验报告上交说明-----------------------------------------------------------291《数据结构实验》课程实验教学大纲课程中文名称:数据结构实验课程英文名称:Data Structure Practices实验课程性质:独立设课课程编码:044209101一、学时、学分课程总学时:34 实验学时:34课程总学分:1 实验学分:1二、适用专业及年级计算机科学与技术专业,软件工程专业,第二学期三、实验教学目的与基本要求“数据结构实验”的总体目标是:通过实验使学生对课堂讲授的内容有实际的体验,加深对概念、算法、技术的理解、掌握、应用,并激发学生进一步的思考和发挥,注重培养学生的学习兴趣和创新思维。
数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。
具体而言,实验的目的包括: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、掌握用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.熟练地利用链式存储结构实现线性表的基本操作。
3.能熟练地掌握链式存储结构中算法的实现。
二、实验内容:1.用头插法或尾插法建立带头结点的单链表。
2.实现单链表上的插入、删除、查找、修改、计数、输出等基本操作。
三、实验要求:1. 根据实验内容编写程序,上机调试、得出正确的运行程序。
2. 写出实验报告(包括源程序和运行结果)。
四、实验学时:2学时五、实验步骤:1.进入编程环境,建立一新文件;2. 参考以下相关内容,编写程序,观察并分析输出结果。
①定义单链表的数据类型,然后将头插法和尾插法、插入、删除、查找、修改、计数、输出等基本操作都定义成子函数的形式,最后在主函数中调用它,并将每一种操作前后的结果输出,以查看每一种操作的效果。
②部分参考程序//单链表的建立(头插法),插入,删除,查找、修改、计数、输出#include<iostream.h>#define elemtype intstruct link{ elemtype data;//元素类型link *next; //指针类型,存放下一个元素地址};//头插法建立带头结点的单链表link *hcreat(){ link s,p;elemtype i;cout<<”输入多个结点数值(用空格分隔),为0时算法结束”;cin>>i;p=new link;p->next=NULL;while(i) //当输入的数据不为0时,循环建单链表{s=new link;s->data=i;s->next=p->next;p->next=s;cin>>i; }return p;}//输出单链表void print(1ink *head){1ink *p;p=head->next;while(p->next!=NULL){cout<<p->data<<”->”; //输出表中非最后一个元素p=p->next;}cout<<p->data; //输出表中最后一个元素cout<<endl;}∥在单链表head中查找值为x的结点Link *Locate(1ink *head,elemtype x){Link *p;p=head->next;while((p!=NULL)&&(p->data!=x))p=p->next;return p; }//在head为头指针的单链表中,删除值为x的结点void deletel(1ink *head,elemtype x){1ink *p, *q;q=head;p=head->next;while((p!=NULL)&&(p->data!=x)){q=p;p=p->next;}If(p==NULL) cout<<“要删除的结点不存在”;elseq->next=p ->next;delete(p);}}//在头指针head所指的单链表中,在值为x的结点之后插入值为y的结点void insert(1ink *head,elemtype x,elemtype y){ link *p, *s;s=new link;s->data=y;if(head->next==NULL) //链表为空{head->next=s;s->next=NULL:}p=Locate(head,x);//调用查找算法‘if(p==NULL)cout<<”插入位置非法”:else(s->next=p->next;p->next=s;}}//将单链表p中所有值为x的元素修改成y void change(1ink *p,elemtype x,elemtype y) {link *q;q=p->next;while(q!=NULL){ if(q->data==x) q->data=y;q=q->next;}}void count(1ink *h) //统计单链表中结点个数{1ink *p;int n=0;p=h->next;while(p!=NULL){n++;p=p->next;}return n;}void main(){ int n;elemtype x,y;link *p, *q;p=hcreat(); //头插法建立链表print(p); //输出刚建立的单链表cout<<”请输入要删除的元素”;cin>>y;deletel(p,y);print(p); //输出删除后的结果cout<<”请输入插入位置的元素值(将待插元素插入到它的后面)”; cin>>x;cout<<”请输入待插元素值”;cin>>y;insert(p,x,y);print(p); //输出插入后的结果cout<<”请输入要修改前、后的元素值”;cin>>x>>y;change(p,x,y);print(p);cout<<”请输入要查找的元素值”;cin>>x;q=Locate(p,x);if(q==NULL)cout<<x<<”不在表中,找不到!”<<endl;else cout<<x<<”在表中,已找到!”<<endl;n=count(p);cout<<”链表中结点个数为:”<<n<<endl:}//单链表的建立(尾插法)、插入、删除、查找、修改、计数、输出#include<iostream.h>#define elemtype intstruct link{ elemtype data;//元素类型link *next;//指针类型,存放下-个元素地址};//尾插法建立带头结点的单链表link *rcreat(){link *s, *p, *r;elemtype i;cout<<”输入多个结点数值(用空格分隔),为0时算法结束”; cin>>i;p=r=new link;p->next=NULL;while(i){s=new link;s->data=i;r->next=s;r=s;cin>>i; }r->next=NULL;return p;}//输出单链表void print(1ink *head){link *p;p=head->next;while(p->next!=NULL){cout<<p->data<<"->”; //输出表中非最后一个元素p=p->next;)cout<<p->data; //输出表中最后一个元素cout<<endl;}link *Locate(1ink *head,int x) ∥在单链表中查找第x个结点 {link *p;p=head;int j=0;while((p!=NULL)&&(j<x)){p=p->next; j++;}return p;}void delete I(1ink *head,elemtype x)//在head为头指针的单链表中,删除值为x的结点{link *p, *q;q=head;p=head->next;while((p!=NULL)&&(p->data!=x)){q=p;p=p->next;)if(p==NULL)cout<<”要删除的结点不存在“;else{q->next=p->next;delete(p);} }void insert(1ink *head,int x,elemtype y)//在头指针head所指单链表中,在第x个结点之后插入值为y的结点{link *p, *s;s=new link;s->data=y;if(head->next==NULL)//链表为空{head->next=s;s->next=NULL:}p=Locate(head,x); //调用查找算法if(p==NULL)cout<<”插入位置非法”;else{s->next=p->next;p->next=s;}}void change(1ink *p,elemtype x,elemtype y){∥将单链表P中所有值为x的元素改成值为ylink *q;q=p->next;while(q!=NULL){if(q->data==x)q->data=y;q=q->next;}}void count(1ink *h) //统计单链表中结点个数(1ink *p;int n=0;p=h->next;while(p!=NULL){n++;p=p->next;}retum n;}void main(){ int n;link p,q;p=rcreat();//尾插法建立链表print(p); //输出刚建立的单链表cout<<”请输入要删除的元素”;cin>>y;deletel(p,y);print(p); //输出删除后的结果cout<<”请输入插入位置”;cin>>x;cout<<”请输入待插元素值”;cin>>y;insert(p,x,y);print(p); //输出插入后的结果cout<<”请输入修改前、后的元素值”;cin>>x>>y;change(p,x,y);print(p);cout<<“请输入要查找的元素值”;cin>>x;q=Locate(p ,x);if(q==NULL)cout<<x<<”不在表中,找不到!”<<endl;else cout<<x<<”在表中,已找到!”<<endl;n=count(p);cout<<”链表中结点个数为:”<<n<endl;}六、选作实验试设计一元多项式相加(链式存储)的加法运算。
数据结构实验指导书院别专业班级姓名计算机学院编实验一线性表的顺序存储实验一、实验目的及要求1、掌握在TC环境下调试顺序表的基本方法2、掌握顺序表的基本操作,插入、删除、查找、以及有序顺序表的合并等算法的实现。
二、实验学时2学时三、实验任务1、生成一个顺序表并动态地删除任意元素和在任意位置插入元素。
2、将两个有序表合并成一个有序表。
四、实验重点、难点1、在顺序表中移动元素。
2、在顺序表中找到正确的插入位置。
五、操作要点(一)顺序表基本操作的实现[问题描述] 当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。
若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。
[基本要求] 要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。
[实现提示] 要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。
[程序实现]#include <stdio.h>#include <conio.h>typedef int DataType ;# define maxnum 20typedef struct{int data[maxnum];int length;}SeqList;/*插入函数*/int insert(SeqList *L , int i , DataType x)/* 将新结点x插入到顺序表L第i个位置 */{ int j ;if( i<0 || i>(*L).length +1){ printf(" \n i 值不合法 ! ");return 0;}if((* L).length >=maxnum-1){ printf(" \n 表满不能插入!");return 0;}for(j=(*L).length;j>=i;j--) (*L).data[j+1]=(*L).data[j];(*L).data[i] = x;(*L).length++;return 1;}/*删除函数*/int delete( SeqList *L ,int i)/*从顺序L中删除第i个结点*/{ int j ;if( i<0|| i>(*L).length ){ printf(" \n 删除位置错误 ! ") ;return 0;}for(j=i+1;j<=(*L).length;j++)(*L).data[j-1] =(*L).data[j];(*L).length--;return 1;}/*生成顺序表*/void creatlist(SeqList * L){ int n , i , j ;printf("请输入顺序表 L 的数据个数:\n") ;scanf("%d" , &n) ;for(i=0 ; i<n ; i++){ printf("data[%d] =" , i) ;scanf("%d",&((*L).data[i]));}(*L).length=n-1;printf("\n") ;}/*creatlist *//*输出顺序表 L*/printout(SeqList * L){ int i ;for (i=0 ; i<=(* L).length ; i++){ printf(" data[%d]=", i) ;printf("%d", (*L).data[i]);}/*printout */printf("\n");}main(){ SeqList *L ;char cmd ;int i , t , x;clrscr() ;creatlist(L);do{printf("\ni , I ----- 插入\n") ;printf("d , D ----- 删除\n") ;printf("q , Q ----- 退出\n") ;do{cmd=getchar() ;}while((cmd!='i')&&(cmd!='I')&&(cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q')); switch(cmd){ case 'i':case 'I':printf("\nPlease input the DATA: ");scanf("%d",&x) ;printf("\nWhere? ");scanf("%d",&i) ;insert(L,i,x) ;printout(L);break ;case 'd':case 'D' :printf("\nWhere to Delete? ");scanf("%d",&i);delete(L,i);printout(L);break ;}}while((cmd!='q')&&(cmd!='Q'));}(二)有序顺序表的合并[问题描述] 已知顺序表la和lb中的数据元素按非递减有序排列,将la和lb表中的数据元素,合并成为一个新的顺序表lc[基本要求] lc中的数据元素仍按非递减有序排列,并且不破坏la和lb表[程序实现]# include <stdio.h># define maxnum 20typedef int DataType ;typedef struct{ DataType data[maxnum] ;int length ;}SeqList ;int MergeQL(SeqList la , SeqList lb , SeqList *lc){ int i , j , k ;if (la.length+1 + lb.length+1>maxnum){ printf("\narray overflow!") ;return 0;}i=j=k=0;while(i<=la.length && j<=lb.length){ if (la.data[i]<=lb.data[j])lc->data[k++]=la.data[i++] ;elselc->data[k++]=lb.data[j++];}/* 处理剩余部分 */while (i<=la.length) lc->data[k++]=la.data[i++];while (j<=lb.length) lc->data[k++]=lb.data[j++];lc->length=k-1;return 1;}main(){ SeqList la={{3,4,7,12,15},4} ;SeqList lb={{2,5,7,15,18,19},5} ;SeqList lc ;int i ;if (MergeQL(la,lb,&lc)){ printf("\n") ;for(i=0;i<=lc.length ; i++)printf("%4d",lc.data[i]);}}六、注意事项1、删除元素或插入元素表的长度要变化。
《数据结构课程设计》指导书•实验目的意义数据结构实验是《数据结构》课程必不可少的一个教学环节。
通过实验,学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构和算法的能力,而且可以在问题分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。
实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养软件工作所需要的动手能力。
•实验基本步骤及要求1.阅读实验指导书每一次实验从阅读实验指导书开始。
对于本次实验的实验目的、实验题目、实现提示以及思考题目、选做题目等应认真了解。
2.算法设计分析实验题目,参考实现提示,进行算法设计。
3.程序设计根据已完成的算法,用C语言或java进行程序设计。
4.调试和测试将所编程序在计算机上调试通过,并选取若干组测试数据对程序进行尽可能全面的测试。
5.整理完成实验报告实验报告一般包括下列内容:(1)实验者姓名、学号、专业和班级,课程名称(数据结构实验),实验日期等;(2)本次实验的实验编号及实验名称(例如:实验一线性表的应用);(3)本次实验的实验目的(可参考《数据结构实验指导》相关内容);(4)本次实验的实验地点、设备编号、硬件及软件环境;(5)程序结构的描述及各模块的规格说明;(6)主要算法及其基本思想;(7)调试过程简述(调试过程是否顺利,遇到些什么问题,如何解决的,以及上机操作所花费的时间等);(8)测试数据和相应输出的客观纪录,对运行结果的分析讨论。
•注意:为了有效地利用上机时间,上述实验步骤1,2,3应在上机之前完成。
1目录实验一顺序表及其在简单排序中的应用实验二线性表的链式存储实验三各种排序算法的比较实验四栈及其应用实验五栈和队列的综合应用实验六二叉树及其应用实验七图论及其应用实验八(1) 表达式求值实验八(2) 停车场管理模拟实验八(3) 哈希表设计(《数据结构题集6.2》)2实验一顺序表及其在简单排序中的应用一.实验目的熟悉线性表的顺序存储结构,熟练掌握顺序表的抽象数据类型及各种基本操作的实现;利用所定义的顺序表抽象数据类型实现各类排序算法,培养灵活运用顺序表解决实际问题的能力。
数据结构实验指导书吉林大学珠海学院计算机系2012.12实验目的与要求《数据结构》是计算机学科重要的专业基础课,北京市高校已将该课作为理工科非计算机专业的提高课程,北京大学将此课列为理工科非计算机专业必修课已经超过15 年。
该课程主要研究信息在计算机中的组织和表示方法。
上机实验是本课程教学至关重要的环节,通过上机实验,使学生在数据结构的逻辑结构定义、存储表示、操作的实现、数据结构的选择和应用、算法实践等方面加深对课程内容的理解,训练学生进行复杂程序设计的技能和培养良好程序设计的习惯。
考虑到大一上学期学习过C程序设计,本学期有C课程设计和C++程序设计,故数据结构课程的实验不安排验证性实验,按课程设计要求。
具体说是期初布置题目,按学号顺序确定如下题目,学生自己准备,期中检查,15周开始验收。
验收时间安排在周末。
实验内容从以下题目中选一题题目一、航空客运订票系统题目二、文章编辑题目三、宿舍管理查询软件题目四、校园导航系统题目五、散列法的实验研究题目六、小型图书馆管理系统(链表的插入,排序,查询,删除)题目七、学生搭配问题题目八、敢死队问题题目九、教学计划编制问题题目十、活期储蓄帐目管理题目十一、通讯录的制作题目十二、二叉排序树的实现题目十三、利用栈求表达式的值题目十四、走迷宫游戏题目十五、顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现题目十六、线索二叉树的应用题目十七、稀疏矩阵实现与应用题目十八、树的应用题目十九、图的遍历和生成树求解实现题目二十、排序综合题目二十一、纸牌游戏题目二十二、利用栈求表达式的值,可供小学生作业,并能给出分数题目二十三、数制转换问题题目二十四、停车场问题题目二十五、学生成绩管理系统题目二十六、哈夫曼编码/译码器题目二十七、特殊矩阵的压缩存储算法的实现题目二十八、产品进销存管理系统题目二十九、客户消费积分管理系统题目三十、约瑟夫环题目三十一、任意长的整数加法题目三十二、广义表的应用题目三十三、关键路径问题题目三十四、构造可以使n个城市连接的最小生成树题目三十五、神秘国度的爱情故事题目三十六、利用Hash技术统计C源程序中关键字的频度题目一、航空客运订票系统通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定);查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
引言概述正文内容
1.实验环境配置
1.1硬件要求
计算机硬件配置要求
操作系统要求
附加硬件设备要求(如虚拟机等)
1.2软件要求
编程语言要求(如C/C++、Java等)开发环境配置(如IDE、编译器等)1.3实验库和工具
实验需要使用的库文件和工具
如何获取和配置实验库和工具
2.实验内容介绍
2.1实验目标和背景
数据结构实验的作用和意义
实验背景和相关应用领域介绍
2.2实验概述
实验内容的大致流程和步骤
实验中可能遇到的问题和挑战
2.3实验要求
对学生实验流程和实验结果的要求
实验过程中需要注意的事项和技巧
3.实验步骤
3.1实验准备
配置实验环境
获取实验所需数据和文件
3.2实验具体步骤
根据实验要求将数据结构知识应用到具体问题中根据实验要求实现相应的算法和数据结构
3.3实验示例代码
提供示例代码以供学生参考和学习
解析示例代码中的关键步骤和实现细节
4.实验答案
4.1实验题目
实验题目及相关说明
确定实验的具体要求和目标
4.2实验答案解析
对实验答案的具体实现进行解析
对实验中可能遇到的问题和错误进行分析和解决4.3实验答案示例
提供实验答案的示例代码
解析实验答案中的关键实现步骤和说明
5.实验总结
5.1实验成果评估
对学生实验成果进行评估
分析实验结果的优点和不足
5.2实验心得
学生对本次实验的收获和感想
学生对未来实验的建议和展望
总结。
数据结构作业和实验指导书数据结构课程组广东工业大学计算机学院2015年4月目录第1章概述1.1 课程、教材和实验1.2 作业和实验安排第2章算法设计实验和上机2.1 数据结构习题概述2.2 算法设计的上机作业要求2.3 算法设计上机作业第3章抽象数据类型的实现3.1 实验概要3.2 实验目的3.3 预习与参考3.4 实验要求和设计指标3.5 实验仪器设备和材料3.6 调试及结果测试3.7 考核形式3.8 实验报告要求3.9 思考题3.10 示例第4章课程设计4.1 课程设计概述4.2 课程设计时间和内容4.3 课程设计步骤4.4 课程设计考核形式和评分标准第1章概述1.1 课程、教材和实验数据结构是计算机科学的算法理论基础和软件设计的技术基础,主要研究信息的逻辑结构及其基本操作在计算机中的表示和实现。
数据结构不仅是计算机专业的核心课程,而且已成为其他理工专业的热门选修课。
课程的教学要求之一是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯, 其重要程度决不亚于知识传授。
因此,在数据结构的整个教学过程中, 完成习题作业和上机实习是两个至关重要的环节。
习题的作用在于帮助学生深入理解教材内容, 巩固基本概念, 达到培养良好程序设计能力和习惯的目的。
从认知的程度划分,数据结构的习题通常可分为三类:基础知识题、算法设计题和综合实习题。
基础知识题主要是检查对概念知识的识记和理解,一般可作为学生自测题。
算法设计题的目的是练习对原理方法的简单应用,多数是要求在某种数据存储结构上实现某一操作,是数据结构的基础训练,构成了课外作业的主体。
综合实习题则训练对知识的综合应用和软件开发能力,主要是针对具体应用问题,选择、设计、和实现抽象数据类型(ADT)的可重用模块,并以此为基础开发满足问题要求的小型应用软件,应将其看作软件工程的综合性基础训练的重要一环,给予足够的重视。
本实验指导书为采用自编教材的数据结构课程而编写:吴伟民等. 《数据结构》. 广东工业大学计算机学院,2015.1。
数据结构是实践性很强的课程,光是“听”和“读”是绝对不够的。
在努力提高课堂教学的同时,必须大力加强对作业实践环节的要求和管理。
国内外先进院校一般都要求修读数据结构的学生每周应不少于4个作业机时,而且有一套严格的作业和实习规范和成绩评定标准,形成行之有效的教学质量保证体系。
教学经验表明,严格实施作业和实习的规范,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将能起到显著的促进作用。
数据结构及其算法的教学难点在于它们的抽象性和动态性。
虽然在书本教材和课堂授课(板书或投影胶片)中采用图示可以在一定程度上化抽象为直观,但很难有效展现数据结构的瞬间动态特性和算法的作用过程。
我们自主研发的“C程序可视化运行调试集成环境AnyviewC”,以及基于AnyviewC开发的数据结构、C程序设计、离散数学等课程的“编程作业与实验可视化网络平台”,打破了程序运行调试黑箱。
学生可通过AnyviewC平台可在线编写和可视化调试自己编写的程序,并接受系统的实时自动测评,极大提高了学生程序设计训练的效率和效果。
教师也可从繁重的书面作业批改工作中解脱出来,转到有针对性的现场指导和习题讲评上。
借助于互联网,AnyviewC平台将实验室“全天候”和“跨时空”地拓广到每位学生个人的微机或移动终端上。
1.2 作业和实验安排根据教学计划,本学期数据结构课程进行首轮MOOC教学试验:1.课堂理论课40学时。
2.实验室研讨课16学时。
3.课程知识测验。
主要题型是选择题和填空式简答题。
自行登录课程网页,随课程进度完成测验。
4.算法设计作业和上机实验(课内、外结合,其中课内指导10机时)。
在“AnyviewC编程作业与实验可视化网络平台”上机完成约60道必做题,学有余力的同学还可以加做选做题。
5.抽象数据类型的实现(6学时设计性实验)。
实现一组抽象数据类型,并对所采用的存储结构和相关操作的实现进行讨论。
6.课程设计(一周综合性实验)。
第2章算法设计实验和上机2.1 数据结构习题概述数据结构的习题分为“基础知识题”和“算法设计题”两类。
在课程网站上,“基础知识题”主要供学生进行自测和复习之用,目的是帮助学生深化理解教科书的内容,澄清基本概念、理解和掌握数据结构中分析问题的基本方法和算法要点,为完成算法设计题做准备。
“算法设计题”则侧重于基本程序设计技能的训练,相对于实习题而言,这类编程习题属于偏重于编写功能单一的“小”程序的基础训练,然而,它是进行复杂程序设计的基础,是本课程习题作业的主体和重点。
各章的题量根据教学内容的多少和重要程度而定,几乎对教科书的每一小节都安排了对应的习题。
2.2 算法设计的上机作业要求1.使用Anyview C语言和算法书写规范写出书面作业的算法(函数),作为上机前的准备。
需要强调的是“算法的可读性”。
初学者总是容易忽视这一点。
算法不仅是开发程序的基础,还是一种在程序设计者之间交流解决问题方法的手段。
因此,可读性具有头等的重要性。
不可读的算法是没有用的,由它得到的程序极容易产生很多隐藏很深的错误,且难以调试正确。
一般地说,宁要一个可读性好、逻辑清晰简单、但篇幅较长的算法,也不要篇幅较小但晦涩难懂的算法。
算法的正确性力求在设计算法的过程中得到保证,然而一开始做不到这一点也没多大关系,可以逐步做到。
算法设计的正确方法是:首先理解问题,明确给定的条件和要求解决的问题,然后按照自顶向下,逐步求精,分而治之的策略逐一地解决子问题,最后严格按照和使用本章后面提供的算法书写规范和类C语言完成算法的最后版本。
按照规范书写算法是一个值得高度重视的问题。
在基础训练中就贯彻这一规范,不但能够有助于写出“好程序”,避免形成一系列难以纠正且遗害无穷的程序设计坏习惯,而且能够培养软件工作者应有的严谨的科学工作作风。
2.对函数进行静态检查修改,形成准备上机的程序文本。
多数初学者在编好程序后处于以下两种状态之一:一种是对自己的“精心作品”的正确性确信不疑;另一种是认为上机前的任务已经完成,查纠错误是上机的工作。
这两种态度是极为有害的。
事实上,非训练有素的程序设计者编写的程序长度超过50行时,极少不含有除语法错误以外的错误。
上机动态调试决不能代替静态检查,否则调试效率将是极低的。
静态检查主要有两种方法,一是用一组测试数据手工执行程序(通常应先分模块检查);二是通过阅读或给别人讲解自己的程序而深入全面地分析理解程序逻辑,在这个过程中再加入一些注解和断言。
如果程序中逻辑概念清楚,后者将比前者有效。
3.在“Anyview C编程作业与实验可视化网络平台”编辑提交程序,并在系统的自动测试和提示下,调试程序,直到能通过系统的测试。
“Anyview C编程作业与实验可视化网络平台”提供了程序可视化运行和调试的环境,为进行数据结构教学的师生提供了算法设计作业程序的可视化自动测试环境。
可在该集成环境编辑C 源程序,并对其进行可视化运行、分析和调试。
通过设置断点、单步或变换速度的连续运行,可在多个窗口上动态观察程序执行时的数据变量的物理和逻辑2D或3D视图,使得程序运行期间本来不可见的程序对数据的处理过程和数据之间的动态抽象关系全部可视化。
在提交算法设计作业程序时,系统自动进行可视化测试,评判作业程序的正确性。
通过对比“标准结果视图”和“作业结果视图”,作业者可对自己的程序进行直观的分析和排错。
关于该作业系统的使用,请参阅系统的帮助文档。
在调试过程中可以不断借助系统的可视DEBUG的各种功能,提高调试效率。
调试中遇到的各种异常现象往往是预料不到的,这时不应“苦思冥想”,而应动手确定疑点,通过修改程序来证实它或绕过它。
4.在调试程序的过程中,做好调试笔记,记录心得体会。
调试正确后,认真整理源程序及其注释,记录带有完整注释的且格式良好的源程序清单和结果。
一道算法设计作业文档包括:(1)上机前编写并经过静态检查的程序文本;(2)调试笔记;(3)最后程序文本,及通过时间。
第3章抽象数据类型的实现3.1 实验概要实验项目名称: 抽象数据类型的实现实验项目性质: 设计性实验所属课程名称: 数据结构实验计划学时: 63.2 实验目的对某组具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。
通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。
进而达到熟练地运用本课程中的基础知识及技术的目的。
3.3 预习与参考1.确定要实现的抽象数据类型,并对基本操作做适当的选取和增加;2.选择存储结构,并写出相应的类型定义;3.设计各基本操作的实现算法,并表达为函数形式;4.设计测试方案,编写主函数;5.将上述4步的结果写成预习报告。
3.4 实验要求和设计指标以教材中讨论的各种抽象数据类型为对象,利用C语言的数据类型表示和实现其中某个抽象数据类型。
可选的抽象数据类型如下表所列:注:如果基本操作数量较多,可选择实现其中一个基本操作子集。
实验要求如下:1.首先了解设计的任务,然后根据自己的基础和能力从中选择一题。
一般来说,选择题目应以在规定的时间内能完成,并能得到应有的锻炼为原则。
若学生对教材以外的相关题目较感兴趣,希望选作实验的题目时,应征得指导教师的认可,并写出明确的抽象数据类型定义及说明。
2. 实验前要作好充分准备,包括:理解实验要求,掌握辅助工具的使用,了解该抽象数据类型的定义及意义,以及其基本操作的算法并设计合理的存储结构。
3. 实验时严肃认真,要严格按照要求独立进行设计,不能随意更改。
注意观察并记录各种错误现象,纠正错误,使程序满足预定的要求,实验记录应作为实验报告的一部分。
4. 实验后要及时总结,写出实验报告,并附所打印的问题解答、程序清单,所输入的数据及相应的运行结果。
3.5 实验仪器设备和材料计算机学院实验中心。
编程环境:AnyviewCL可视化编程环境、TC++、C++Builder、VC++或Java。
3.6 调试及结果测试调试内容应包括:调试过程中遇到的问题是如何解决的以及对实验的讨论与分析;基本操作的时间复杂度和空间复杂度的分析和改进设想。
列出对每一个基本操作的测试结果,包括输入和输出,测试数据应完整和严格。
3.7 考核形式考核形式以实验过程和实验报告相结合的方式进行。
在实验完成后,应当场运行和答辩,由指导教师验收,只有在验收合格后才能算实验部分的结束。
实验报告作为整个设计性实验评分的书面依据。
设计性实验的成绩评定以选定题目的难易度、完成情况和实验报告为依据综合评分。
从总体来说,所实现的抽象数据类型应该全部符合要求,类型定义,各基本操作的算法以及存储结构清晰;各模快测试运行正确;程序的结构合理;设计报告符合规范。