欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构实验指导书.docx

    • 资源ID:17439521       资源大小:46.53KB        全文页数:33页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构实验指导书.docx

    1、数据结构实验指导书数据 结 构 实 验指 导 数 据 结 构实验指导南昌大学计算机系2011年3月前 言数据结构是计算机程序设计的重要理论技术基础,不仅是计算机学科的核心课程,而且己成为其它理工专业的热门选修课程。数据结构课程主要研究信息的逻辑结构及其基本操作在计算机中的表示和实现,其教学要求之一是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,但由于这门课程相对抽象且内容复杂,因此,在数据结构的整个教学过程中,辅助课堂教学的实验非常有助于帮助学生学好这门课程,培养学生独立思考和解决问题的能力,锻炼学生的动手能力,希望能对我校的数据结构教学工作有所帮助。目 录实验1:C+ 语言基础练习

    2、 1实验2:线性表及其应用 4实验3:栈和队列 12实验4:串及其应用 14实验5:数组 16实验6:二叉树及其应用 18实验7:图的应用 20实验8:查找、排序 22附录:实验报告格式 24实验1:C+ 语言基础练习一、实验目的对C+语言的复习,增强学生对结构体数组和指针的学习,尤以结构体的应用和指针的操作, 还有C+中类作为重点。二、问题描述1、 构造一个学生结构体数组,成员包括学号,姓名,四门成绩,以及平均成绩;2、 从键盘上输入学生的学号,姓名和四门成绩;3、 找出学生中考试没有通过的学生姓名并输出;找出考试在90分以上的学生并输出。三、实验要求1、 要求用链表存储学生的记录,并设计出

    3、输入和查找的基本操作算法。2、 在实验过程中,分析算法的时间复杂度和空间复杂度进行分析。四、实验环境PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、实验步骤1、用所选择的语言实现算法;3、 测试程序,并对算法进行时间和空间复杂度分析。六、实验报告要求实验报告应包括以下几个部分:1、 问题描述;2、 测试结果的分析与讨论,在测试过程中遇到的主要问题及采取的解决措施。3、 设计与实现过程中的体会,进一步的改进设想。4、 实现算法的程序清单,应有足够的注释。【算法实现】#define m 4 /*每个学生所学习课程数*/#defi

    4、ne NULL 0typedef struct stnode int id; /*学号*/ char name16; /*姓名*/ int class4; /*所有课程成绩分别存储在class0,class1,class2,中*/ float ave; /*学生个人所有课程的平均成绩*/ struct stnode *next; /*指针域*/ students; students *head; /*head 为指向学生单链表的头指针,且为全局变量*/ int n; /*参加成绩管理的班上的学生个数*/ average() /*求每门课程的平均成绩的函数*/ int i,j; /*i为课程数,

    5、j为学生数*/ float sum,aver; students *p; printf(Class Average resultn); printf(*Class*Class Average*n); for(i=0;inext) /*求某一门课程的所有学生的得分总和*/ sum=sum+p-classi; p=p-next; j+; aver=sum/j; /*求某一门课程的平均分*/ printf( Class%d %16.2fn,i+1,aver); printf(*nn); nopass() /*找含有课程不及格的学生,如有则输出它的学号、姓名、所有课程成绩、它的所有课程的平均分*/ i

    6、nt i,j; students *p; p=head; /*从第1个结点开始查找*/ printf(NO Pass resultn); /*输入不格的结果*/ printf(*ID*Name*Class*Average*n); while(p-next) /*最后一个结点无数据,不用输出*/ i=0; while(iclassiid,p-name); /*输出不及格学生的学号、姓名*/ for(i=0;iclassi); printf(%8.2fn,p-ave); break; else i+; /*查找该同学的下一门课程*/ p=p-next; /*查找下一个同学*/ printf(*nn

    7、); over90( ) /*查找所有课程个人平均分在90分以上(包含90分)的学生,如有则输出该学生的学号*/ students *p; p=head; /*从表头开始查找*/ while(p-next) /*直到倒数第二个结点为止 ,倒数第一个结点数据*/ if(p-ave=90.0) /*找到则输出该学生的学号*/ printf(n); printf(average over 90 its id is %dn,p-id); p=p-next; else /*否则查找下一个结点*/ p=p-next; main() students *p,*q; int i,j; float sum; c

    8、lrscr(); printf(please student num!n); scanf(%d,&n); /*n为学生个数*/ head=(students *)malloc(sizeof(students); q=head; for(i=0;iid); /*输入学生的学号*/ scanf(%s,&p-name); /*输入学生姓名*/ printf(n); printf(input student%i its scoren,i+1); for(j=0;jclassj); q=(students *)malloc(sizeof(students); q-next=NULL; p-next=q;

    9、 p=head; while(p-next) /*求每个学生个人所有课程的平均成绩*/ sum=0; for(j=0;jclassj; p-ave=sum/m; p=p-next; average(); nopass(); over90();实验2:线性表及其应用一、实验目的帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的操作和应用作为重点。二、问题描述1、 构造一个空的线性表L。2、 在线性表L的第i个元素之前插入新的元素e;3、 在线性表L中删除第i个元素,并用e返回其值。三、实验要求1、 分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线性

    10、表的基本操作算法。2、 在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行分析。四、实验环境PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、实验步骤 1、用学生选择的语言,设计出线性表的顺序和链表存储结构; 2、设计出这两种存储结构下的线性表的插入、删除算法;4、 用所选择的语言实现算法;5、 测试程序,并对不同存储结构下的算法分析。六、实验报告要求实验报告应包括以下几个部分:1、 问题描述;2、 设计两种存储结构与核心算法描述;3、 测试结果的分析与讨论,在测试过程中遇到的主要问题及采取的解决措施。4

    11、、 设计与实现过程中的体会,进一步的改进设想。5、 实现算法的程序清单,应有足够的注释。七、思考题1、 如何设计和实现基本线性表在两种存储结构下就地逆置算法?2.1 实现基本线性表的运算【算法实现】#define null 0typedef int ElemType;typedef struct node ElemType data; /*数据域*/ struct node *next; /*指针域*/Lnode; /*定义基本线性表的结点类型*/Lnode *head; /*定义指向基本线性表的表头指针为全局变量*/ int length (Lnode *p) /*求指针p指向的基本线性表的

    12、长度*/ int n=0; /*结点位置计数器*/ Lnode *q=p; /*临时指针q*/ while (q!=null) /*当基本线性表不空时,统计基本线性表中的结点数*/ n+; q=q-next; return(n); /*返回统计的结点数*/ElemType get(Lnode *p,int i) /*求指针p指向的基本线性表中的第i个结点的值*/ int j=1; /*查找结点位置的计数器*/ Lnode *q=p; /*定义临时指针 q*/ while (jnext; j+; if(q!=null) /*如果存在,则返回其数据域的值*/ return(q-data); els

    13、e /*否则,输出“位置参数不正确”*/ printf(位置参数不正确!n);int locate(Lnode *p,ElemType x) /*求指针p指向的基本线性表中的数据元素x的位置序号*/ int n=0; /*结点位置计数器*/ Lnode *q=p; /*定义临时指针 q*/ while (q!=null&q-data!=x) /*在基本线性表中查找数据元素x的位置*/ q=q-next; n+; if(q=null) /*如果不存在,则返回-1*/ return(-1); else /*否则返回结点的位置序号*/ return(n+1);void insert(ElemType

    14、 x,int i) /*在基本线性表的位置i,插入数据元素x*/ int j=1; /*结点位置计数器*/ Lnode *s,*q; /*定义临时指针变量p, q*/ s=(Lnode *)malloc(sizeof(Lnode); /*生成新结点*/ s-data=x; /*并将新结点的数据域置为x*/ q=head; if(i=1) /*如果插入位置是1,则将新结点插入到表头*/ s-next=q; head=s; else /*否则,查找插入位置*/ while(jnext!=null) q=q-next; j+; if(j=i-1) /*将新结点插入到位置i*/ s-next=q-ne

    15、xt; q-next=s; else /*插入位置不存在*/ printf(位置参数不正确!n); void delete(Lnode *p,int i) /*将指针p指向的基本线性表中的位置i的数据元素删除*/ int j=1; /*结点位置计数器*/ Lnode *q=p,*t; if(i=1) /*如果位置序号为1,则将基本线性表的第1个数据元素结点删除*/ t=q; p=q-next; else /*否则从表头查找相应的位置序号i*/ while(jnext!=null) q=q-next; j+; if(q-next!=null&j=i-1) /*如果找到位置i,则将该位置的结点删除

    16、*/ t=q-next; q-next=t-next; else /*否则位置i不存在*/ printf(位置参数不正确!n); if(t!=null) free(t);void display(Lnode *p) /*将指针p指向的基本线性表输出*/ Lnode *q; q=p; printf(单链表显示: ); if(q=null) printf(链表为空!); else if (q-next=null) /*如果基本线性表只有单个结点,则将其数据域输出*/ printf(%dn,q-data); else /*否则,逐个输出所有结点的数据域*/ while(q-next!=null) p

    17、rintf(%d-,q-data); q=q-next; printf(%d,q-data); printf(n);main() Lnode *q; int d,i,n,select,k,flag=1; clrscr(); head=null; printf(请输入数据长度: ); scanf(%d,&n); for(i=1;i=n;i+) printf(将数据插入到单链表中: ); scanf(%d,&d); insert(d,i); display(head); printf(n); while(flag) printf(1- 求长度 n); printf(2- 取结点 n); print

    18、f(3- 求值查找 n); printf(4- 增加结点 n); printf(5- 删除结点 n); printf(6- 退出 n); printf(input your select: ); scanf(%d,&select); switch(select) case 1: d=length(head); printf(n单链表的长度为:%d ,d); printf(n); display(head); printf(n); break; case 2: printf(n请输入取得结点的位置: ); scanf(%d,&d); k=get(head,d); printf(%dn,k); d

    19、isplay(head); printf(n); break; case 3: printf(n请输入要查找的数据: ); scanf(%d,&d); k=locate(head,d); printf(%dn,k); display(head); printf(n); break; case 4: printf(n请输入增加结点的位置:); scanf(%d,&k); printf(n请输入增加结点的数据:); scanf(%d,&d); insert(d,k); display(head); printf(n); break; case 5: printf(n请输入删除结点的位置: ); s

    20、canf(%d,&d); delete(head,d); printf(n); display(head); printf(n); break; case 6: flag=0; break; 2.2 基本线性表的就地逆置【算法实现】(1)顺序结构基本线性表的就地逆置算法实现。#define max 20 /*基本线性表中的最多元素个数为20*/typedef int datatype;typedef struct node datatype datamax; int length;sqlist; /*将基本线性表类型定义为sqlist 类型*/ sqlist p1; /*定义p1为基本线性表类

    21、型*/void reverlist() /*将顺序存储结构的基本线性表就地逆置*/ int i; for(i=0;ip1.length/2;i+) /*数据元素交换的次数为p1.length/2*/ p1.datap1.length+1=p1.datai; /*将第length+1个存储单元作为中间存储单元*/ p1.datai=p1.datap1.length-1-i; /*将相应位置的元素前后交换*/ p1.datap1.length-1-i=p1.datap1.length+1; main() int j; clrscr(); p1.length=0; printf(please inp

    22、ut 10 datan); for(j=0;j10;j+) /*创建初始基本线性表*/ scanf(%d,&p1.dataj); p1.length+; printf(the sqlist is:n); for(j=0;j10;j+) /*将创建成功的基本线性表输出*/ printf(%4d,p1.dataj); printf(nn); reverlist( ); /*将基本线性表逆置*/ printf(the result is:nn); for(j=0;j10;j+) /*将逆置后的基本线性表输出*/ printf(%4d,p1.dataj);(2)链式存储结构基本线性表的就地逆置算法实现

    23、。#include #define null 0#define LEN sizeof(struct stu)#define elemtype int typedef struct stu /*定义结点结构体类型*/ elemtype data; /*数据域*/ struct stu *next; /*指针域*/Llist;Llist *creatlist(int n) /*创建一个含 n 个结点的链表*/ Llist *head=NULL, *p; int i; for(i=0;idata); /*对新结点的数据域赋值*/ if(i=0) /*创建链式基本线性表的头结点*/ head=p; h

    24、ead-next=null; else /*创建链式基本线性表中的其他结点*/ p-next=head; head=p; return(head);void printlist ( Llist *head) /*输出链表中各结点信息*/ Llist *p; p=head; printf(基本线性表为: n); while(p!=NULL) printf(%d-,p-data); p=p-next; Llist *reverlist(Llist *head) /*逆置链式基本线性表*/ Llist *p,*q; if(head&head-next) /*当链式基本线性表中有两个以上的结点时,进行

    25、逆置*/ p=head; /*指针p指向指针head所指向的链式基本线性表*/ q=p-next; /*指针q指向链式基本线性表的第2个结点*/ p-next=null; /*在第1个结点与第2个结点间断开,原来的链式基本线性表变成两个链式基本线性表,分别由指针head和指针q指向*/ while(q) /*每次将指针q指向链表的第1个结点,插入到指针head指向链式基本线性表的最前面*/ p=q; q=q-next; p-next=head; head=p; return(head);main() Llist *head=NULL,*p; int n,num; clrscr(); printf(input number of node:); /*输入链式基本线性表的结点数*/ scanf(%d,&n); head=creatlist(n); /*创建链式基本线性表*/ printf(nn逆置前); printlist(head); /*输出创建成功的链式基本线性表*/ printf(


    注意事项

    本文(数据结构实验指导书.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开