收藏 分销(赏)

2-21实验报告.doc

上传人:w****g 文档编号:2648522 上传时间:2024-06-03 格式:DOC 页数:6 大小:38.51KB 下载积分:6 金币
下载 相关 举报
2-21实验报告.doc_第1页
第1页 / 共6页
2-21实验报告.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
东莞理工学院计算机学院 2015-2016第1学期算法与数据结构实验报告 姓名:陈映琼 学号:201441404142 题目:设带头结点的单链表L1和L2中分别存放着两个数据元素集合,编写算法判断集合L1是否是L2的子集,即判断集合L1中的数据元素是否都是集合L2中的数据元素。 问题描述:有两个带头结点的单链表L1和L2中分别存放着数据元素集合,判断集合L1是否是集合L2的子集。 模块划分:第一个模块,定义单链表结点的结构体,第二个模块,设计一个函数,创建头结点,第三个模块,编写一个将元素e插入到链表L的第i个位置的函数,第四个模块,编写一个输出带头结点单链表的数据元素的函数,第五个模块,首先编写一个输出带头结点单链表的长度的函数,再编写一个判断集合L1中的数据元素是否都是集合L2中的数据元素,这个函数需调用输出长度的函数,第六个模块,编写main函数,测试代码。 源程序: #include<stdio.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 && j<i) { 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); ListInsert(&head1,i,num); } PrintList(head1); printf("请输入集合L2元素的个数。\n"); scanf("%d",&len); printf("请输入元素:\n"); for(i = 1;i <= len;i++) { scanf(" %d",&num); ListInsert(&head2,i,num); } PrintList(head2); Judge(head1,head2); return 0; } 测试用例及结果:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服