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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机软件基础二数据结构实验指导.docx

1、计算机软件基础二数据结构实验指导实验一 线性表的应用1实验名称商品信息管理程序。2实验学时4学时。3. 实验目的(1)复习和巩固线性表中的相关概念和知识;(2)熟悉线性表的顺序存储或链式存储结构的具体实现方法;(3)掌握线性表的建立、插入、删除、查找、输出等基本操作算法;(4)提高灵活运用所学算法、采用顺序线性表或链式线性表处理实际问题的能力;(5)提高学生综合运用所学知识分析问题和解决问题的能力。4实验要求本实验要求使用高级编程语言C语言编写一个商品信息管理程序,商品信息表采用顺序存储结构或链式存储结构存放。该程序中各功能均需采用独立的模块实现;程序应具有菜单选择功能;并允许用户在运行该程序

2、过程中多次选择执行不同的功能。要求学生对整个系统的框架进行设计,规划数据的存储结构,编写出重要模块的算法。每人一组完成,上机之前要有预习准备。有兴趣的同学可在程序中增加商品入库的功能。实验设备:PC机一台,C语言IDE编程环境Micorosoft Visual C+ 6.0或者Turbo C 2.0。5. 实验内容编写一个超市商品信息管理程序,实现超市商品信息管理中的录入、插入、删除、查找、销售及显示等功能。商品信息包括商品的编号、名称、单价和数量等四项。具体商品信息的数据类型定义如下:typedef struct goodstype long int num; char name20; in

3、t price;int stock;GOODS; (1)录入功能:录入商品信息表中所有商品的信息,以顺序或链式存储结构存放,原始商品信息表中的商品信息按商品编号升序排列;(2)插入功能:输入一种新商品的信息,将新商品信息插入到线性表中的恰当位置,使商品信息表中的商品信息依然按商品编号有序排列;(3)删除功能:给定一种商品的编号,删除线性表中该商品的信息;(4)查找功能:给定一种商品的编号,在线性表中查找该商品的信息;(5)显示功能:输出线性表中所有商品的信息;(6)销售功能:输入客户选择的商品编号和所需数量,若该商品存在,计算应付的钱数并修改该商品的库存量;若无该商品或商品数量不足,则给出相应

4、的提示信息;(必做)能够一次售出多种不同的商品并打印购物小票(选做)6. 算法说明(1)录入功能即完成线性表的建立,输入商品信息时,最好以结束标志控制输入过程的进行。例如当输入的商品编号为-1时,商品信息录入结束。参考程序一:(顺序线性表)typedef struct GOODS listMAXLEN; int length;SeqList; /顺序表类型定义,list为存放元素值的一维数组,length用于存放表长void Init_List(SeqList* L)/初始化顺序表,以输入商品编号为-1作为输入结束标志long tnum; int n=0; printf(input num:)

