文档详情

数据结构线性表操作-实验报告.doc

发布:2018-08-29约4.12千字共7页下载文档
文本预览下载声明
《数据结构》实验报告 实验题目:线性表的操作 实验目的:1.掌握上机调试线性表的基本方法; 2.掌握线性表的一些基本操作; 实验内容:将两个有序链表合并为一个有序链表 一、需求分析 1.实验程序中先创建两个有序链表,演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入两个链表中的相应数据。 2.将两个链表合并时可按数据从大到小或从小到大合并,用户根据提示可选择一种排序方式。 3.程序执行命令包括: (1)构造链表;(2)输入数据;(3)合并两个链表,根据用户需求选择一种排序方式;(4)将合并结果输出;(5)结束 4.测试数据: 链表1数据为:2,4,6,7,10 链表2数据为:1,3,5,6,7,12 按从小到达合并为:1,2,3,4,5,6,6,7,7,10,12; 按从大到小合并为:12,10,7,7,6,6,5,4,3,2,1; 二、概要设计 1.基本操作 Linklist creat() 操作结果:构造一个链表,并输入数据,返回头节点指针。 void print(Linklist head) 初始条件:链表已存在; 操作结果:将链表输出。 void MergeList_1(Linklist La,Linklist Lb) 初始条件:有序线性链表La和Lb已存在; 操作结果:将La和Lb两个链表按从小到大的顺序合并。 void MergeList_2(Linklist La,Linklist Lb) 初始条件:有序线性链表La和Lb已存在; 操作结果:将La和Lb两个链表按从大到小的顺序合并。 2.本程序包括四个模块: (1)主程序模块; (2)链表数据输入模块; 将新链表输出按从小到大合并两链表 (3)链表合并模块; 将新链表输出 按从小到大合并两链表 (4)链表输出模块; 数据输入主程序模块 数据输入 主程序模块 将新链表输出按从大到小合并两链表 将新链表输出 按从大到小合并两链表 三、详细设计 1.元素类型,节点类型,指针类型 typedef struct LNode //定义节点 { int data; struct LNode *next; }LNode,* Linklist; 2.每个模块的分析 (1)主函数模块 int main() { Linklist head1,head2; int i; printf(请输入链表1数据(由小到大,输入0表示输入结束):\n); head1=creat(); //创建链表1,将头结点指针返回为head1 printf(请输入链表2数据(由小到大,输入0表示输入结束):\n); head2=creat(); printf(请选择排序方式(输入1则从小到达合并,输入其它整数则按从大到小合并):); scanf(%d,i); //创建链表2,将头结点指针返回为head2 if(i==1) //选择两种排序方式,如果输入1,则合并后按从小到大输出;输入其它数,合成链表按从大到小输出 { printf(按小到大将两表合并得:\n); MergeList1(head1,head2); //将创建好的两表的头结点地址head1,head2作为函数参数 } else { printf(按从大到小将两表合并得:\n); MergeList2(head1,head2); //将创建好的两表的头结点地址head1,head2作为函数参数 } return 0; } (2)数据输入创建链表模块 Linklist creat() //创建链表函数,并将创建链表的头结点指针返回 { Linklist head,p,s; int z=1,x; head=(LNode *) malloc(sizeof(LNode)); p=head; while(z) { scanf(%d,x); if(x!=0) //输入0表示链表数据输入结束 { s=(LNode *)malloc(sizeof(LNode)); s-data=x; p-next=s; s-next=NULL; p=s; } else z=0; } return(head); } (3)合并链表模块,两个函数分别表示两种排序方式,将链表合并后直接在函数中调用链表输出函数void print(Linklist head)将链表输出 void MergeLis
显示全部
相似文档