数据结构实验报告 课程 数据结构 _ 实验名称 实验一: 线性表及其应用 院 系 专业班级 实验地点 姓 名 学 号 实验时间 指导老师 实验成绩 批改日期 一.实验目的 1. 熟悉掌握线性表的静态和动态存储结构 2. 掌握线性表的实际应用 二.实验内容及要求 1. 线性表的静态存储结构的操作和应用 2. 线性链表的操作和应用 三.实验过程及结果 实验过程:集合的交、并和差 源程序: #include
#include #define NULL 0 typedef struct pointer { int dat; struct pointer *link; } pointer; void readdata(pointer *head) /*建立链表,读入的数据以-1作为结束符*/ { pointer *p; int tmp; printf(\"请输入集合数据 输入-1结束\\n:\"); scanf(\"%d\while(tmp!=-1) { p=(pointer *)malloc(sizeof(struct pointer)); p->dat=tmp; p->link=head->link; head->link=p; scanf(\"%d\} } void disp(pointer *head) { /*显示集合数据 */ pointer *p; p=head->link; while(p!=NULL) { printf(\"%d \p=p->link; } printf(\"\\n\"); } void bing(pointer *head1,pointer *head2, pointer *head3) { /*计算集合1与集合2的并 */ pointer *p1,*p2,*p3; p1=head1->link; while(p1!=NULL) { p3=(pointer *)malloc(sizeof(struct pointer)); p3->dat=p1->dat; p3->link=head3->link; head3->link=p3; p1=p1->link; } p2=head2->link; while(p2!=NULL) { p1=head1->link; while((p1!=NULL)&&(p1->dat!=p2->dat)) p1=p1->link; if(p1==NULL) { p3=(pointer *)malloc(sizeof(struct pointer)); p3->dat=p2->dat; p3->link=head3->link; head3->link=p3; } p2=p2->link; } } void jiao(pointer *head1,pointer *head2, pointer *head3) { /*计算集合1与集合2的交*/ pointer *p1,*p2,*p3; p1=head1->link; while(p1!=NULL) { p2=head2->link; while((p2!=NULL)&&(p2->dat!=p1->dat)) p2=p2->link; if((p2!=NULL)&&(p2->dat=p1->dat)) { p3=(pointer *)malloc(sizeof(struct pointer)); p3->dat=p1->dat; p3->link=head3->link; head3->link=p3; } p1=p1->link; } } void cha(pointer *head1,pointer *head2, pointer *head3) { /*计算集合1与集合2的差 */ pointer *p1,*p2,*p3; p1=head1->link; while(p1!=NULL) { p2=head2->link; while((p2!=NULL)&&(p2->dat!=p1->dat)) p2=p2->link; if(p2==NULL) { p3=(pointer *)malloc(sizeof(struct pointer)); p3->dat=p1->dat; p3->link=head3->link; head3->link=p3; } p1=p1->link; } } main() { pointer *head1,*head2,*head3; head1=(pointer *)malloc(sizeof(struct pointer)); head1->link=NULL; head2=(pointer *)malloc(sizeof(struct pointer)); head2->link=NULL; head3=(pointer *)malloc(sizeof(struct pointer)); head3->link=NULL; printf(\"建立集合1:\\n\"); readdata(head1); printf(\"建立集合2:\\n\"); readdata(head2); printf(\"集合1为:\\n\"); disp(head1); printf(\"集合2为:\\n\"); disp(head2); printf(\"集合1与集合2的并为:\\n\"); bing(head1,head2,head3); disp(head3); head3->link=NULL; printf(\"集合1与集合2的交为:\\n\"); jiao(head1,head2,head3); disp(head3); head3->link=NULL; printf(\"集合1与集合2的差为:\\n\"); cha(head1,head2,head3); disp(head3); } 实验结果: 四.实验中的问题及心得 通过对集合的并、交和差的实现,我们对线性表的基本操作有所进步。但是程序在对非法数据 并不能做出有效的应对,程序健壮性不足,我们在以后的试验中应对此进行加强。