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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构B》实验指导书Word文档下载推荐.docx

1、【注意事项】1.开发语言:使用C。2.可以自己增加其他功能。【参考代码】(以下内容,学生任意选择一个完成即可)(一)基础篇/利用顺序表完成一个班级学生课程成绩的简单管理#includestdlib.hconio.h#define MAXSIZE 100 /根据需要自己设定一个班级能够容纳的最大学生数typedef struct stu int num; /学生学号 char name10; /学生姓名 float score; /学生成绩STUDENT; /存放单个学生信息的结构体类型typedef struct list STUDENT stuMAXSIZE; /存放学生的数组定义,静态分配

2、空间 int length; /记录班级实际学生个数LIST; /存放班级学生信息的顺序表类型void listcreate(LIST *Li,int m) /初始化班级的学生信息 /m为该班级的初始人数 int i; Li-length=0; for(i=1;istui.num); /输入第i个学生的学号姓名=%sstui.name); /输入第i个学生的姓名成绩=%fstui.score); /输入第i个学生的成绩 Li-length+; /学生人数加1 int listinsert(LIST *Li,int i) /将学生插入到班级Li的第i个位置。 /插入一个学生信息 int j; S

3、TUDENT e; if(Li-length=MAXSIZE-1) /测试存储空间是否被占满无更多的存储空间! return 0; if (i=Li-length+2) /插入位置检验,如果错误就返回0退出程序。 printf(插入位置有误! return 0; else请输入插入的学生信息: scanf(e.num);,e.name);e.score); ; /利用for循环将第i个及其后面的元素依次往后移动 /移开位置后将学生e放入到i位置 /完成插入后,学生实际人数加1 return 1;int listdel(LIST *Li,int i) /删除一个学生信息 /删除第i个学生的信息l

4、ength)/删除位置检验,如果错误就返回0退出程序。 ; /利用for循环将准备删除的第i个及其后面的元素依次往前移动 /删除第i个学生后,学生人数减1void listdisplay(LIST L) /显示所有学生信息 /printf(班级学生信息如下: printf( 学号 姓名 成绩n=L.length;i+)%10d%10s%10.2fn,L.stui.num,L.stui.name,L.stui.score);void showmenu() /显示菜单 欢迎使用成绩管理小软件nt1、创建学生信息nt2、插入学生信息nt3、删除学生信息nt4、显示学生信息nt5、退出程序nvoid

