资源描述:
《软件技术教学实习报告4》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、教学实验报告学年学期:2010—2011学年第二学期课程名称:软件技术基础实验名称:链表合并和排序实验室:测量测绘实验中心计算机室专业年级:热动091-5-实验名称:链表合并和排序实验目的:1.深入理解链表的组成特点,掌握链表遍历的形式。2.掌握基本的连接思想,思考如何保证链表连接后的正常访问。3.掌握链表结点的排序思想以及核心语句,使学生具备初步的数据处理能力。实验内容:1.编写一个子函数用于连接两个想同类型的单向链表,其中形参为欲连接的两个链表的表头指针,返回连接后的新链表的表头指针。在主函数中调用该子函数,对其进行调试和验证。2.编写
2、一个子函数用于对一个单向链表进行排序,形参为欲进行排序的链表头指针,无返回值。思路分析:本次实习的要求主要就是连接还有排序。对于排序,可以选择选择排序法,冒泡排序法等多种方式,方便理解,本人选择了最简单的选择排序,并且模拟数组排序的形式添加了新的子函数found()函数用于找到第i个元素结点。下面是我所编写的代码:··················longcreat(EMP*head,MABEMPlist);/*创建和输出函数在之前已经编写,在此不再赘述*/voidoutput(EMP*p);EMP*found(EMP*p,intn)/*
3、遍历链表并返回第N个数据结点的地址*/{return(p->next==NULL
4、
5、n==1)?p:found(p->next,n-1);/*采用栈的思想,逐步递进*/}voidorder(EMP*h)/*定义排序子函数*/{longn=0;inti,j;doublet;EMP*p;p=h;while(p->next!=NULL)/*遍历链表,统计元素结点的个数,为模拟数组做准备*/{n++;p=p->next;}for(i=0;inext
6、,i+1)->x>found(h->next,j+1)->x)/*采用虚拟数组进行排序*/{t=found(h->next,i+1)->x;found(h->next,i+1)->x=found(h->next,j+1)->x;found(h->next,j+1)->x=t;-5-}}EMP*link(EMP*h1,EMP*h2)/*定义连接子函数*/{EMP*p;p=h1;while(p->next!=NULL)/*找到建立链表的表尾*/p=p->next;p->next=h2->next;/*考虑到h2链表的头结点并非元素结点所以将h2
7、->next连接到前一表尾*/returnh1;}voidmain(){longm,n;EMP*newlist;EMPlist1.head=(EMP*)malloc(sizeof(EMP));/*第一链表参数初始化*/EMPlist1.head->next=NULL;EMPlist1.rear=NULL;EMPlist1.len=0;printf("请输入第一组相关数据:");m=creat(EMPlist1.head,EMPlist1);/*创建第一链表*/EMPlist2.head=(EMP*)malloc(sizeof(EMP))
8、;/*第二链表的参数初始化*/EMPlist2.head->next=NULL;EMPlist2.rear=NULL;EMPlist2.len=0;printf("请输入第二组相关数据:");n=creat(EMPlist2.head,EMPlist2);/*创建第二链表*/printf("创建后结果:");printf("EMPlist1:");output(EMPlist1.head);/*分别输出两链表数据*/printf("EMPlist2:");output(EMPlist2.head);newlist
9、=link(EMPlist1.head,EMPlist2.head);/*调用连接函数*/printf("新的链表(排序前):");output(newlist);/*输出连接后的链表*/order(newlist);/*调用排序子函数进行排序*/printf("排序后:");output(newlist);/*输出排序结果,进行验证*/}实现链表连接基本思想:1.连接函数跳过表头结点,将第一个元素结点连到表一的表尾遍历链表一,找到表尾结点-5-2.found函数本函数是为了配合排序函数而定义的用来返回链表中第n个元素结点的地址
10、的子函数。就好像数组元素里的运算符”[]”。本函数的编写采用栈的思想,代码简单,而且易于理解,下面给出具体思路。EMPlist.headX2nextXnnextXi+1nextX