ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:33.17KB ,
资源ID:5036767      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5036767.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

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

数据结构实验指导书.docx

1、数据结构实验指导书实验一 顺序表操作实验二 栈和队列实验三 栈实验四 二叉树的操作实验五 图的遍历操作实验六 数据查找实验七 哈希表设计实验八 排序实验一 顺序表操作一、实验目的1熟悉C语言的上机环境,掌握C语言的基本结构。2会定义线性表的顺序存储结构。3熟悉对顺序表的一些基本操作和具体的函数定义。二、实验要求1认真阅读和掌握本实验内容所给的全部程序。2保存和打印出程序运行结果,并结合程序进行分析。注意事项在做第一次“数据结构”课程实验之前,要在硬盘(e:)上建立好自己的工作目录,专门来存储你所做的实验程序及相关信息,以后每次做实验都采用这个目录。三、实验内容a. 以输入整形数据为主,输入后按

2、“?”结束输入。b. 程序所能表达到的功能为:实现顺序表的创建、查找、插入、删除等功能。c. 程序运行后,输入数据并执行。#include stdio.h#include conio.h#define MaxSize 50typedef char elemtype;typedef struct node elemtype dataMaxSize;int len;lnode,*List;void init(List L) L-len=0;int length(List L) return L-len;elemtype getnode(List L,int pos)if(posL-len) pri

3、ntf(error);else return L-datapos-1;int locate(List L,elemtype x)int i=0;while(ilen & L-datai!=x) i+;if(i=L-len) return -1;else return(i+1);void insert(List L,int pos,elemtype x)int j;if(posL-len+1) printf(insert errorn);else L-len+;for(j=L-len;j=pos;j-)L-dataj=L-dataj-1;L-datapos-1=x; ;void delnode(

4、List L,int pos) int j;if(posL-len)printf(del errorn);else for(j=pos;jlen;j+)L-dataj-1=L-dataj; L-len-;void print(List L)int i;for(i=1;ilen;i+)printf(%c-,L-datai-1);printf(%c,L-dataL-len-1);main()int i=1,n;lnode L;char ch,x;init(&L);printf(nnn*顺序表演示程序*n);printf(请输入你想建立的顺序表的元素,以?结束:); ch=getchar();whi

