数据结构课程设计

您所在的位置:网站首页 集合的基本运算课堂小结怎么写的 数据结构课程设计

数据结构课程设计

2024-07-16 02:48:21| 来源: 网络整理| 查看: 265

集合的交、并和差运算

数据结构课程设计任务书

学生姓名:        专业班级: 软件工程

指导教师:        工作单位: 

题  目:  集合的并、交和差运算                                    

基础要求:

掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。

3、提高综合运用所学的理论知识和方法独立分析和解决问题的能力。

主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

(1)任务内容

编制一个能演示执行集合的并、交和差运算的程序。

(2)完成要求

对系统进行功能模块分析、控制模块分析;系统设计要能完成题目所要求的功能;编程简练,可用,尽可能的使系统的功能更加完善和全面;说明书、流程图要清楚;提高学生的论文写作能力;特别要求自己独立完成;在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。

(3)撰写课程设计报告

报告格式按附件要求打印与写课程设计报告;论文包括目录、正文、小结、参考文献、附录等;课程设计论文装订按学校的统一要求完成。

时间安排:

内容                  天数             地点

构思及收集资料          1              图书馆

编码与调试              3              图书馆

撰写论文                1              图书馆

指导教师签名:                      年    月    日

完整资料一键获取私信我:

 

问题分析和任务定义

1.1 问题的描述

编制一个能演示执行集合的并、交和差运算的程序。

1.2 基本要求

(1) 集合的元素限定为小写字母字符 [‘a’..’z’] ,集合输入的形式为

一个以“回车符“为结束标志的字符串,串中字符顺序不限。

(2) 演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提

示信息“之后,由用户在键盘上输入演示程序中规定的运算命令﹔相应的输入数

据和运算结果显示在其后。 

1.3 程序执行的命令包括:

(1)构造集合1;

(2)构造集合2;

(3)求并集;

(4)求交集;

(5)求差集;

1.4 测试数据

(1)Set1="magazine",Set2="paper",

Set1∪Set2="aegimnprz",Setl ∩Set2="ae",Set1-Set2="gimnz"。

(2)Set1= " 012oper4a6tion89",Set2="error data",

Set1∪Set2="adeinoprt",Setl ∩Set2="aeort",Set1-Set2="inp"。

1.5 实现提示

以有序链表表示集合。

数据结构的选择和概要设计

为实现上述程序功能,应该以有序链表表示集合,因此需要两个抽象数据类型:有序表和集合。

2.1 有序表的抽象数据类型定义为:

ADT OrderedList

{

数据对象:D={ai|ai CharSet,i=1,2,3,...n}

数据关系:R1={|ai-1,ai  D,ai-1

    ElemType data;

    struct LNode *next; 

}LNode, *LinkList;

//初始化操作

Status InitList(LinkList &L)

{

//构造一个空的单链表L

    L=new LNode;

    L->next=NULL;

    return OK;

}

//存储输入的字符串

Status cun_chu(ElemType *ch,int &length)

{

    length=0;

    ch[length]=getchar();

    length=1;

    ch[1000];

    while(true)

    {

       ch[length++]=getchar();

       if(ch[length -1 ]=='\n')

       {

           break;

       }

    }

    return OK;

}

//存储集合

Status Creat(LinkList &L)

{

    //初始化链表

    InitList(L);

    L = new LNode;

    L->next=NULL;

    LinkList r = L;

    int length;

    ElemType ch[1000];

    cun_chu(ch,length);

    for(int i=0;i

           continue;

       }

       LinkList p = new LNode;

       p->data = ch[i];

       r->next = p;

       r=p;

     }

     r->next = NULL;

     return OK;

 }

//返回一个集合的长度

Status Length(LinkList L)

 {

    int i=0;

    while(L->next != NULL)    //下一个结点不为空

     {

        i++;

        L=L->next;

      }

      return i;

  }

 

//对一个字母集合进行从小到大的排序

Status Sort(LinkList &L)

{

    LinkList p,q,n;

    int l=Length(L);

    if(l

       flag=0;

       p=L;

       q=p->next;     //若从头结点开始,指向第一个有data值的结点

       n=q->next;     //指向与其相邻的下一个结点

       for(int j=0;j

              flag=1;

              p->next=n;

              q->next=n->next;

              n->next=q;

              q=p->next;

              n=q->next;

            }

            p=q;

            q=n;

            n=n->next;

        }

     }

     return OK;

 }

