- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教 学 实 验 报 告
学年学期: 2010—2011 学年第 二 学期
课程名称: 软件技术基础
实验名称: 链表合并和排序
实 验 室: 测量测绘实验中心计算机室
专业年级: 热动091
实验名称: 链表合并和排序
实验目的:
深入理解链表的组成特点,掌握链表遍历的形式。
掌握基本的连接思想,思考如何保证链表连接后的正常访问。
掌握链表结点的排序思想以及核心语句,使学生具备初步的数据处理能力。
实验内容:
编写一个子函数用于连接两个想同类型的单向链表,其中形参为欲连接的两个链表的表头指针,返回连接后的新链表的表头指针。在主函数中调用该子函数,对其进行调试和验证。
编写一个子函数用于对一个单向链表进行排序,形参为欲进行排序的链表头指针,无返回值。
思路分析:
本次实习的要求主要就是连接还有排序。对于排序,可以选择选择排序法,冒泡排序法等多种方式,方便理解,本人选择了最简单的选择排序,并且模拟数组排序的形式添加了新的子函数found()函数用于找到第i个元素结点。
下面是我所编写的代码:
······
······
······
long creat(EMP *head,MAB EMPlist);/*创建和输出函数在之前已经编写,在此不再赘述*/
void output(EMP *p);
EMP* found(EMP* p,int n)/*遍历链表并返回第N个数据结点的地址*/
{
return (p->next==NULL||n==1)?p:found(p->next,n-1); /*采用栈的思想,逐步递进*/
}
void order(EMP *h)/*定义排序子函数*/
{ long n=0;
int i,j;
double t;
EMP *p;
p=h;
while(p->next!=NULL)/*遍历链表,统计元素结点的个数,为模拟数组做准备*/
{ n++;
p=p->next;
}
for(i=0;i<n-1;i++)/*经典的选择排序法*/
for(j=i+1;j<n;j++)
if(found(h->next,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;
}
}
EMP * link(EMP *h1,EMP *h2)/*定义连接子函数*/
{ EMP *p;
p=h1;
while(p->next!=NULL)/*找到建立链表的表尾*/
p=p->next;
p->next=h2->next;/*考虑到h2链表的头结点并非元素结点所以将h2->next连接到前一表尾*/
return h1;
}
void main()
{
long m,n;
EMP *newlist;
EMPlist1.head=(EMP*)malloc(sizeof(EMP));/*第一链表参数初始化*/
EMPlist1.head->next=NULL;
EMPlist1.rear=NULL;
EMPlist1.len=0;
printf("请输入第一组相关数据:\n");
m=creat(EMPlist1.head,EMPlist1); /*创建第一链表*/
EMPlist2.head=(EMP*)malloc(sizeof(EMP));/*第二链表的参数初始化*/
EMPlist2.head->next=NULL;
EMPlist2.rear=NULL;
EMPlist2.len=0;
printf("请输入第二组相关数据:\n");
n=creat(EMPlist2.head,EMPlist2); /*创建第二链表*/
printf("\n创建后结果:\n");
printf("\nEMPlist1:\n");
output(EMPlist1.head);/*分别输出两链表数据*/
printf("\nEMPlist2:\n");
output(EMPlist2.head);
newlist=link(EMPlist1.head,EMPlist2.head);/*调用连接函数*/
printf("\n新的链表(排序前):\n");
output(newlist);/
文档评论(0)