`
anson_xu
  • 浏览: 514774 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

C++实例集合类

 
阅读更多

 

//

此程序通过数组来定义集合类,虽不如链表高级,
//

但是也蛮有趣味的,只是在下才疏学浅,运行时有时会出现错误
//

注意:是有时会出错,程序不稳定
//




 

#include<iostream.h> 

#define Max 10

int i=0,j=0;

class Set 

{ 

private: 

int elems[Max]; 

int pc;

public: 

Set(){pc=0;elems[0]='\0';} 

Set(Set &s); // 

对象引用作为参数 

void set();

int size(Set S);

void isfull(Set S);

void isempty(Set S);

int ismemberof(int n); 

int add(int n);

int delet(int n);

Set bingji(Set A,Set B);

Set jiaoji(Set A,Set B);

void display();

}; 

 

void Set::set()//

初始化
{

 int n,m,flag=0;

 cout<<"

数组元素的个数(N<=10)";

 cin>>n;

 cout<<"

输入数组元素:";

 for(i=0;i<n;i++)

  

{cin>>m;

   

for(j=0;j<pc;j++)

   

if(m==elems[j]) {flag=1;break;}

   

if(!flag)

   

{

    

elems[i]=m;

       

pc++;}

   

}

}

 

int Set::size(Set S)

{

 return S.pc;}

 

void Set::isempty(Set S)//

判断空
{if(!size(S)) 

 

cout<<"Empty!";

 else cout<<"Not Empty!";}

 

void Set::isfull(Set S)//

判断满
{if(size(S)==Max) 

 

cout<<"Full!";

 else cout<<"Not Full!";}

 

int Set::ismemberof(int n) //

判断是否为其元素
{ 

for(int i=0;i<pc;i++) 

if(elems[i]==n) 

return 1; 

return 0; 

} 

 

int Set::add(int n) //

增加元素
{ 

if(ismemberof(n)) 

return 1; 

else if(pc>Max) 

return 0; 

else 

{ 

elems[pc++]=n; 

return 1; 

} 

} 

 

 

int Set::delet(int n)//

删除元素
{

 if(ismemberof(n))

 {for(i=0;i<pc;i++)

 if(elems[i]==n) 

 

{pc--;

 for(j=i;j<pc;i++)

  

elems[j]=elems[j+1];

 }

 return 1;

 }

 else return 0;

 }

Set::Set(Set &p) //

复制构造函数
{ 

pc=p.pc; 

for(int i=0;i<pc;i++) 

elems[i]=p.elems[i]; 

} 

 

Set Set::bingji(Set A,Set B)

{ 

 

Set C(A);

 for(i=0;i<B.pc;i++)

   

for(j=0;j<C.pc;j++)

     

if(B.elems[i]!=C.elems[j]) C.add(B.elems[i]);

 return C;    



}

 

Set Set::jiaoji(Set A,Set B)

{

 Set C;

 for(i=0;i<B.pc;i++)

   

for(j=0;j<A.pc;j++)

     

if(B.elems[i]==A.elems[j]) C.add(B.elems[i]);

 return C;

}

 

void Set::display ()//

{

 

 

if(pc<1) cout<<"ф"<<endl;

 else

 {

  

cout<<"{";

     

for(i=0;i<pc-1;i++)

  

cout<<elems[i]<<",";

  

cout<<elems[i]<<"}";

  

cout<<endl;

  

}

}

 

int main()

{

 int n;

 Set A,B,C;

 cout<<"A";

 A.set();

 cout<<"B";

 B.set();

 cout<<"A=";

 A.display();

 cout<<"B=";

 B.display();

 cout<<"A∩B=";

 C=A.jiaoji(A,B);

 C.display();

 cout<<"A∪B=";

 C=A.bingji(A,B);

 C.display();

 cout<<"A

中选择要删除的元素:";

 cin>>n;

 A.delet(n);

 cout<<"A=";

 A.display();

 cout<<"B

中选择要删除的元素:";

 cin>>n;

 B.delet(n);

 cout<<"B=";

 B.display();

 cout<<"

输入要增加到集合A

中的元素:";

 cin>>n;

 if(!A.add(n)) cout<<"

增加失败,

集合A

已满!";

 else

   

{cout<<"A=";

    

A.display();

   

}

 cout<<"

输入要增加到集合B

中的元素:";

 cin>>n;

 if(!B.add(n)) cout<<"

增加失败,

集合B

已满!";

 else

   

{cout<<"B=";

    

B.display();

    

}  



 

return 0;

 }

 

 

新写法

// 看看符合你要求不?

#include <iostream>

using namespace std;

 

const int Max=100;

//------------------------------------------------------

class Set

{

unsigned int len;

int Elem[Max];

public:

//Constructor

Set();

Set(const Set & SetObj);

 

inline bool isFull() const;

inline bool isEmpty() const;

inline unsigned int size() const;

inline int isMemberOf(int nElem) const;// 返回位置

 

bool addElem(int nElem);

bool delElem(int nElem);

 

Set Union(const Set & SetB);

Set InSection(const Set & SetB);

 

void display() const;

void Input();

};

//------------------------------------------------------

Set::Set():len(0){}

//------------------------------------------------------

Set::Set(const Set & SetObj)

{

for (len = 0;len < SetObj.len;len++)

{

Elem[len] = SetObj.Elem[len];

}

}

//------------------------------------------------------

unsigned int Set::size() const

{

return len;

}

//------------------------------------------------------

bool Set::isEmpty() const

{

return len == 0;

}

//------------------------------------------------------

bool Set::isFull() const

{

return len == Max;

}

//------------------------------------------------------

int Set::isMemberOf(int nElem) const

{

for (int index = 0; index < len; index++)

{

if (Elem[index] == nElem) return index + 1;

}

return -1;

}

//-------------------------------------------------------

void Set::display() const

{

for (int index = 0; index < len;index++)

cout<<Elem[index]<<" ";

cout<<endl;

}

//-------------------------------------------------------

// 添加和删除元素操作

//-------------------------------------------------------

bool Set::addElem(int nElem)

{

if (isFull()) return false;

else if (isMemberOf(nElem)!= -1){}//Do nothing

else

{

Elem[len++] = nElem;

}

return true;

}

//--------------------------------------------------------

bool Set::delElem(int nElem)

{

int loc = isMemberOf(nElem);

if (isEmpty()||(loc == -1)) return false;

for (int index = loc; index < len; index++)

{

Elem[index - 1] = Elem[index];

}

len--;

return true;

}

//--------------------------------------------------------

// 求交集(InSection) 与并集(Union)

//--------------------------------------------------------

Set Set::Union(const Set & SetB)

{

// 注意: 没有考虑溢出的情况

Set SetC(SetB);

for (int index = 0;index < len;index++)

SetC.addElem(Elem[index]);

return SetC;

}

//------------------------------------------------------------

Set Set::InSection(const Set & SetB)

{

Set SetC;

for (int index = 0;index < len;index++)

{

for (int indexB = 0;indexB < SetB.len;indexB++)

{

if (Elem[index] == SetB.Elem[indexB])

SetC.addElem(Elem[index]);

}

}

return SetC;

}

//--------------------------------------------------------------

void Set::Input()

{

int nSize;

cout<<" 请输入集合的大小:\n";

cin>>nSize;

if (nSize > Max) return;

cout<<" 请输入集合元素!\n";

for (int i = 0,elem; i < nSize ;i++)

{

cin>>elem;

addElem(elem);

}

}

//---------------------------------------------------------------

 

int main()

{

int n;

Set A,B,C;

cout<<"A";

A.Input();

cout<<"B";

B.Input();

cout<<"A=";

A.display();

cout<<"B=";

B.display();

cout<<"A∩B=";

C=A.InSection(B);

C.display();

cout<<"A∪B=";

C=A.Union(B);

C.display();

cout<<" A 中选择要删除的元素:";

cin>>n;

A.delElem(n);

cout<<"A=";

A.display();

cout<<" B 中选择要删除的元素:";

cin>>n;

B.delElem(n);

cout<<"B=";

B.display();

cout<<" 输入要增加到集合A 中的元素:";

cin>>n;

if (!A.addElem(n)) cout<<" 增加失败, 集合A 已满!";

else

{

cout<<"A=";

A.display();

}

cout<<" 输入要增加到集合B 中的元素:";

cin>>n;

if (!B.addElem(n)) cout<<" 增加失败, 集合B 已满!";

else

{

cout<<"B=";

B.display();

}

return 0;

}

 

 

 

  • 大小: 16.2 KB
分享到:
评论

相关推荐

    C++实例集合 (C++程序语言设计教程)

    "C++实例集合"是一个专门针对初学者和进阶者设计的教程,旨在通过一系列实践性的例子帮助学习者深入理解C++的核心概念和技术。这个教程不仅涵盖了基础语法,还包括了面向对象编程的精髓,如类、对象、继承、多态等。...

    经典C++实例课程设计

    综上所述,"经典C++实例课程设计"不仅仅是一个学习资源的集合,它更是一个完整的C++学习体系。它从基础讲稿开始,逐步深入到复杂的问题解决和编程实践,最终通过样卷测试来巩固和反馈学习成果。通过这样的课程设计,...

    30个经典的C++实例.rar

    这个"30个经典的C++实例.rar"压缩包显然旨在帮助初学者通过实践来掌握C++的基础和进阶概念。下面,我们将深入探讨这些实例可能涵盖的一些关键知识点。 1. **基本语法和数据类型**:C++的基础包括变量声明、数据类型...

    Visual C++实例范例大全

    《Visual C++实例范例大全》是一份专为学习和精通Visual C++ 6.0开发环境而设计的资源集合。这份压缩包包含了丰富的实例,旨在帮助用户深入理解和掌握C++编程语言在Microsoft Visual Studio 6.0集成开发环境中的应用...

    C++项目实例案例

    3. **类与对象**:C++的核心是面向对象编程,类是定义对象的模板,对象是类的实例。你需要掌握如何定义类,创建对象,以及封装、继承和多态等面向对象的概念。 4. **指针**:C++中的指针能够直接访问内存地址,是其...

    c++实例教程

    ### C++实例教程知识点概述 #### 一、Visual C++简介 - **Visual C++的特点**:Visual C++是一款用于开发Windows平台应用的强大工具,它不仅支持C++语言,还集成了Microsoft Foundation Classes (MFC)类库,极大地...

    Visual.C++.MFC扩展编程实例集合

    《Visual C++ MFC扩展编程实例集合》是一个专注于利用Microsoft Foundation Classes (MFC)库进行扩展编程的资源合集。MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了Windows API,使得开发者能更方便地...

    Visual C++开发实例大全(提高卷)光盘源码

    《Visual C++开发实例大全(提高卷)光盘源码》是一份专为开发者准备的资源集合,旨在帮助他们深入理解和应用Visual C++这一强大的编程工具。这份源码集主要针对那些希望提升自己C++编程技能,特别是使用Microsoft ...

    C++编程实例100篇

    "C++编程实例100篇"很显然是一份集合了多种C++编程实践的资源,旨在帮助学习者通过实际操作来掌握C++的核心概念和高级特性。 1. **基础语法**:C++的基础包括变量、数据类型、运算符、流程控制(如if-else,switch...

    VISUAL C++MFC编程实例

    CRecordset类提供了数据库记录的集合操作。 10. **动态链接库(DLL)**:MFC支持创建和使用DLL,可以实现代码复用和模块化开发。 11. **异常处理**:MFC引入了CException类来处理运行时错误,提供了一种统一的异常...

    C++精彩实例源代码

    3. **数组与指针**:数组是一系列相同类型的元素集合,而指针则存储内存地址,两者在C++中有着密切关系,是理解内存管理和高效编程的关键。 4. **类与对象**:作为面向对象编程的核心,C++的类定义了数据结构(成员...

    C++精彩实例详细讲解

    8. **STL(标准模板库)**: STL是C++中的一组库,包括容器(如数组、链表、集合等)、迭代器、算法和函数对象,大大提高了开发效率。 9. **I/O流库**: C++的iostream库提供了输入输出流的概念,如cin用于从标准输入...

    C++练习实例++

    在这个"练习实例++"的集合中,我们可能会遇到各种各样的编程任务,包括但不限于基础语法练习、数据结构和算法实现、面向对象编程概念的应用、模板的使用、文件操作、输入/输出流的处理、异常处理以及STL(标准模板库...

    简单基础C++实例(从书上整理的)

    标题“简单基础C++实例(从书上整理的)”暗示了这是一个关于C++初学者教程的集合,包含了从书籍中提取的、经过验证的代码示例。这些实例通常会涵盖C++的基础概念,例如变量、数据类型、运算符、流程控制语句(如if-...

    C++实例源代码(每一个代码都测试可用)

    这个压缩包中包含的是一系列C++实例源代码,这些代码来源于书籍,并且已经在VC++6.0环境下经过了实际测试,确保了其可用性。这对于C++初学者来说是一份宝贵的学习资源,可以通过实践来理解和掌握C++的基础概念和编程...

    C C++实例教程

    《C C++实例教程》是一份综合性的编程学习资料,主要针对C语言和C++语言的基础及进阶知识进行深入讲解。本教程旨在通过丰富的实例,帮助初学者和有一定基础的程序员更好地理解和掌握这两种强大的编程语言。 C语言是...

    c++编程实例100例

    "C++编程实例100例"集合了丰富的编程示例,为初学者提供了深入学习C++的宝贵资源。这些实例覆盖了C++的基础语法、面向对象特性、模板、异常处理等多个方面,旨在帮助读者将理论知识转化为实践能力。 1. **基础语法*...

    c++编程实例100篇

    4. **数组与指针**:数组用于存储同类型的数据集合,而指针则能直接操作内存,两者在C++中极其重要,实例会展示它们的使用场景。 5. **类与对象**:C++的面向对象特性通过类来体现,实例会涵盖类的定义、对象的创建...

Global site tag (gtag.js) - Google Analytics