⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p213214.cpp

📁 包含常见的数据结构的类和函数
💻 CPP
字号:
#include <assert.h>#include <iostream.h>const int DefaultSize = 100;class Set {//用位向量来存储集合元素。这些集合元素只具有整数类型, 集合元素的取值范围在0到MaxSetSize-1之间。public:   Set ( int MaxSetSize = DefaultSize );						//构造函数   ~Set ( ) { delete [ ] bitVector; }						//析构函数   void MakeEmpty ( ); 					 			//置空集合   int AddMember ( const int x );						//加入新成员x   int DelMember ( const int x );							//删除老成员x   void operator = ( Set & right );						//集合right赋值给集合this   void operator + ( Set & right );						//求集合this与集合right的并   void operator * ( Set & right );						//求集合this与集合right的交   void operator - ( Set & right );						//求集合this与集合right的差   int Contains ( const int x );							//判元素x是否集合this的成员   int SubSet ( Set & right );							//判集合this是否集合right的子集   int operator == ( Set & right );						//判集合this与集合right是否相等   friend ostream& operator <<(ostream& strm, Set& a);private:   int * bitVector;									//存储集合元素的位向量   int MaxSize;									//向量大小};Set::Set (int MaxSetSize) : MaxSize (MaxSetSize) {				//构造函数   assert ( MaxSize > 0 );								//检查参数的合理性   bitVector = new int [MaxSize];						//分配一个整型数组给位向量   assert ( bitVector != 0 );							//检查存储分配是否成功   for ( int i=0; i<MaxSize; i++ ) bitVector[i] = 0;				//初始化为空集合}void Set::MakeEmpty ( ) { for ( int i=0; i<MaxSize; i++ ) bitVector[i] = 0; } 	//置空集合int Set::AddMember ( const int x ) {						//把x加入到集合this中   assert ( x >= 0 && x < MaxSize );						//检查x的合理性   if ( ! bitVector[x] ) { bitVector[x] = 1;  return 1; }   return 0;					//x所在的位原来为0, 表示x不在集合中加入, 在相应位置置1}int Set::DelMember ( const int x ) {						//把x从集合中删去   assert ( x >= 0 && x < MaxSize );						//判断元素x的合理性   if ( bitVector[x] ) { bitVector[x] = 0;  return 1; }   return 0;					//若位向量在x处的值为1, 表示x在集合中该位置置0, 表示x删去}void Set::operator = ( Set & right ) {						//把集合right的值复制到集合this中   assert ( MaxSize == right.MaxSize );     					//判断两集合的大小是否相等   for ( int i=0; i<MaxSize; i++ ) bitVector[i] = right.bitVector[i];		//相等则位向量按位传送数据}void Set::operator + (Set & right ) {						//求两集合right与this的并   assert ( MaxSize == right.MaxSize );						//判断两集合的大小是否相等   for ( int i=0; i<MaxSize; i++ ) bitVector[i] = bitVector[i]|| right.bitVector[i];	//按位求"或"}void Set::operator * (Set & right ) {						//求两集合right与this的交   assert ( MaxSize == right.MaxSize );						//判断两集合的大小是否相等   for ( int i=0; i<MaxSize; i++) bitVector[i] = bitVector[i] && right.bitVector[i];	//按位求"与"}void Set::operator - ( Set & right ) {						//求集合this与集合right的差   assert ( MaxSize == right.MaxSize );						//判断两集合的大小是否相等   for ( int i=0; i<MaxSize; i++ ) bitVector[i] = bitVector[i] && ! right.bitVector[i];	//按位求"异或"}int Set::Contains ( const int x ) {		//测试元素x是否集合的成员。是则返回1, 否则返回0。   assert ( x >= 0 && x < MaxSize );						//判断元素x是否合理   return bitVector[x];								//合理则返回相关信息}int Set::operator == ( Set & right ) {	//测试集合this与集合right是否相等。若相等, 则函数返回1, 否则返回0。   assert ( MaxSize == right.MaxSize );						//判断两集合的元素个数是否相等   for ( int i=0; i<MaxSize; i++)							//相等则按位判断对应位是否相等	 if ( bitVector[i] != right.bitVector[i] ) return 0;   return 1;}int Set::SubSet (Set & right ) {		//若集合this是集合right的子集, 则函数返回1, 否则函数返回0。   assert ( MaxSize == right.MaxSize );						//判断两集合的元素个数是否相等   for ( int i=0; i<MaxSize; i++)							//相等再按位判断	 if ( bitVector[i] && ! right.bitVector[i] ) return 0;   return 1;					//this集合该位为1而right集合该位为0, 则返回0, 两集合不等}ostream& operator <<(ostream& strm, Set& a){  for (int i=0;i<a.MaxSize;i++)  if (a.bitVector[i])  {    strm<<i<<' ';  }  strm<<endl;   return strm;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -