视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据结构集合运算求交集并集差集
2025-09-28 02:08:23 责编:小OO
文档
                                                              

课程设计报告

课程设计题目: 集合的运算        

 

学生姓名:柳志强     

专    业:信息管理与信息系统

班    级:10210303

学    号:1021030334     

指导教师:吴志强   

  

         2012年  06 月  20日

1、课程设计目的

课程设计为学生提供了一个既动手又动脑,实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。

实验报告书总体要求:

    1、封面;

    2、题目与流程图或模块图;

    3、程序清单和运行结果;

    4、小结(收获和体会);

5、装订成册.

2、课程设计题目和流程图

      1、题目:求集合的运算问题

         要求:1)集合的元素限定为小写字母

               2)实现集合的交集、并集和差运算

      2、数据定义

         1)、有序表的抽象数据类型定义为:

              readdata(linklist head)

              初始条件:head是以head为头节点的空链表。

              操作结果:生成以head为头节点的非空链表。

              pop(linklist head)

              初始条件:head是以head为头节点的非空链表。

              操作结果:将以head为头节点的链表中数据逐个输出。

        2)、集合的抽象数据类型定义为:

              and(linklisthead1,linklist head2,linklist head3)

              初始条件:链表head1、head2、head3已存在

              操作结果:生成一个由head1和head2的并集构成的集合head3。

              or(linklist head1,linklist head2,linklist head3)

              初始条件:链表head1、head2、head3已存在

              操作结果:生成一个由head1和head2的交集构成的集合head3。

              differ(linklist head1,linklist head2,linklist head3)

              初始条件:链表head1、head2、head3已存在

              操作结果:生成一个由head1和head2的差集构成的集合head3。

 3、模块图模块结构

       系统主要由8个模块组成,分别是:

       1、单链表的建立

       2、单链表输出

       3、集合交集

       4、集合并集

       5、集合差集

       6、主函数

模块之间的结构如下:

3、程序清单和运行结果

1、程序清单

#include

#include

typedef struct Node

{

    char data;

    struct Node*next;

}*linklist;

void readdata(linklist head)

{

    linklist p;

    char a;

    scanf("%c",&a);

    while(a!='\\n')

    {

        p=(linklist)malloc(sizeof(struct Node));

     p->data=a;

     p->next=head->next;

     head->next=p;

        scanf("%c",&a);

    }

}

void pop(linklist head)

{

    linklist p;

p=head->next;

    while(p!=NULL)

    {

     printf("%c",p->data);

     p=p->next;

    }

    printf("\\n");

}

void and(linklist head1,linklist head2,linklist head3)

{

    linklist p1,p2,p3;

p1=head1->next;

    while(p1!=NULL)

    {

        p3=(linklist)malloc(sizeof(struct Node));

     p3->data=p1->data;

     p3->next=head3->next;

     head3->next=p3;

     p1=p1->next;

    }

p2=head2->next;

    

while(p2!=NULL)

    {

     p1=head1->next;

     while((p1!=NULL)&&(p1->data!=p2->data))

         p1=p1->next;

        if (p1==NULL)

        {

            p3=(linklist)malloc(sizeof(struct Node));

         p3->data=p2->data;

         p3->next=head3->next;

         head3->next=p3;

        }

     p2=p2->next;

    }

}

void or(linklist head1,linklist head2,linklist head3)

{

    linklist p1,p2,p3;

p1=head1->next;

    while(p1!=NULL)

    {

     p2=head2->next;

     while((p2!=NULL)&&(p2->data!=p1->data))

     p2=p2->next;

     if((p2!=NULL)&&(p2->data==p1->data))

        {

            

          p3=(linklist)malloc(sizeof(struct Node));

         p3->data=p1->data;

         p3->next=head3->next;

         head3->next=p3;

        }

     p1=p1->next;

    }

}

void differ(linklist head1,linklist head2,linklist head3)

{

    linklist p1,p2,p3;

p1=head1->next;

    while(p1!=NULL)

    {

     p2=head2->next;

     while((p2!=NULL)&&(p2->data!=p1->data))

     p2=p2->next;

        if(p2==NULL)

        {

            p3=(linklist)malloc(sizeof(struct Node));

         p3->data=p1->data;

         p3->next=head3->next;

         head3->next=p3;

        }

     p1=p1->next;

    }

}

void main(linklist head1,linklist head2,linklist head3)

{

    int x;

    printf("shu ru shu ju,an hui che jian jie shu \\n");

    head1=(linklist)malloc(sizeof(struct Node));

head1->next=NULL;

    head2=(linklist)malloc(sizeof(struct Node));

head2->next=NULL;

    head3=(linklist)malloc(sizeof(struct Node));

head3->next=NULL;

    printf("please input ji he 1 \\n");

    readdata(head1);

    printf("please input ji he2 \\n");

    readdata(head2);

A:printf("1.bing ji  2.jiao ji  3.cha ji  4.end  \\n");

  do{

    printf("qing xuan ze xu hao \\n");

    scanf("%d",&x);

switch(x)

{

case 1:

    printf("liang ge ji he de bing ji shi \\n");

    and(head1,head2,head3);

    pop(head3);

    

   

head3->next=NULL;

    break;

    case 2:

    printf("liang ge ji he de jiao ji shi \\n");

    or(head1,head2,head3);

    pop(head3);

head3->next=NULL;

    break;

case 3:

    printf("liang ge ji he de cha ji shi \\n");

    differ(head1,head2,head3);

    pop(head3);

head3->next=NULL;

    break;

case 4:break;

    default:goto A;

}

    }while(x!=4);

}_

   

2、运行结果

  a)求并集结果

     

 b)求交集结果

     

c) 求差集结果

   

4、课程设计心得

     这次为期一周的课程设计对我印象极为深刻,实验开始时,我对自己的题目还感到比较的迷茫,仅仅可以用一些基本的知识来写一些基本的语句,而对于集合运算整个程序的设计却是非常迷茫,经过一周的学习,加上向老师和同学的请教等现在对于自己的程序达到了完全的理解,在以后同样的问题上,我相信自己就可以很轻松的解决了。在这期间我们也遇到了好多的困难,但是通过吴老师的教导和对一些文献的参考等,使得我对知识有了更加深入的了解,这对我们以后的工作有很大的帮助,在这里向吴志强老师表示由衷的感谢。

一周的数据结构课程设计结束了。原计划的设计思想也基本实现,回首整个过程,我深刻的体会到了学无止境的道理,不仅加深了我对数据结构知识的了解和掌握,而且对程序的设计也有了更加深入的体会。与此同时,我的设计报告仍然有一些不足之处,一些集合元素判断问题等没有设计。因此不是很完美,但是学习的真正目的在于应用。这次实验对我来说仍然是一个很好的锻炼机会,是最宝贵的,通过不断的尝试和锻炼才能巩固自己所学的知识,提高自己的应用能力,这些经验对我走向社会都是一笔宝贵的财富。下载本文

显示全文
专题