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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

线性表及其操作数据结构实验报告1.docx

1、线性表及其操作数据结构实验报告1电 子 科 技 大 学实 验 报 告 课程名称: 数据结构与算法 学生姓名: 陈*浩 学 号: * 点名序号: * 指导教师: 钱* 实验地点: 基础实验大楼 实验时间: 2015.4.4 2014-2015-2学期 信息与软件工程学院实 验 报 告(一)学生姓名:陈*浩 学 号:* 指导教师:钱*实验地点:科研教学楼A508 实验时间:2015.4.4一、实验室名称:软件实验室 二、实验项目名称:数据结构与算法线性表三、实验学时:4四、实验原理:在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元

2、素之间的逻辑关系是由指针域来确定的。链式存储方式即可以用于表示线性结构,也可用于表示非线性结构。一般来说,在线性表的链式存储结构中,各数据结点的存储符号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。对于线性链表,可以从头指针开始,沿各结点的指针扫描到链表中的所有结点。线性表的链接存储中,为了方便在表头插入和删除结点的操作,经常在表头结点(存储第一个元素的结点)的前面增加一个结点,称之为头结点或表头附加结点。这样原来的表头指针由指向第一个元素的结点改为指向头结点,头结点的数据域为空,头结点的指针域指向第一个元素的结点。五、实验目的:本实验通过定义单向链表的数据结构,设计创建链表

3、、插入结点、遍历结点等基本算法,使学生掌握线性链表的基本特征和算法,并能熟练编写C程序,培养理论联系实际和自主学习的能力,提高程序设计水平。六、实验内容:使用数据结构typedef struct node Elemtype data; struct node *next; ListNode, *ListPtr; typedef struct stuInfo char stuName10; /*学生姓名*/ int Age /*年龄*/ ElemType实现带头结点的单向链表的创建、删除链表、插入结点等操作,并能实现年龄递增的两个单向链表合并一个链表,合并后的链表按年龄递减,可认为同名同年龄是同

4、一个学生,每个学生在合并后的链表中仅出现一次。最后打印输出合并后的链表元素,验证结果的正确性。七、实验器材(设备、元器件): PC机一台,装有C语言集成开发环境。八、数据结构与程序:/* * *名称:线性表的基本操作 * * *内容:线性表的创建和删除,结点的插入和删除,线性表的合并 * * *作者:2014220701027 信软-工计-陈家浩 * * *时间:2015.04.08 * */#include #include #include #define MAX 50#define success 1#define failure 0/-/ *定义学生/-typedef struct s

5、tuInfo char stuName10; / 学生姓名 long age; / 学生年龄(格式19940424)STU;/-/ *定义链表结点/-typedef struct node STU data; struct node *next; ListNode, *ListNodePtr;typedef ListNodePtr List,*ListPtr;ListPtr L10; /定义信息表int L0exist = 0; /校验是否从文件读取信息ListNodePtr All_Over10; /用于给L10赋值,以免成为野指针void Init() /初始化L10 int cnt =

6、0; for(cnt;cntstuName); fscanf(fp,t%ldn,&p-age); return p; /data = *p/-/ *写入信息到文件/-void writeStuInfo(FILE* fp,STU* p) fprintf(fp,%st,p-stuName); fprintf(fp,%ldn,p-age);void Info_Flush(ListPtr L) ListNodePtr p,q; FILE *fp = fopen(F:我的下载stu.txt,w); p = (*L)-next; while( p ) writeStuInfo(fp,&p-data); p

