推荐 C语言《数据结构》实验报告链表的合并 精品

发布时间:2017-09-21 19:07:30   来源:文档文库   
字号:

《数据结构》实验报告

◎实验题目: 合并两个链表:设AB分别为两个带有头结点的有序循环链表(所谓有序是指链接点按数据域值大小链接,本题不妨设按数据域值从小到大排列),list1list2分别为指向两个链表的头指针。请写出将这两个链表合并为一个带头结点的有序循环链表的算法。

◎实验目的:使用顺序表的创建、插入、删除、合并等操作编写关于数据结构的程序

◎实验内容:写出程序并上机调试、通过。

一、需求分析

1演示程序以用户和计算机的对话方式执行,即在计算机终端上显示Please input the first list时输入第一个链表的元素个数和元素。当出现Please input the second list时输入第二个链表的元素个数和元素。然后计算机终端输出合并后的链表。

2、输出的形式为两个链表中的元素合并成一个链表并且其中元素按照递增的顺序排列。

3程序执行的命令包括:

1)构造n个元素的循环链表;(2)输入数据;(3将输入的数据作成循环链表;(4合并;(5)输出;(6)结束。

4、本程序能将两个链表合并成一个链表。并且合并后的链表中的元素是原来两个链表中的元素按照递增顺序的排列

5、输入及输出示例:

1

Please input the first list

4

1 3 7 9

Please input the second list

5

1 2 5 6 8

Output the mergelist

1 2 3 5 6 7 8 9

Press any key to continue

2

Please input the first list

5

1 2 5 9 11

Please input the second list

3

1 2 8

Output the mergelist

1 2 5 8 9 11

Press any key to continue

概要设计

1基本操作

程序中,用单向有序循环链表作为存储结构。

(1)node *Creatlist (int n)

操作结果:创建含有n个元素的有序循环链表

(2)node* Mergelist(node*la,node*lb)

初始条件:循环链表AB已存在。

操作结果:归并递增的链表lalb,得到链表lc,使lc也为递增循环链表

(3)void Printlist(node* l)

初始条件:链表l已存在

操作结果:输出链表l中的元素。

2、模块调用图

详细设计

1、结点类型:

typedef struct node

{

int data;

struct node *next;

}node;

2、每个模块:

(1) 创建含有n个元素的有序循环链表

node *Creatlist (int n) //创建含有n个元素的有序循环链表

{

int i,e;

node *p,*l,*list;

list=(node*) malloc (sizeof(node));

list->data=-1;

list->next=list;

l=list;//建立头结点并用list记录头结点的位

for(i=n;i>0;i--)

{

p=(node*) malloc (sizeof(node)); //生成新结点

scanf("%d",&e); //输入元素值

p->data=e;

p->next=l->next;

l->next=p;

l=p;

}

return(list);//返回头结点的位置

}

(2) 归并递增的链表lalb,得到链表lc

node* Mergelist(node*la,node*lb) //归并递增的链表lalb,得到链表lc,使lc也为递增循环链表

{

node *list1, *list2, *list3,*lc,*s,*p;

list1=la->next;list2=lb->next;

lc=la;

本文来源:https://www.2haoxitong.net/k/doc/d56f408a77a20029bd64783e0912a21615797f17.html

《推荐 C语言《数据结构》实验报告链表的合并 精品.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式