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

    《应用数据结构》实验指导书.docx

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

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

    《应用数据结构》实验指导书.docx

    1、应用数据结构实验指导书应用数据结构实验指导书课程编号:4170159110课程名称:应用数据结构/Applied Data Structure实验学时:16适应专业:工科类承担实验室:管理学院实验中心一、实验目的和任务1实验教学的目的 本课程的教学要求之一是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,其重要程度绝不亚于知识传授。实验的作用在于帮助学生深入理解教材内容,巩固基本概念,促使学生在动手过程中进一步体会C语言中数据结构的运用技巧,并锻炼学生在调试过程中分析和发现问题的能力。2实验教学的要求学生应掌握C语言基本编程能力并运用数据结构的原理和方法解决具体问题。除按时上机外,学生

    2、应具备构造算法并用程序实现的能力;在程序调试过程中,学生应能正确解读程序的错误提示并找到有效的解决办法。此外,规范书写算法也是一个值得高度重视的问题,教师有责任在教学过程中提醒学生,避免形成一系列难以纠正且贻害无穷的程序设计坏习惯。此外,本门课程设计的算法比较多,要求教师熟练掌握C语言和数据结构各类算法,并能准确理解和回答学生提出的编程问题。二、实验项目及学时分配序号实 验 项 目 名 称实验学时实验类型开出要求1线性数据结构算法验证4验证及演示必做2非线性数据结构算法验证4验证及演示必做3查找及排序4验证及演示必做4综合算法设计4综合必做三、参考资料李业丽、郑良斌编著,数据结构(C)实验教程

    3、,北京理工大学出版社,2005年12月出版严蔚敏,吴伟民编著,数据结构习题集(C语言版),清华大学出版社,1999年2月出版。四、单项实验的内容和要求(包括实验所用的主要仪器设备,实验所需主要耗材)实验一 线性数据结构算法验证1实验目的与意义1) 熟悉C语言的上机环境,进一步掌握C语言的结构特点2) 掌握线性表的顺序存储结构的定义及C语言实现3) 掌握线性表的链式存储结构单链表的定义及C语言实现4) 掌握线性表在顺序存储结构即顺序表中的各种基本操作5) 掌握线性表在链式存储结构单链表中的各种基本操作6) 掌握栈的顺序表示和实现7) 掌握栈的链式表示和实现8) 掌握队列顺序表示和实现9) 掌握队

    4、列链式表示和实现2基本原理和方法本实验涉及各类线性数据结构线性表、栈和队列等。单链表的各种操作,包括单链表的建立,结点的查找、插入、删除等基本运算。链表中插入结点的指针变化和删除p所指结点的指针变化参见讲义。栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为p-top=MAXNUM-1,栈满时,不能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。注意:1 顺序栈中元素用向量存放。2 栈底位置是固定不变的,可设置在向量两端的任意一个端点。3

    5、 栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置。队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。入队时,将新元素插入rear所指的位置,然后将rear加1,出队时,删去front所指的元素,然后将front加1并返回被删除元素。顺序队列中的溢出现象:1 “下溢”现象。当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。2 “真上溢”现象。当队列满时,做进找运算产生空间溢出的现象。“真上溢”是一种出错状态,应设法避免。3 “假上溢”现象。由于入队和出队操作中,头尾指针只增加不减小,致使被删

    6、元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空闻的规模时,也可能由于尾指针己超越向量空间的上界而不能做入队操作。该现象称为“假上溢”现象。3主要仪器设备及耗材安装有Turbo C+ 3.0或Visual Studio 2012运行环境的电脑,无耗材要求。4实验方案或技术路线本实验含有三部分内容线性表、栈和队列。A线性表部分采取建立学生成绩表的方法实现。即建立学生成绩单链表,链表中每个结点由4个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域、要求完成的四项功能可写成四个函数,登记学生成绩对应建立学生单链表的功能,后三个功能分别对应单链表的查询、插入与删除三大基

    7、本操作。该系统中的数据采用线性表中的链式存储结构即单链表来存储,用结构体类型定义每个学生记录,故该单链表中每个结点的结构可描述为:#define MAXLEN 100typedef struct node int num;/学号 char nameMAXLEN;/姓名 float score;/成绩 struct node *next; linklist;B栈部分此部分的算法独立性较强,因此可直接采用教材或讲义上的算法实现,但教材或讲义上的算法并非可执行的算法,故学生须自行进行算法上的转换。C队列部分本实验主要由教师课堂演示,以一个具体的实例机场事件模拟来实现。5实验内容及步骤A线性表部分学生

    8、成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本实验是对学生的成绩管理作一个简单的模拟,用菜单选择操作方式完成下列功能:1 登记学生成绩2 查询学生成绩3 插入学生成绩4 删除学生成绩【参考程序】/*头文件hh.h的内容*/#include#include#include#define MAXLEN 100typedef struct node int num; char nameMAXLEN; int score; struct node *next; list;/*头文件creat.h的内容*/#includehh.hlist *create() list *head, *p,

    9、*r; int i, n; head=(list *)malloc(sizeof(list); head-next=NULL; r=head; printf(请输入学生人数:n); scanf(%d,&n); for(i=l; inum); printf(输入学生的姓名:n); scanf(%s, p-name); printf(输人李生的成绩:n); scanf(%d, &p-score); p-next=NULL; r-next=p; r=r-next; return(head);/*以下是头文件insert.h的内容*/list *insert(list *h) list *p,*q,*

    10、r,*head; head=r=h; p=h-next; q=(list *)malloc(sizeof(list); printf(输入待插入学生的学号:n); scanf(%d,&q-num); printf(输入姓名:n); scanf(%s, q-name); printf(输入成绩:n); scanf(%d, &q-score); q-next=NULL; while(p) r=p; p=p-next; r-next=q; r=r-next; return(head);/*以下是头文件find.h的内容*/void find(list *h) int k; list *p; p=h-

    11、next; printf(输入要查找学生的学号:n); scanf(%d, &k); while(p&p-num!=k) p=p-next; if(p) printf(学号t姓名t成绩n); printf(%dt%st%dn,p-num,p-name,p-score); else printf(没找到!n);/*以下是头文件del.h的内容*/list *del(list *h) int k; list *p, *q; q=h; p=h-next; printf(请输入待删除学生的学号:n); scanf(%d,&k); while(p&p-num!=k) q=p; p=p-next; if(

    12、p) q-next=p-next; free(p); else printf(没有这个学生成绩,无法删除!n); return(h);/*以下是头文件output.h的内容*/void output(list *h) list *p; p=h-next; while(p!=NULL) printf(学号t姓名t成绩tn); printf(%dt%st%dn,p-num,p-name,p-score); p=p-next; /*以下是主程序*/#includecreat.h#includefind.h#includeinsert.h#includeoutput.h#includedel.hmai

    13、n() list *p; int k; /*控制循环的标志*/ while(1) printf( -n); printf( | 学生成绩管理 |n); printf( |n); printf( | 1.登记成绩 |n); printf( | 2.查询成绩 |n); printf( | 3:插入成绩 |n); printf( | 4.删除成绩 |n); printf( | 5.输出所有学生成绩 |n); printf( | 0.退出程序 |n); printf( -n); printf( 请输入你的选择n); scanf(%d,&k); switch(k) case 1: p=create();

    14、 break; case 2: find(p); break; case 3: p=insert(p); break; case 4: p=del(p); break; case 5: output(p); break; case 0: exit(0); default: printf(选择错误,重新开始!n); B栈部分编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:1 初始化顺序栈2 插入元素3 删除栈顶元素4 取栈顶元5 遍历顺序栈6 置空顺序栈【参考程序】#include#include#define MAXNUM 20#define ElemType

    15、int/*定义顺序栈的存储结构*/typedef struct ElemType stackMAXNUM; int top; SqStack;/*初始化顺序栈*/void InitStack(SqStack *p) if(!p) printf(Error); p-top=-l;/*入栈*/void Push(SqStack *p, ElemType x) if(p-topstack+p-top=x; else printf(Overflow!n);/*出栈*/ElemType Pop(SqStack *p) ElemType x; if(p-top!=O) x=p-stackp-top; pr

    16、intf(栈顶元%d已经被删除!n, p-stackp-top); p-top=-; return(x); else printf(Underflow!n); return(0); /*获取栈顶元素*/ElemType GetTop(SqStack *p) if(p-top!=0) return (p-stackp-top); else printf(Underflow!n); return(0); /*遍历顺序栈*/void OutStack(SqStack *p) int i; printf(n); if(p-toptop; i=O; i-) printf(第%d个数据是:%6dn, i,

    17、 p-stacki);/*置空顺序栈*/void setEmpty(SqStack *p) p-top=-1; /*主函数*/main() SqStack *q; int y, cord; ElemType a; do printf(n第一次使用必须初始化!n); printf(n); printf(n 主菜单n); printf(n 1 初始化顺序栈n); printf(n 2 插入一个元素n); printf(n 3 删除栈顶元素n); printf(n 4 取栈顶元素n); printf(n 5 置空顺序栈n); printf(n 6 结束程序运行n); printf(n-n); pri

    18、ntf(请输入您的选择( 1, 2, 3, 4, 5, 6): ); scanf(%d, &cord); printf(n); switch(cord) case 1: q=(SqStack*)malloc(sizeof(SqStack); InitStack(q); OutStack(q); break; case 2: printf(请输入要插入的数据元素:a=); scanf(%d,&a); Push(q, a); OutStack(q); break; case 3: Pop(q); OutStack(q); break; case 4: y=GetTop(q); printf(n栈顶

    19、元素为:%dn, y); OutStack(q); break; case 5: setEmpty(q); printf(n 顺序栈被置空!n); OutStack(q); break; case 6: exit(0); while (cord=6);C队列部分熟悉讲义中队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能:1 模拟一个机场飞机起降的过程2 机场仅有一条跑道,要求起飞与降落不能同时进行3 进场飞机若暂时没有跑道可用须在空中盘旋等候4 离场飞机若暂时没有跑道可用须在地面排队等候5 仅当空中无飞机等待降落时地面飞机方可起飞6 飞机的申请进场、降落、申请离场和起飞分别视为独立

    20、事件7 每个事件的发生占用一个时间单位。除降落和起飞外,各事件可以同时发生【参考程序】#define MAXQUEUE 5 /* use a small value for testing */#include #include #include #include #include #include #include typedef enum boolean False, True Boolean;typedef enum action ARRIVE, DEPART Action;typedef struct plane int id; /* identification number of

    21、airplane */ int tm; Plane; /* time of arrival in queue */typedef Plane QueueEntry;typedef struct queue int count; /* number of airplanes in the queue */ int front, rear; /* front and rear of the queue */ QueueEntry entryMAXQUEUE; Queue;/* CreateQueue: create the queue. Pre: None. Post: The queue q h

    22、as been initialized to be empty. */void CreateQueue(Queue *q) q-count=q-front=0; q-rear=-1;/* Error: display an error message. Pre: message is the error message to display. Post: The error message has been printed to stderr and the program terminates. */void Error(char *message) fprintf(stderr, Erro

    23、r: %sn, message); exit (1);/* UserSaysYes: True if the user wants to continue execution. Pre: None. Post: Returns True if the users answer begins with either y or Y, False if the user responds with any response beginning with either n or N.*/Boolean UserSaysYes(void) int c; printf( (y/n)? ); do whil

    24、e (c=getchar()=n) ; /* Ignore new line character. */ if (c=y | c=Y | c=n | c=N) return (c=y | c=Y); printf(Please respond by typing one of the letters y or nn); while (1);/* Randomize: set staring point for pseudorandom integers. */void Randomize(void) srand(unsigned int)(time(NULL)%10000);/* Start:

    25、 print messages and initialize the parameters. Pre: None. Post: Asks user for responses and initializes all variables specified as parameters. Uses: UserSaysYes. */void Start(int *endtime, double *expectarrive, double *expectdepart) Boolean ok; printf( This program simulates an airport with only one

    26、 runway.n One plane can land or depart in each unit of time.n Up to %d planes can be waiting to land or take off at any time.n, MAXQUEUE); printf( How many units of time will the simulation run? ); scanf(%d, endtime); Randomize(); /* Initialize random number generation. */ do printf( Expected number

    27、 of arrivals per unit time (real number)? ); scanf(%lf, expectarrive); printf( Expected number of departures per unit time? ); scanf(%lf, expectdepart); if (*expectarrive0.0 | *expectdepart1.0) printf( The airport will become saturated. Read new numbers?); ok=!UserSaysYes( ); else ok=True; while (ok=False); printf(n);/* PoissonRandom: generate a pseudorandom integer according to the Poisson distribution. Pre: None. Post: generate


    注意事项

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

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




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

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

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


    收起
    展开