5、le(ch!=?)insert(&L,i,ch);i+;ch=getchar();printf(你建立的顺序表为:);print(&L);printf(n顺序表的长度为:%d,L.len);printf(n输入你想查找的元素:);fflush(stdin);scanf(%c,&x);printf(你查找的元素为%c序位为%d,x,locate(&L,x); printf(n输入你想查找的元素序位:);scanf(%d,&n);printf(n你查找的元素为:%c,getnode(&L,n); printf(n输入你想插入的元素以及序位:);fflush(stdin);scanf(%c,%d,&

6、x,&n);insert(&L,n,x);printf(n插入后顺序表为:);print(&L);fflush(stdin);printf(n请输入你想删除的元素序位:);scanf(%d,&n);delnode(&L,n);printf(n删除后的顺序表为:);print(&L);getch();四、测试结果运行程序,屏幕显示:“请输入你想建立的顺序表的元素,以?结束:”输入:54381你建立的顺序表为:54381顺序表的长度为:5输入你想查找的元素:4你查找的元素为4序位为2输入你想查找的元素序位:4你查找的元素为:8 输入你想插入的元素以及序位::6,3插入后顺序表为:546381请输入

7、你想删除的元素序位:5删除后的顺序表为:54631实验二 栈和队列一、 实验目的:1、 掌握队列和栈的顺序存储结构和链式结构,以便在实际背景下灵活运用。2、 掌握栈和队列的特点,即先进后出与先进先出的原则。二、 实验内容:停车场管理问题描述设有一个可以停放N辆汽车的狭长停车场,它只有一个大门利用供车辆进出,车辆按到达停车场时间早晚依次可以从停车场最里面向大门处停放(最先到达的第一辆放在停车场最里面)。然后停车场已放满N辆车,则后来的车辆只能停在车场大门外的便道上等待,一旦停车场有车开走,在它之后进入停车场的车必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停

8、车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的未能进停车场就离去,允许它走,不收停车费,而且仍然保持在便道上的等待的车辆的次序。编制一程序模拟停车场的管理。实现要求要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交的费用和它在停车场内停留时间;实现提示汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(A,1,5)表示1号牌照车在5这个时刻到达,而(D,5,20)表示5号车在20这个时刻离去,整个程序可以在输入信息为(E,0,0)时结束。本题可用栈和队列来实现。程序实现(1) 设计思想根据题目要求,停车场只有一

9、个大门,因此可用一个栈来模拟;而当栈满后,继续来的车辆只能停在便道上,根据便道停车的特点,可知这可以用一个队列来模拟,安排队的车辆先离开便道,进入停车场。由于在停车场中间的车辆可以提出离开停车场,而且要求在离开车辆到停车场大门之间的车辆都必须先离开停车场,让此车离去,然后再让这些车辆依原来的次序进入停车场,因此在一个栈和一个队列的基础上,还需要有一个地方保存为了让路离开停车场的车辆,很显然这也应该用一个栈来模拟。因此本题中用到两个栈和一个队列。对于停车场和车辆规避所,有车辆进入和车辆离去两个动作,这就是栈的进栈和出栈操作,只是还允许排在中间的车辆先离开停车场,因此在栈中需要进行查找。而对于便道

10、,也有入队列和出队列的操作,同样允许排在中间的车辆先离去队列。这样基本动作只需利用栈和队列的基本操作就可实现。三、 详细设计:#include stdio.h#define N 5 /*定义停车场长度*/#define M 10typedef struct /*定义栈元素的类型*/int num; int arrtime;elemtype;typedef struct /*定义栈*/elemtype stackN; int top;stack;typedef struct node /*定义队列节点类型*/int num; struct node*next;queneptr;typedef s

11、truct /*定义队列*/queneptr*front,*rear;quene;void initstack(stack*s) /*初始化栈*/s-top=-1;int push(stack *s,elemtype x) /*数据元素X进入指针S所指的栈*/if(s-top=N-1) return(0); elses-stack+s-top=x; return(1); elemtype pop(stack *s)elemtype x; if(s-topstacks-top; s-top-; return x; void initquene(quene*s) /*初始化队列*/s-front=

12、(queneptr*)malloc(sizeof(queneptr); /*产生一个新结点,作为头结点*/ s-rear=s-front; s-front-next=NULL; s-front-num=0; /*头结点的NUM保存队列元素的个数*/void enquene(quene *s,int num) /*数据入队列*/queneptr *p; p=(queneptr*)malloc(sizeof(queneptr); p-num=num; p-next=NULL; s-rear-next=p; s-rear=p; s-front-num+;int delquene(quene*s)qu

13、eneptr*p; int n; if (s-front=s-rear) return(0); /*如果队列空*/ elsep=s-front-next; s-front-next=p-next; if (p-next=NULL) s-rear=s-front; n=p-num; free(p); s-front-num-; return(n); void arrive(stack*s1,quene*p,elemtype x)int f; f=push(s1,x); /*新到达的车辆入停车栈*/ if (f=0) enquene(p,x.num); /*如果停车场满,就进入队列*/ print

14、f(the %d car stops the %d seat of the quenen,x.num,p-front-num); else printf(the %d car stops the %d seat of the stackn,x.num,s1-top+1);void leave(stack *s1,stack *s2,quene*p,elemtype x) /*处理车辆离去函数*/int n,f=0; elemtype y;queneptr *q; while(s1-top-1)&(!f) y=pop(s1); if(y.num!=x.num) n=push(s2,y); els

15、e f=1; if(y.num=x.num) /*如果栈顶元素不是要离开的车辆,就将其放入车辆规避所*/ printf(the money of the %d is %d yuann,y.num,(x.arrtime-y.arrtime)*M); while(s2-top-1) y=pop(s2); f=push(s1,y); n=delquene(p); if(n) /*在停车场中找到要离开的车辆*/ y.num=n; y.arrtime=x.arrtime; f=push(s1,y); printf(the %d car stops the %d seat of the stakn,y.n

16、um,s1-top+1); else while(s2-top-1) /*车辆规避所不空,将其全放回停车场*/ y=pop(s2);f=push(s1,y); q=p-front;f=0; while(f=0&q-next!=NULL) if(q-next-num!=x.num) /*如果便道上有车辆,将第一辆车放入停车场*/ q=q-next; else q-next=q-next-next; p-front-num-; if(q-next=NULL) p-rear=p-front; printf(the %d car leave the quenen,x.num); f=1; if(f=0

17、) /*在便道上没有找到要离开的车辆,输出数据错误*/ printf(error!the stack and the quene have no the%d carn,x.num); void main() /*停车场模拟管理程序*/char ch; stack *s1,*s2; quene*p; elemtype x; int i=1; clrscr(); s1=(stack*)malloc(sizeof(stack); s2=(stack*)malloc(sizeof(stack); p=(quene*)malloc(sizeof(quene); initstack(s1);initsta

18、ck(s2); /*初始化停车规避所栈*/ initquene(p); /*初始化便道队列*/ while(i) printf(what do you want to do?n); printf(input-(Add/Del/Exit):); scanf(%c,&ch); switch (ch) casea:printf(input the number:n); scanf(%d,&x.num); printf(input the time:n); scanf(%d,&x.arrtime); arrive(s1,p,x); /*车辆到达*/ break; cased:printf(input

19、the number:n); scanf(%d,&x.num); printf(input the time:n); scanf(%d,&x.arrtime); leave(s1,s2,p,x); /*车辆离开*/ break; casee:printf(the end!); i=0; break; default:printf(input error!-please input again:n);break; ch=getchar(); 四、 使用说明:1、 按提示输入车进入停车场的情况2、 按提示输入车离开停车场的情况3、 车离开后计算车进入停车场的时间并得出应收费用。五、 测试结果:运行

20、程序后,屏幕出现what do you want to do?Input -(add/del/exit)/*此时停车场为空,a是车进入停车场,d是车离开停车场,e是程序结束。*/ainput the number: /*要求输入停车牌号*/1input the time: /*要求输入停车时间*/2:/*屏幕返回到提示,可以按以上方法输入多个数据*/:what do you want to do ?input -(add/del/exit) /*当输入多个数据后,可以设计车离开*/dinput the number: /*要求输入要离开车牌号*/input the time: /*要求输入车离

21、开的时间*/5the money of the 1 is 30 yuan /*输出结果,1小时10元计价收费*/实验三 栈一、实验目的:1 熟练掌握栈的结构,以及这种数据结构的特点;2 能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空的判断条件及描述方法;二、实验内容:计算表达式的值【问题描述】计算用运算符后缀法表示的表达式的值。后缀表达式也称逆波兰表达式,比中缀表达式计算起来更方便简单些,中缀表达式要计算就存在着括号的匹配问题,所以在计算表达式值时一般都是先转换成后缀表达式,再用后缀法计算表达式的值。如:表达式(a+b*c)/d-e用后缀法表示应为abc*+d/e-。只考虑四则算术运

22、算,且假设输入的操作数均为1位十进制数(09),并且输入的后缀形式表达式不含语法错误。【数据描述】#define add 43 /*运算符加号+的ASCII码*/#define subs 45 /*运算符减号-的ASCII码*/#define mult 42 /*运算符乘号*的ASCII码*/#define div 47 /*运算符除号/的ASCII码*/#define MAXSIZE 100typedef struct int stkdataMAXSIZE;/用数组来表示栈空间,定义长度为MAXSIZE的栈 int top; /栈顶指针STKzone;typedef STKzone *STK

23、;typedef enumtrue=1,false=0 bool;typedef enumok,error status;【算法描述】用流程图表示见图3-4。【C源程序】#include#define add 43 /*运算符加号+的ASCII码*/#define subs 45 /*运算符减号-的ASCII码*/#define mult 42 /*运算符乘号*的ASCII码*/#define div 47 /*运算符除号/的ASCII码*/#define MAXSIZE 100typedef struct int stkdataMAXSIZE;/*用数组来表示栈空间,定义长度为MAXSIZE

24、的堆栈*/ int top; /*栈顶*/STKzone;typedef STKzone *STK;typedef enumtrue=1,false=0 bool;typedef enumok,error status;STKzone expSTKzone;STK expSTK;STK initSTK(STKzone *stack_zone) /*执行栈初始化,建栈指针*/ STK p; p=stack_zone; p-top=0;status push(int *term,STK pstk)/*将一结构型数据送入栈中*/ if(pstk-top=MAXSIZE) return error;

25、/*栈满,进栈失败*/ pstk-stkdatapstk-top =*term;(pstk-top)+;/*栈顶指针移动*/return ok;/*push*/bool emptySTK(STK pstk)/*判断栈是否为空栈*/return(pstk-top=0);status pop(int *pdata, STK pstk) /*从栈中取出一结构型数据*/if(emptySTK(pstk) return error;(pstk-top)-;/*退栈*/ *pdata =pstk-stkdatapstk-top; return ok;void synerror() printf(n表达式语

26、法错!);exit();int eval(char tag,int a1,int a2) switch(tag) case add:return(a1+a2);case subs:return(a1-a2);case mult:return(a1*a2);case div:return(a1/a2);main() char c; int opd1,opd2,temp,c1; expSTK=initSTK(&expSTKzone); printf(n后置表达式: ); while(c=getchar()!=n) if(c= ) continue;if(c47)&(c58) /*判断是否是09的字

27、符*/ putchar(c);c1=c-48; /*把输入的字符型数字转换成数字*/ if(push(&c1,expSTK)=error)/*运算分量进栈*/ printf(n表达式太长n); exit();else if(c=add)|(c=subs)|(c=mult)|(c=div) putchar(c); if(pop(&opd1,expSTK)=error) /*将运算量1出栈*/ synerror();if(pop(&opd2,expSTK)=error) /*将运算量2出栈*/synerror(); temp=eval(c,opd2,opd1);/*计算得到结果*/ push(&temp,expSTK);/*将运算结果进栈*/ else synerror();/*出现非法字符*/*whil

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1