//输出集合

Status bianli(LinkList L)

 {

    if(L->next == NULL)

    {

       cout

           coutnext;

        }

     }

     cout

    InitList(C);     //初始化集合C

    LinkList i = A->next;     //指向集合A的第一个元素

    LinkList j = B->next;     //指向集合B的第一个元素

    LinkList k = C;

    while(i!=NULL && j!=NULL)    //两个集合都没有遍历完

    {

       if(i->data < j->data)    //集合A的元素小于B

       {

           if(k->data != i->data)    //集合A的该元素与并集中的上一个存入的元素不同,执行存入

           {

              k->next=i;

              k=i;

           }

           i=i->next;

       }

       else if(i->data > j->data)    //集合A的元素大于B

       {

           if(k->data != j->data)    //集合A的该元素与并集中的上一个存入的元素不同,执行存入

           {

              k->next=i;

              k=j;

           }

           j=j->next;

       }

       else    //集合A的元素等于B

       {

           if(k->data != j->data)    //集合A的该元素与并集中的上一个存入的元素不同,执行存入

           {

              k->next=j;

              k=j;

           }

           i=i->next;

           j=j->next;

       }

    }

    if(j!=NULL)   //集合A已经遍历结束,集合B没有,将集合B中剩下所有元素插入,并且是不重复插入

    {

       int m;

       if(k->data != j->data)   //确保并集中不插入重复元素

       {

           k->next=j;

           m=1;

       }

       j=j->next;

       if(j!=NULL && m==1)

       {

           k=k->next;

           m=0;

       }

     }

     if(i!=NULL)   //集合B已经遍历结束,集合A没有,将集合A中剩下所有元素插入,并且是不重复插入

    {

       int n;

       if(k->data != i->data)   //确保并集中不插入重复元素

       {

           k->next=i;

           n=1;

       }

       i=i->next;

       if(i!=NULL)

       {

           k=k->next;

           n=0;

       }

     }

     if(k->next != NULL)

     {

        k=k->next;

     }

     k->next = NULL;

     return OK;

 }

 //集合的交运算

 Status InterSet(LinkList A, LinkList B, LinkList C)

 {

    InitList(C);

    LinkList i = A->next;     //指向集合A的第一个元素

    LinkList j = B->next;     //指向集合B的第一个元素

    LinkList k = C;

    while(i != NULL && j!=NULL)

    {

       if(i->data < j->data)

       {

           i=i->next;

        }

       else if(i->data > j->data)

       {

           j=j->next;

       }

       else

       {

           if(k->data != i->data)

           {

              k->next = i;

              k=i;

           }

           i=i->next;

           j=j->next;

        }

     }

     k->next = NULL;

     return OK;

  }

 

//集合的差运算

Status DifferentSet(LinkList A,LinkList B,LinkList C)

{

    InitList(C);

    LinkList i = A->next;     //指向集合A的第一个元素

    LinkList j = B->next;     //指向集合B的第一个元素

    LinkList k = C;

    while(i != NULL && j!=NULL)  //如果集合A的元素比B的小,说明该元素之后也不会出现在B集合

    {

       if(i->data < j->data)

       {

           if(k->data != i->data)

           {

              k->next=i;

              k=i;

           }

           i=i->next;

        }

       else if(i->data > j->data)

       {

           j=j->next;

       }

       else     //避免集合中重复元素的影响

       {

           int n=0;

           j=j->next;

           if(i->next ==NULL)

           {

              i=i->next;

           }

           while(i!=NULL && i->next != NULL)

           {

              if(i->data == i->next->data)

              {

                  i=i->next->next;

                  n=1;

              }

              else

              {

                  if(n==0)

                  {

                     i=i->next;

                  }

                  break;

              }

           }

        }

     }

     if(i)

     {

        k->next = i;    //如果A有剩余,直接加进去

     }

     else k->next =NULL;

     return OK;

 }

//菜单界面

Status showMenu()

{

    cout

           case 1:     //集合的并集

              cout



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