5、; scanf(%ld,&tnum); while (tnum!=-1) L-listn.num=tnum; printf(input name:); scanf(%s,(L-listn).name); printf(input price:); scanf(%d,&(L-listn.price); printf(input stock:); scanf(%d,&(L-listn.stock); n+; printf(input num:); scanf(%ld,&tnum); L-length=n; 参考程序二:(链式线性表)/结点类型定义,data用于存放结点的数据值,next用于存放下一

6、结点的地址typedef struct nodetypeGOODS data; struct nodetype* next; NODE; NODE* Create_Link() /尾接法创建链表,以输入商品编号为-1作为输入结束标志NODE *head,*p,*s; GOODS x; long tnum; head=(NODE*)malloc(LEN); head-next=NULL; p=head; printf(input num:); scanf(%ld,&tnum); while (tnum!=-1) x.num=tnum; printf(input name:); scanf(%s,

7、x.name); printf(input price:); scanf(%f,&x.price); printf(input stock:); scanf(%d,&x.stock); s=(NODE*)malloc(LEN); s-data=x; s-next=NULL; p-next=s; p=s; printf(input num:); scanf(%ld,&tnum); return(head); (2)插入功能编写该插入算法的关键是要找到插入的恰当位置;若从线性表的前端向后找插入位置,则需找到第一个比待插元素的关键字大的元素,新元素插在该元素之前;若从线性表的后端向前找插入位置,则需

8、找到第一个比待插元素关键字小的元素,新元素插在该元素之后。插入算法的程序流程图如图1-1所示。注意:在链式线性表的查找只能从前向后找;顺序线性表插入新元素之前,必然要对插入位置后面的所有元素进行后移。(3)删除功能编写该算法的关键是先要在线性表上找到待删元素,之后才能进行删除。删除算法的程序流程图如图1-2所示。(4)查找功能查找的过程和思想与删除算法中进行的查找相同。参考程序一:(顺序线性表)int SearchList(SeqList* L,long tnum)/在顺序表上从后向前查找编号为tnum的元素/查找成功返回元素所在的位置,查找失败返回-1int i; i=L-length-1;

9、 while(L-listi.num!=tnum&i=0) i-; return(i);参考程序二:(链式线性表)NODE* SearchLink(NODE* head,long knum)/在单链表上从前向后查找编号为tnum的结点/查找成功返回结点的地址,查找失败返回空指针NULLNODE *p; p=head-next; while(p!=NULL&p-data.num!=knum) p=p-next; return(p);(5)显示功能即对线性表中的元素从前到后逐个进行输出。参考程序一:(顺序线性表)void OutputList(SeqList* L)/显示功能函数,逐个输出顺序表中

10、各个元素的值int i;printf( num name price stockn);for(i=0;ilength;i+) printf(%6ld%16s%10d%6dn,L-listi.num,L-listi.name,L-listi.price,L-listi.stock);参考程序二:(链式线性表)void OutputLink(NODE *head)/显示功能函数,逐个输出链表中各个结点的数据值NODE* p; p=head-next; printf( num name price stockn); while(p!=NULL) printf(%6ld%16s%10.2f%6dn,p

11、-data.num,p-data.name,p-data.price,p-data.stock); p=p-next;(6)销售功能基本的销售功能流程如下图所示,若要实现一次售出多种货物则需在此基础上加入循环结构,另外需累计所有商品的钱数并将所有售出的商品信息存储下来(可存放在一个一维数组中)以便打印出购物小票。最基本的销售功能算法的程序流程图如图1-3所示。(7)菜单函数输出系统功能菜单信息并允许用户输入选项。参考程序:int menu()/菜单函数,返回用户输入的选项int ch; printf(*n); printf(* 1-input *n); printf(* 2-output *n

12、); printf(* 3-insert *n); printf(* 4-delete *n); printf(* 5-search *n);printf(* 6-sale *n); printf(* 0- exit *n); printf(*n); printf(please input your choice:(0-6)n); scanf(%d,&ch); return(ch);(8)主函数主要是利用循环结构实现对系统各个功能的多次选择,每次选择之前应先输出系统功能菜单信息,当用户选择后根据用户的选项调用相应功能模块,完成特定的任务。参考程序:(主要给出主函数的框架语句,具体功能的实现语句

13、在此略去)void main() int ch; /主函数中其它变量的定义在此略去 ch=1; while(ch!=0) ch=menu(); switch (ch) case 1: /调用线性表的录入函数,语句略 break; case 2: /调用线性表的显示函数,语句略 break; case 3: /进行线性表的插入,语句略 break; case 4: /进行线性表的删除,语句略 break; case 5:/进行线性表的查找,语句略break; case 6: /调用商品的销售函数,语句略 /*switch*/ /*while*/实验二 栈、队列的应用1实验名称回文数的判断2实验学

14、时 4学时3实验目的(1)掌握栈的先进后出和队列先进先出的基本思想;(2)掌握顺序栈和链栈、循环队列和链队的建立方法及其基本操作算法的实现(3)灵活运用栈和队列解决实际问题。4实验要求本实验要求使用高级编程语言C语言编写一个判断任意正整数是否回文数或将一个十进制数转换为二进制数的程序。回文数的判断(用栈和队列)、数制转换(用栈)可选择一个实验,其中都是对整型数的操作。存储方式可采用顺序或链式存储,但两种存储方式及其上的操作都应该掌握。要求独立功能尽量用函数来实现,要有菜单选择。每人一组完成,上机之前要有预习准备。实验设备:PC机一台,C语言IDE编程环境Micorosoft Visual C+

15、 6.0或者Turbo C 2.0。5实验内容(1)首先建立栈或队列,并实现如初始化、入队(入栈)、出队(出栈)等功能函数。(2)建立菜单能够实现用户的选择调用及有退出功能。(3)运用取余及取整的方法,来得到各个数位相应的数字。(4)将取得的数字依次入队列或栈中,利用栈的后进先出和队列的先进先出的特性来判断是否为回文数。6. 算法说明此程序以链式存储为例。(1)定义结点类型typedef struct node int data; struct node *next; NodeType;(2)定义栈类型typedef struct NodeType *top; Linstack;(3)定义队列

16、类型,采用链队列typedef struct NodeType *front; NodeType *rear;LinQueue;void InitStack(Linstack * s)/链栈初始化,带头节点 s-top = (NodeType *)malloc(sizeof(NodeType); if(!s-top) printf(n存储分配失败!); else s-top-next=NULL;(4)判断一个栈是否为空,若空返回1,非空返回0int StackEmpty(Linstack *s) return(s-top-next = NULL); (5)入栈函数void PushStack(

17、Linstack *s, Int x) NodeType * node; node = (NodeType *)malloc(sizeof(NodeType); if(!node) printf(存储分配失败!n); else node-data = x; node-next = s-top-next; s-top-next = node; (6)出栈函数Int PopStack(Linstack *s) Int x; NodeType *p; if(StackEmpty(s) printf(empty); exit(1); p = s-top-next; x = p-data; s-top-

18、next = p-next; free(p); return x;(7)队列初始化,带头结点void InitQueue(LinQueue * q) q-front=q-rear=(NodeType *)malloc(sizeof(NodeType); if(!q-front) printf(n存储分配失败!); else q-front-next=NULL;(8)判队空,空返回1,非空返回0int QueueEmpty(LinQueue *q) return(q-front=q-rear); (9)入队函数void EnQueue(LinQueue *q,Int x) NodeType *p

19、; p = (NodeType *)malloc(sizeof(NodeType); if(!p) printf(n存储分配失败!); return; p-data=x; p-next = NULL; q-rear-next = p; q-rear = p;(10)出队函数Int DelQueue(LinQueue *q) /出队 NodeType * p; Int x; if(QueueEmpty(q) printf(队空!); exit(1); p = q-front-next; x = p-data; q-front-next = p-next; if(q-rear = p) q-rea

20、r = q-front; free(p); return(x);实验三 树的存储和遍历1实验名称二叉树的存储和遍历。2实验学时4学时。3. 实验目的(1)复习和巩固二叉树的相关概念和知识;(2)掌握二叉树的存储结构;(3)掌握二叉树的的建立及各种遍历算法,进一步理解递归的执行过程;(4)掌握二叉排序树的建立及查找算法。4实验要求本实验要求使用高级编程语言C语言编写一个有关二叉树的建立、遍历、查找操作的程序。分别要实现普通二叉树的建立功能和二叉排序树的建立功能。二叉树的存储方式采用链式存储结构。要求独立功能尽量用函数来实现,要有菜单选择。有兴趣的同学可选做统计二叉树的叶子结点数。每人一组完成,上

21、机之前要有预习准备。实验设备:PC机一台,C语言IDE编程环境Micorosoft Visual C+ 6.0或者Turbo C 2.0。5实验内容(1)二叉树的建立:将一棵普通二叉树通过补空格变成满二叉树,递归构造二叉树。(2)二叉排序树的建立:输入一个序列,按课本的程序生成二叉排序树。(3)二叉树的遍历:针对上面建立的二叉树或二叉排序树,进行三种遍历。(4)二叉排序树的查找:在一棵二叉排序树上查找一个指定的结点。6算法说明 (1)二叉树的数据结构定义struct BiTNode char data; struct BiTNode * lchild; struct BiTNode * rch

22、ild;typedef struct BiTNode BiTNode , *BiTree;(2)二叉树的建立参考程序:void CreateBiTree(BiTree *Tree) char ch; if(ch = getchar() = ) *Tree = NULL; else *Tree = (BiTree)malloc(sizeof(BiTNode); (*Tree)-data = ch; CreateBiTree(&(*Tree)-lchild); CreateBiTree(&(*Tree)-rchild); (3)二叉排序树的建立二叉排序树的建立过程是,逐个顺次插入结点,插入结点时要

23、注意找到应该插入的位置。参考程序:BiTree CreateBST() int i,ele; BiTree Tree = NULL; for(i = 0; i data = ele) return; pos = p; if(ele data) p = p-lchild; else p = p-rchild; p = (BiTree)malloc(sizeof(struct BiTNode); p-data = ele; p-lchild = p-rchild = NULL; if(! *Tree) *Tree = p; else if(ele data) pos-lchild = p; els

24、e pos-rchild = p;(4)二叉树的遍历注意:二叉树的遍历是一个递归的过程,如先序遍历是,先遍历根,再先序遍历左子树,再先序遍历右子树,程序代码非常简洁,但实际执行过程较复杂,希望同学能理解。void PreOrder(BiTree Tree)/二叉树的先序遍历算法 if (Tree) putchar(Tree-data); PreOrder(Tree-lchild); PreOrder(Tree-rchild); void InOrder(BiTree Tree)/二叉树的中序遍历算法 if(Tree) InOrder(Tree-lchild); putchar(Tree-dat

25、a); InOrder(Tree-rchild); void PostOrder(BiTree Tree)/二叉树的后序遍历算法 if(Tree) PostOrder(Tree-lchild); PostOrder(Tree-rchild); putchar(Tree-data); (5)二叉排序树的查找参考程序:BiTree SearchBST(BiTree Tree, int ele) while(Tree != NULL) if(ele = Tree-data) return Tree; else if(ele data) Tree = Tree-lchild; else Tree =

26、Tree-rchild; return NULL;实验四 查找算法的应用1实验名称哈希表的创建及查找。2实验学时4学时。3. 实验目的(1)进一步了解查找算法的用途;(2)复习巩固哈希函数及哈希表等有关概念;(3)掌握哈希表的创建及查找的过程和方法;(4)比较哈希查找与其它查找算法的不同,体会哈希查找的优缺点。4实验要求本实验完成一个查找算法的应用程序,使用高级编程语言C语言编写,算法要求采用哈希查找算法。最好使用复杂的结构体类型作为元素的类型,查找关键字应为整型。可先创建一个哈希表,输出哈希表的内容,验证其是否正确;哈希表正确后,再给定关键字进行查找,验证查找结果是否正确。原始的数据元素可以

27、先放在一个线性表中,再将其放入哈希表中。但建议同学每输入一个元素,将其直接放入哈希表中。每人一组完成,上机之前要有预习准备。实验设备:PC机一台,C语言IDE编程环境Micorosoft Visual C+ 6.0或者Turbo C 2.0。5. 实验内容预先给定N个元素,用除留余数法设计哈希函数,结合线性探测再散列的方法建立哈希表,在哈希表中进行查找,并在屏幕上显示哈希表及查找结果。6. 算法说明(1)哈希函数的构造在哈希查找中,哈希函数的构造十分关键。对于不同的问题,应根据数据的实际情况选择合适的哈希函数,使数据的哈希地址分布均匀,避免或减少冲突的出现。除留余数法是一种最简单、最常用的哈希函数构造方法。 取关键字被某个不大于哈希表表长m的数p除后所得的余数作为哈希地址,其形式为:H(k) = k % p 此方法中p的选择十分重要,选择不当时会造成大量冲突。一般情况下,可以选p为不大于m的最大质数。 哈希表表长m必须大于等于数据元素的个数,虽然m较大时,冲突的概率较小,但空间浪费严重。根据数学分析可知:一般给定N个元素,则m取大于N的最小质数。例如:给定10个元素,则m = p

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

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