- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2-21实验报告
东莞理工学院计算机学院
2015-2016第1学期算法与数据结构实验报告
姓名:陈映琼
学号:201441404142
题目:设带头结点的单链表L1和L2中分别存放着两个数据元素集合,编写算法判断集合L1是否是L2的子集,即判断集合L1中的数据元素是否都是集合L2中的数据元素。
问题描述:有两个带头结点的单链表L1和L2中分别存放着数据元素集合,判断集合L1是否是集合L2的子集。
模块划分:第一个模块,定义单链表结点的结构体,第二个模块,设计一个函数,创建头结点,第三个模块,编写一个将元素e插入到链表L的第i个位置的函数,第四个模块,编写一个输出带头结点单链表的数据元素的函数,第五个模块,首先编写一个输出带头结点单链表的长度的函数,再编写一个判断集合L1中的数据元素是否都是集合L2中的数据元素,这个函数需调用输出长度的函数,第六个模块,编写main函数,测试代码。
源程序:
#includestdio.h
#include stdlib.h
typedef int Status;
typedef int ElemType;
#define FALSE 0
#define TRUE 1
typedef struct Node
{
ElemType data;// 数据域
struct Node* next;
}Node,*LinkList;
LinkList InitList()//创建头结点
{
LinkList L;
L = (LinkList)malloc(sizeof(Node));
if(L==NULL)
{
printf(申请头结点失败!\n);
return NULL;
}
L-next = NULL;
return L;
}
Status ListInsert(LinkList *L,int i,ElemType e)//将元素e插入到链表L的第i个位置
{
int j = 1;
LinkList p,s;
p = *L;//p直接等于链表L,才有头结点
while (p ji)
{
p = p-next;
++j;
}
if(!p || j i)
return FALSE;
s = (LinkList)malloc(sizeof(Node));
s-data = e;
s-next = p-next;//这里p-next就是指向位置i
p-next = s;
return TRUE;
}
void PrintList(LinkList L)
{
LinkList p;
p = L-next;
while (p != NULL)
{
printf(%d\t,p-data);
p = p-next;
}
printf(\n);
}
Status Length(LinkList head)
{
LinkList p = head-next;
Status i = 0;
while(p != NULL)
{
i++;
p = p-next;
}
return i;
}
void Judge(LinkList head1,LinkList head2)
{
LinkList p1 = head1-next,p2 = head2-next;
if(Length(head1) Length(head2))
{
printf(集合L1不是集合L2的子集。\n);
return;
}
while(p1 != NULL)
{
p2 = head2-next;
while(1)
{
if((p2 != NULL)(p1-data != p2-data))
p2 = p2-next;
if((p2 != NULL)(p1-data == p2-data))
break;
if(p2 == NULL)
{
printf(集合L1不是集合L2的子集。\n);
return;
}
}
p1 = p1-next;
}
printf(集合L1是集合L2的子集。\n);
}
int main()
{
LinkList head1,head2;
int len,i,num;
head1 = InitList();
head2 = InitList();
printf(请输入集合L1元素的个数。\n);
scanf(%d,len);
printf(请输入元素:\n);
for(i = 1;i = len;i++)
{
scanf( %d,num)
文档评论(0)