7、 = p-next; fclose(fp);/-/ *指针定位/-int List_SetPosition(ListPtr L,int pos,ListNodePtr *ptr) /*ptr为待寻找的前驱 int status = failure; int i=0; ListNodePtr p = *L; while(p & i next; if(p & i = pos) *ptr = p; status = success; return status;/-/ *结点插入与删除/-int List_Insert(ListPtr L,int pos,STU stu) /结点插入 int sta

8、tus; ListNodePtr pre,s; status = List_SetPosition(L,pos-1,&pre); if(status = success) s = (ListNodePtr)malloc(sizeof(ListNode); s-next = NULL; if(s) s-data = stu; s-next = pre-next; pre-next= s; else status = failure; return status;int List_Remove(ListPtr L,int pos) /结点删除 int status; ListNodePtr ptr

9、,q; status = List_SetPosition(L,pos-1,&ptr); if(status = success) q = ptr-next; ptr-next = q-next; free(q); return status;/-/ *链表创建、清空与删除/-int List_Creat(ListPtr L,int cho) /创建链表,从文件或手动 int i = 0,j; int res; char choose; ListNodePtr p,q; STU sMAX; if(cho) /手动创建信息 printf(请输入信息:n); do scanf(%st%ld,si.

10、stuName,&si.age); i+; printf(继续输入?:); getchar(); /消除键盘缓冲 choose = getchar(); while( i MAX & choose = y); else /从文件读取信息 res = Check_File(); if (res = success) FILE *fp = fopen(F:我的下载stu.txt,r); while( !feof(fp) & i next = NULL; while(j=0) /还存在数据元素未处理 p = (ListNodePtr)malloc(sizeof(ListNode); if(!p) p

11、rintf(空间分配失败!); break; p-data = sj; p-next = q-next; q-next = p; j = j - 1; *L = q; printf(信息表创建成功!nn);int List_Clear(ListPtr L) /清空链表 ListNodePtr p = *L,q = p-next; while(q) p-next = q-next; free(q); q = p-next; return 0;void List_Destory(ListPtr L) /销毁链表 List_Clear(L); free(*L);/-/ *链表排序/-int List

12、_Sort(ListPtr L,int choose) /冒泡排序法 int i = 0,j; ListNodePtr p,q,r; STU *s,*t,EX; /EX用于交换两个数据 p = (*L)-next; if(!*L) printf(找不到信息!n); return 0; while( p ) i+; p = p-next; for(j=i;j0;j-) p = (*L)-next; q = p-next; r = p-next; s = &(p-data); t = &(q-data); while( r ) if(choose 0)&(s-age t-age) | (choos

13、e age age) /升序或降序 EX = *s; *s = *t; *t = EX; else if(s-age = t-age) & (!strcmp(s-stuName,t-stuName) & p-next) /遇到重复信息 p-next = q-next; r = p-next; free(q); if(p) p = p-next; if(p) q = p-next; s = &(p-data); t = &(q-data); if(r) r = r-next; /-/ *链表合并/-int List_Merge(ListPtr La,ListPtr Lb) ListNodePtr

14、 p,q; if( !*La | !*Lb ) printf(错误信息!n); return 0; p = (*La)-next; while(p) q = p; p = p-next; q-next = (*Lb)-next; free(*Lb); *Lb = NULL; printf(合并链表成功!n); List_Sort(La,-1);/-/ *打印信息链表/-int List_Output(ListPtr L,int L_cnt,int pos) int i = 1; ListNodePtr p; STU s; if(!L) printf(信息不存在!n); return failu

15、re; p = (*L)-next; s = p-data; printf(学生信息表%d:n,L_cnt+1); do if(!pos) printf(学生%d:%st%ldn,i,s.stuName,s.age); i+; p = p-next; if(p) s = p-data; else while( p & inext; s = p-data; printf(学生%d:%st%ldn,i,s.stuName,s.age); while( p ); printf(以上为全部结果!nn); return success;/-/ *开始界面/-void start() printf(-学生

16、和他的年龄-n *n * 1.自动创建学生信息表 *n * 2.手动创建学生信息表 *n * 3.删除某个学生信息 *n * 4.插入某个学生信息 *n * 5.合并两个学生信息表 *n * 其他.退出系统. *n *n * 请输入你的选择:);/-/ *主菜单/-int main(void) int choose = 0; /选择 STU stu; Init(); while(1) start(); scanf(%d,&choose); switch (choose) case 1: List_Creat( L0,0 ); /从文件读取信息 List_Output( L0,0,0 ); /打

17、印链表 break; case 2: List_Creat( LL_cnt,1 ); /手动创建链表 List_Output( LL_cnt,L_cnt,0 ); /打印链表 L_cnt+; break; case 3: if(L0exist) /判断是否自动生成信息表 List_Output( L0,0,0 ); printf(你要删除几号学生的信息:); scanf(%d,&choose); if(List_Remove(L0,choose) /删除结点 printf(删除成功!n); List_Output( L0,0,0 ); else printf(删除失败!n); else pri

18、ntf(信息文件不存在!); break; case 4: if(L0exist) /判断是否自动生成信息表 List_Output( L0,0,0 ); printf(你要插入信息到几号学生的后面:); scanf(%d,&choose); printf(请输入信息:n); scanf(%st%ld,stu.stuName,&stu.age); if(List_Insert(L0,choose+1,stu) /插入节点 printf(插入成功!n); List_Output( L0,0,0 ); else printf(插入失败!n); break; case 5: printf(你需要手动创建两个信息表:n); List_Creat( LL_cnt,1 ); /手动创建链表1 List_Sort( LL_cnt,1 ); /升序排序 List_Output( LL_cnt,L_cnt,0 ); L_cnt+; List_Creat( LL_cnt,1 ); /手动创建链表2 List_Sort( LL_cnt,1 ); /升序排序 List_Output( LL_cnt,L_cnt,0 ); L_cnt+; List_Merge( LL_cnt-2,LL_cnt-1 ); /合并信息表 Li

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

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