约瑟夫C语言实现.docVIP

  • 6
  • 0
  • 约3.88千字
  • 约 6页
  • 2017-06-02 发布于河南
  • 举报
约瑟夫C语言实现

《数据结构》实验报告 班姓 名学 号2012/10/10 实验题目:合并两个有序循环链表。 实验目的:学会建立有序循环链表,并进行链的相关操作。 实验内容:建立为两个带有头结点的有序循环链表,将这两个链表合并为一个带头结点的有序循环链表。 一、需求分析 1、本演示程序中,要建立的两个链表节点数目n是任意的,首先输入一个值给要建立的节点数,然后按从小到大的顺序依次输入每个节点的数值。程序应能自动保存每个链表的节点数目和每个节点的数值。程序将两个链表合并为一个节点值从小到大排列的链表。 2、演示程序以用户和计算机的对话方式执行,即在计算机终端显示“提示信息”之后,由用户在键盘输入相应数据(即要建立链表的节点数目和每个节点的数值),链表由程序自动生成,并完成合并。 3、程序执行的命令包括: (1)构造链表;(2)输入数据;(3)合并成新的链表;(4)输出链表;(5)结束。 4、数据测试 第一个链表n=3,每个节的点数据依次是1 3 5;第二个链表n=4,每个节点的数据2 4 6 7;则正确的输出为1 2 3 4 5 6 7。 二、概要设计 为了实现上述操作,应以单项循环链表为存储结构。 基本操作 Jianli ( ) 操作结果:建立一个单项循环链表; Shuchu ( ) 操作结果:输出单项循环链表; Hebing ( ) 操作结果:实现连个单项循环链表合并为一个单项循环链表。 本程序包括四个模块: 构造链表模块; 输出链表模块; 合并链表模块; 主程序模块。 3、主程序流程: 构造两个链表—依次输出两个链表—两个链表的合并—输出合并链表 4、模块间层次关系 三、详细设计 1、元素类型、节点类型和指针类型 //链表定义// typedef int ElemType; typedef struct Lnode { ElemType data; //存储数据 struct Lnode *next; //存数下一个节点的坐标 }LinkList; 每个模块的分析 构造链表并输入每个节点数据模块 void jianli(LinkList *L,int n) { LinkList *s,*r; int i; / /建立循环链表 L=(LinkList *)malloc(sizeof(LinkList)); L-next=L; r=L; for(i=0;in;i++) //申请新节点存入数据进入链表中 { s=(LinkList *)malloc(sizeof(LinkList)); printf(输入新节点的数据:\n); scanf(%d,s-data); r-next=s; r=s; } r-next=L; } 输出链表模块 void shuchu(LinkList *L) { LinkList *p=L-next; // 输出链表数据 while (p!=L) { printf(%d ,p-data); p=p-next; } printf(\n); } (3)合并链表模块 void hebing(LinkList *list1,LinkList *list2,LinkList *list3) { LinkList *p1,*p2,*p3; //建立新的链表 list3=(LinkList *)malloc(sizeof(LinkList)); list3-next=list3; p3=list3; p1=list1-next; p2=list2-next; //两个链表均有值时的比较两个值的大小后从小到大连入新链表内 while(p1!=list1p2!=list2) { if(p1-data=p2-data) { p3-next=p1; p1=p1-next; p3=p3-next; } else { p3-next=p2; p2=p2-next; p3=p3-next; } } //一个链表结束一个未结束将未结束链表连到新链表中 if(p2==list2) p3-

文档评论(0)

1亿VIP精品文档

相关文档