5、main() int no,stu_count,pos; LIST stu_info; while(1) showmenu(); 请输入你的选择:no); switch(no) case 1:班级信息初始化,按任意键继续n getch();请输入班级学生原始人数: scanf(stu_count); listcreate(&stu_info,stu_count); system(cls showmenu(); listdisplay(stu_info); printf(班级信息初始化已经完成,按任意键继续n getch(); system( break; case 2:printf(插入前班级

6、信息: listdisplay(stu_info);请输入插入位置: scanf(pos); listinsert(&stu_info,pos);插入后班级信息:插入已经完成,按任意键继续n getch(); system( break; case 3:删除前班级信息:请输入删除位置: listdel(&删除后班级信息:删除已经完成,按任意键继续n case 4:listdisplay(stu_info);显示结果如上所示,按任意键继续n case 5:return;(二)提高篇利用单链表完成一个班级学生课程成绩的简单管理#define NULL 0 /学生的学号 /学生的姓名 /学生的成绩

7、STUDENT; /存放单个学生信息的结构体类型typedef struct node STUDENT data; /结点的值 struct node *next; /指向下一个结点的地址 SNODE;SNODE *listcreate(SNODE *head,int n) /n为该班级的实际人数 /建立班级学生信息 SNODE *p=NULL,*q=NULL; p=head;=n;i+) /循环插入n个学生n请输入第%d位学生的信息: q=(SNODE *)malloc(sizeof(SNODE);scanf(q-data.num);,q-data.name);data.score); q-

8、next=NULL; p-next=q; p=q; head-data.num+; return head;SNODE *listinsert(SNODE *head,int i) /将学生插入到班级Li_head的第i个位置。SNODE *listdel(SNODE *head,int i) /删除链表Li_head中第i个学生的信息void listdisplay(SNODE *head) /显示所有学生信息 SNODE *p; p=head-next; while(p!=NULL),p-data.num,p-data.name,p- p=p-void main() SNODE *head

9、=NULL;head=(SNODE *)malloc(sizeof(SNODE);/动态建立第一个结点,作为头结点,head指针指向它,head-data.num=0; /链表为带头结点的单链表 head- head=listcreate(head,stu_count); listdisplay(head); listdisplay(head); head=listinsert(head,pos); head=listdel(head,pos);listdisplay(head); (三)挑战篇(任意选做一题)1、设LA和LB是两个有序的单链表,Pa和Pb分别指向两个表的表头结点,试编写一个算

10、法将这两个表归并为一个有序的单链表。2、整数集合和集合B中各有若干个元素,请编程实现集合与集合B的相关运算,包括交集、并集、补集和差集等。提示:集合和集合采用单链表来表示,各种集合运算的结果也是链表。【思考问题】1. 线性表的顺序存储和链表存储的差异?优缺点分析?2. 那些操作引发了数据的移动?3. 算法的时间效率是如何体现的?4. 链表的指针是如何后移的?如何加强程序的健壮性?【实验小结】 (总结本次实验的重难点及心得、体会、收获)得 分_评阅日期_教师签名_ _ 实验二 堆栈和队列基本操作的编程实现堆栈和队列基本操作的编程实现堆栈和队列基本操作的编程实现(2学时,验证型),掌握堆栈和队列的

11、建立、进栈、出栈、进队、出队等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。内容:把堆栈和队列的顺序存储(环队)和链表存储的数据进队、出队等运算其中一部分进行程序实现。可以实验一的结果自己实现数据输入、数据显示的函数。利用基本功能实现各类应用,如括号匹配、回文判断、事物排队模拟、数据逆序生成、多进制转换等。利用顺序栈实现十进制整数转换转换成r进制1、算法思想将十进制数N转换为r进制的数,其转换方法利用辗转相除法,以N=3456,r=8为例转换方法如下: N N / 8 (整除) N % 8(求余) 3456 432 0

12、 低 432 54 0 54 6 6 6 0 6 高所以:(3456)10 =(6600)8我们看到所转换的8进制数按底位到高位的顺序产生的,而通常的输出是从高位到低位的,恰好与计算过程相反,因此转换过程中每得到一位8进制数则进栈保存,转换完毕后依次出栈则正好是转换结果。算法思想如下:当N0时重复1,2若 N0,则将N % r 压入栈s中 ,执行2;若N=0,将栈s的内容依次出栈,算法结束。用N / r 代替 N2、转换程序#define MAXSIZE 100 /根据需要自己定义MAXSIZE为顺序栈的最大存储容量typedef struct stack int dataMAXSIZE; i

13、nt top;SEQSTACK;void initstack(SEQSTACK *s)/顺序栈初始化 ;/将栈顶指针指向初始的位置int empty(SEQSTACK *s) /判断栈空 if(s-top=-1) else void push(SEQSTACK *s,int x)/元素x进栈top=MAXSIZE-1)存储空间已满,元素进栈失败! ;/栈顶指针加1/将元素x送到栈顶位置 int pop(SEQSTACK *s)/元素出栈,出栈元素用e返回 int e; if(empty(s)=-1)栈中元素已空,出栈元素失败! return -99;/将栈顶元素赋值给变量e/栈顶指针减1 re

14、turn e;void conversion(SEQSTACK *s,int N,int r) /将十进制数N转换为r进制的数 int x; initstack(s); while (N!=0) /此循环为入栈操作/将N除以r所得的余数压入栈 /N整除r所得的商赋值给N while (!empty(s) /此循环为出栈操作 x=pop(s); if(x=10)printf(A else if(x=11)printf(B else if(x=12)printf(C else if(x=13)printf(D else if(x=14)printf(E else if(x=15)printf(F

15、else printf(,x); int number,r; /number为待准备转换的十进制数,r为进制 SEQSTACK stack; char choice; while(1)请输入一个十进制整数:number);选择将该数转换为几进制数(2,8,16):r); fflush(stdin);转换后的结果为: conversion(&stack,number,r);是否继续?按N结束,其他任意键继续%cchoice); system( if(choice=N|choice=n/链队列基本操作/根据实际处理数据的类型定义链队中结点的值域类型elemtypetypedef int elemt

16、ype;typedef struct node /队列结点类型定义 elemtype data; /队列的数据元素类型 struct node *next; /指向后继结点的指针NODE;typedef struct /定义链队 NODE *front,*rear;/定义链队队头和队尾指针LINKQUEUE;void initqueue(LINKQUEUE *QL)/队列的初始化 QL-front=(NODE *)malloc(sizeof(NODE);/队列为带头结点的链队列front-rear=QL-front;LINKQUEUE *pushqueue(LINKQUEUE *QL,elemtype x) /将元素x插入到链队列QL中,作为QL的新队尾elemtype popqueue(LINKQUEUE *QL) /若链队列不为空,则删除队头元素,返回其元素值void printqueue(LINKQUEUE *QL)/队列的显示 NODE *p; p=QL- if(p=NULL)队列空! if(p-next=NULL) print

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

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