版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子科技大学信息与软件工程学院实验报告第页电子科技大学实验报告课程名称:数据结构与算法学生姓名:学号:点名序号:指导教师:实验地点:基础实验大楼实验时间:4月3日2014-2015-2学期信息与软件工程学院
实验报告(一)学生姓名:学号:指导教师:实验地点:基础实验大楼实验时间:4月3日实验室名称:软件实验室实验项目名称:数据结构与算法—线性表的实现实验学时:4四、实验原理:在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。链式存储方式即可以用于表示线性结构,也可用于表示非线性结构。一般来说,在线性表的链式存储结构中,各数据结点的存储符号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。对于线性链表,可以从头指针开始,沿各结点的指针扫描到链表中的所有结点。线性表的链接存储中,为了方便在表头插入和删除结点的操作,经常在表头结点(存储第一个元素的结点)的前面增加一个结点,称之为头结点或表头附加结点。这样原来的表头指针由指向第一个元素的结点改为指向头结点,头结点的数据域为空,头结点的指针域指向第一个元素的结点。五、实验目的:本实验通过定义单向链表的数据结构,设计创建链表、插入结点、遍历结点等基本算法,使学生掌握线性链表的基本特征和算法,并能熟练编写C程序,培养理论联系实际和自主学习的能力,提高程序设计水平。六、实验内容:使用数据结构typedefstructnode{Elemtypedata;structnode*next;}ListNode,*ListPtr;typedefstructstuInfo{charstuName[10];/*学生姓名*/intAge/*年龄*/}ElemType实现带头结点的单向链表的创建、删除链表、插入结点等操作,并能实现年龄递增的两个单向链表合并一个链表,合并后的链表按年龄递减,可认为同名同年龄是同一个学生,每个学生在合并后的链表中仅出现一次。最后打印输出合并后的链表元素,验证结果的正确性。七、实验器材(设备、元器件): PC机一台,装有C语言集成开发环境。八、数据结构与程序:#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructnode{ intage; charstuName[10]; structnode*next; }ListNode,*Listptr;intList_Reverse(ListNode*L){ListNode*q,*p=L->next;L->next=NULL;while(p){q=p;p=p->next;q->next=L->next;L->next=q;}return1;}voidList_Insert(ListNode*p,intx,charname[10]){ ListNode*s; s=(ListNode*)malloc(sizeof(ListNode)); s->next=NULL;ListNode*p1,*q1,*u,*pre; s->age=x; strcpy(s->stuName,name);p1=p->next; pre=p; while(p1!=NULL) { if(p1->age>=s->age) {s->next=p1; pre->next=s; pre=s; break; } else { pre=p1; p1=p1->next; }} if(s->next==NULL) pre->next=s;}voidList_Destroy(ListNode*pc){ pc->next=NULL; printf("freesuccessful");}intList_Merge(ListNode*pa1,ListNode*pb1){ListNode*p1,*q1,*u,*pre,*t; p1=pa1->next; q1=pb1->next; pre=pa1; while((p1!=NULL)&&(q1!=NULL)){ if((p1->age)>(q1->age)) { u=q1->next; q1->next=p1; pre->next=q1; pre=q1; q1=u; } elseif((p1->age)==(q1->age)) { if(strcmp(p1->stuName,q1->stuName)==0) {u=q1->next; q1=u;} else {pre=p1; p1=p1->next;} } else { pre=p1; p1=p1->next; } } if(q1!=NULL) pre->next=q1; t=pa1->next; while(t) { printf("%s%d\n",t->stuName,t->age); t=t->next; } return1;}voidOutPut(ListNode*La){ ListNode*test; test=La->next; while(test) { printf("%s%d\n",test->stuName,test->age); test=test->next; }}intmain(void){ printf("欢迎使用\n\n"); ListNode*p1,*q1,*u,*pre; ListNode*pa,*pb,*p,*q; pa=(ListNode*)malloc(sizeof(ListNode)); pb=(ListNode*)malloc(sizeof(ListNode)); pa->next=NULL; pb->next=NULL; intoppr; printf("(释放B链0释放A链1合并操作2反转操作3插入操作4退出操作5打印链表6)\n请输入请求:"); scanf("%d",&oppr); while(oppr!=5) { if(oppr==0) { List_Destroy(pb); printf("请输入指令"); scanf("%d",&oppr); } if(oppr==1) { List_Destroy(pa); printf("请输入指令"); scanf("%d",&oppr); } if(oppr==2){ List_Merge(pa,pb); printf("\n\n\n"); printf("请输入指令"); scanf("%d",&oppr); } if(oppr==3) { List_Reverse(pa); p=pa->next; while(p) { printf("%s%d\n",p->stuName,p->age); p=p->next; } printf("\n\n\n"); printf("请输入指令"); scanf("%d",&oppr); } if(oppr==4) { charqq[10]; intab; printf("whichlinedoyouinsertA-1B-2?\n"); scanf("%d",&ab); printf("insertthenewdata.\n");printf("pleaseinsertthename:");scanf("%s",qq);intm;printf("pleaseinserttheage:");scanf("%d",&m);if(ab==1){List_Insert(pa,m,qq);printf("successinA\n\n");p=pa->next;while(p) { printf("%s%d\n",p->stuName,p->age); p=p->next; }}if(ab==2){List_Insert(pb,m,qq); printf("successinB\n\n");p=pb->next;while(p) { printf("%s%d\n",p->stuName,p->age); p=p->next; } } printf("\n\n\n"); printf("请输入指令"); scanf("%d",&oppr); } if(oppr==6) { printf("lINEAIS:"); OutPut(pa); printf("\n\nlineBis:"); OutPut(pb); printf("\n请输入指令"); scanf("%d",&oppr); } }re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论