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

合集下载

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

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

数据结构与算法实习_实验指导书数据结构与算法课程实习实验指导书目录实验一顺序表的基本操作 (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、请编程实现链栈的基本操作函数,并通过调用这些基本函数,实现十进制和八进制转换的功能。

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

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

《数据结构与算法》实验指导书大连民族学院信息与通信工程学院2013 年10 月10 日基本要求1.学生必须按时到实验室做实验,不得迟到早退,未经老师批准不得中途离开。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

《数据结构和算法》实验指导书实验及学时数分配序号实验名称学时数(小时)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、指定一个元素,删除此元素。

数据结构与算法实验报告

数据结构与算法实验报告

《数据结构与算法》综合实验报告系别:专业:学生姓名:指导教师:2011年 11月 25日实验目的掌握线性表的建立、插入、删除算法;掌握查找算法;掌握排序算法;实验要求使用C语言(环境任意)开发程序,能够对用户输入的任意一组数据,建立一个线性表,可以输出此线性表。

并且能够对此线性表进行插入、删除、查找、排序等操作。

程序流程建表如下:定义一个整型的数据类型data和next指针:定义头指针和当前结点指针,申请连续空间将单个字节大小复制给头指针,把头指针赋值给当前节点指针:若输入的数是0,则若输入不为0,把输入的数赋值给已申请的新结点,把新结点赋给当前节点的next域,再把新结点赋值给当前结点,以此方法重复执行得到如下链表:输出函数:把头指针赋值给当前结点指针,当当前节点的next域不为空时输出当前节点所指向的数据,把当前结点的next域赋值给当前节点,否则输出链表为空对此线性表进行插入、删除、查询、排序操作把已申请的结点数据域指向所输入的数再把插入w结点赋值头结点,是插入的位置,如果w=0则插入结点的next域赋值给头结点否则如果w>表长,则输出超出范围代码及运行结果(主要语句要求有注释)#include"stdafx.h"#include<stdio.h>#include<malloc.h>#define NULL 0typedef struct linknode{int data;struct linknode *next;}node;node *head;node *creat(){node *currnode,*newnode;int x;head=(node*)malloc(sizeof(node));currnode=head;do{scanf("%d",&x);newnode=(node*)malloc(sizeof(node));newnode->data=x;currnode->next=newnode;currnode=newnode;}while(x!=NULL);head=head->next;currnode->next=NULL;return head;};int length(){node *currnode;int i=0;currnode=head;while(currnode->data!=NULL){currnode=currnode->next;i++;};return i;};void print(){node *currnode;currnode=head;printf("链表如下....linklist");while(currnode->data!=NULL){printf("%d-->",currnode->data);currnode=currnode->next;};printf("NULL\n");printf("链表长度为........linklist length%d\n",length());};void delete1(){int x;node *delnode,*currnode;printf("输入要删除的数据......input delete data:");scanf("%d",&x);if(head->data==NULL) printf("此链表为空无法删除.....this linklist empty!\n"); if(head->data==x){delnode=head;head=head->next;free(delnode);if(head==NULL) printf("此链表为空.......this linklist enpty!");}else{currnode=head;delnode=currnode->next;while(delnode->data!=x&&delnode!=NULL){currnode=currnode->next;delnode=currnode->next;};if(delnode==NULL)printf("无此数据......no this data!\n");else{currnode->next=delnode->next;free(delnode);};};};void find(){node *currnode;int count=1,x;currnode=head;printf("输入要查找的数据.......input search data:");scanf("%d",&x);while(currnode->data!=NULL&&currnode->data!=x) {currnode=currnode->next;count++;};if(currnode->data!=NULL){printf("\n%d为第........is no.",currnode->data);printf("%d个数据........data。

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

数据与算法基础(数据结构)实验指导书
{
}
/*
*前置条件:顺序表存在
*输入:要删除元素位置i
*功能:删除顺序表中位置为i的元素
*输出:无
*后置条件:顺序表删除元素
*/
template <class T>
T SeqList<T>::Delete(int i)
{
}
/*
*前置条件:顺序表存在
*输入:无
*功能:输出顺序表长度
*输出:顺序表长度
*后置条件:顺序表不变
{
}
/*
*前置条件:顺序表存在
*输入:查询元素值x
*功能:按值查找值的元素并输出位置
*输出:查询元素的位置
*后置条件:顺序表不变
*/
template <class T>
int SeqList<T>::Locate(T x)
{
}
/*
*前置条件:顺序表存在
*输入:无
*功能:顺序表遍历
*输出:输出所有元素
cout<<endl;
cout<<"顺序表a的长度为:";
cout<<a.Length()<<endl; //返回单链表长度
cout<<endl;
cout<<"按位查询第二个元素:"<<endl;
cout<<"第二个元素为:";
cout <<a.Get(2)<<endl; //查找顺序表中第二个元素
}
cout<<endl;
cout<<"顺序表a中的元素有:"<<endl;

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

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

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

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

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

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

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

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

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

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

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

《数据结构实践》实验指导书2013年8月目录实验一 C语言编程复习 (3)实验二线形表基本操作的实现 (5)实验三栈和队列基本操作的实现及应用 (15)实验四二叉树算法的实现 (30)实验五图的算法的实现 (46)实验六查找算法的实现 (66)实验七排序算法的实现 (78)实验一 C语言编程复习一、实验目的1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。

2.理解指针与应用的区别。

3.掌握结构体的使用。

4.掌握简单排序方法。

二、实验内容1、使用指针和引用两种方式,完成两个学生的交换。

2、写一函数,根据成绩,对包含有n个学生的数组进行排序。

三、实验步骤1. 定义一个Student的结构体类型,包含学号、姓名、成绩等成员。

2. 分别写Swap1(Student *s1, Student *s2) 和Swap2(Student &s1, Student &s2),完成两个学生的交换。

3.写一排序函数SortStu(Student *s, int n),使用冒泡或者简单选择排序算法根据成绩完成学生的排序。

四、实现提示struct Student{char name[20]; //姓名char num[10]; //学号float score; //成绩};void Swap1(Student *, Student *);//交换两个结构体变量(指针)void Swap2(Student &, Student &);//交换两个结构体变量(引用)void SortStu (Student *,int);//按成绩(高到低)排序五、思考与提高思考为何void Swap1(Student, Student )这个函数无法实现两个学生的交换?六、完整参考程序void Swap1(Student *s1, Student *s2){Student temp;temp=*s1;*s1=*s2;*s2=temp;}void Swap2(Student &s1, Student &s2){STUDENT temp;temp=s1;s1=s2;s2=temp;}void SortStu(Student S[],int n){Student temp;for(int i=0;i<n;i++){int idx = i;for(int j=i+1;j<n;j++){if(S[idx].score>S[j].score)idx = j;}if (idx != i){temp= S[idx];S[idx] = S[i];S[i] = temp;}}}实验二线形表基本操作的实现一、实验目的1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。

《数据结构与算法》实验指导书(计科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. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"stdio.h"
#include"stdlib.h"
#define NULL 0
#define maxsize 50
typedef struct node{
char data;
struct node *lchild,*rchild;
}Bitree;
int a[maxsize];
int temp=0;
Bitree *Q[maxsize];
Bitree *Creatree(){
char ch;
int front,rear;
Bitree *T,*S;
T=NULL;
front=1;rear=0;
printf("建立二叉树,以@表示虚节点,以#结束输入:\n");
ch=getchar();
while(ch!='#'){
S=NULL;
if(ch!='@'){ //@表示虚节点不是虚节点是建立新节点
S=(Bitree *)malloc(sizeof(Bitree));
S->data=ch;
S->lchild=S->rchild=NULL;
}
rear++;Q[rear]=S; //将虚节点指针NULL或新节点地址入队
if(rear==1)
T=S; //输入第一个节点为根节点
else{
if(S!=NULL&&Q[front]!=NULL)
if(rear%2==0)
Q[front]->lchild=S;
else Q[front]->rchild=S;
if(rear%2==1) front++; //节点Q[front]的两个孩子已经处理完毕,front+1
}
ch=getchar();
}
return T;
}
void Inorder(Bitree *T){ //中序遍历二叉树,并将每个结点数据存入数组中if(T!=NULL){
Inorder(T->lchild);
printf("%d\t",T->data);
Inorder(T->rchild);
a[temp]=T->data;
temp++;
}
}
int Judge_bitree(int a[]){ //判断是否是二叉树int i,flag=1;
for(i=0;i<temp-1;i++){
if(a[i]>a[i+1]){
flag=0;
break;
}
}
return flag;
}
void main(){
int b=Judge_bitree(a);
Bitree *T;
T=Creatree();
if(b==1)
printf("给定二叉树是二叉排序树!\n");
if(b==0)
printf("给定二叉树不是二叉排序树!\n"); }。

相关文档
最新文档