数组的两种连接方式

数组的两种连接方式



编译环境:Dev 5.6.1 C++

#include<cstdio>
#include<cstdlib>
#include<cstring>

class Node
{
public:
	int **data;
	int hang;
	int lie;
	Node()
	{
		data=NULL;
	}
	Node(int h,int l)
	{
		hang=h;
		lie=l;
		data=(int **)malloc(hang*sizeof(int *));
		for(int i=0;i<lie;i++)
		{
			data[i]=(int *)malloc(sizeof(int )*lie);
		}
	}
	Node(int h,int l,int **a)
	{
		hang=h;
		lie=l;
		data=(int **)malloc(sizeof(int *)*hang);
		for(int i=0;i<lie;i++)
		{
			data[i]=(int *)malloc(sizeof(int )*lie);
		}
		for(int i=0;i<hang;i++)
		{
			for(int j=0;j<lie;j++)
			{
				data[i][j]=a[i][j];
			}
		}
	}
	Node(const Node &deepCopy)
	{
	//	printf("深拷贝\n");
		hang=deepCopy.hang;
		lie=deepCopy.lie;
		data=(int **)malloc(hang*sizeof(int *));
		for(int i=0;i<hang;)
		{
			data[i]=(int *)malloc(lie*sizeof(int));
		}
		for(int i=0;i<hang;i++)
		{
			for(int j=0;j<lie;j++)
			{
				data[i][j]=deepCopy.data[i][j];
			} 
		}
	//	printf("拷贝结束\n");
	}
	~Node()
	{
	//	printf("start to free %p\n",data);
		for(int i=0;i<hang;i++)
		{
			if(data[i]!=NULL)
			{
			//	printf("data[%d]==%p",i,data[i]);
				free(data[i]);
				data[i]=NULL;
			//	printf("  change to %p\n",data[i]);
			}
		}
		if(data!=NULL)
		{
		//	printf("data==%p\n",data);
			free(data);
			data=NULL;
		}
	//	printf("end of free\n");
	}
	void del()
	{
	//	printf("start to free %p\n",data);
		for(int i=0;i<hang;i++)
		{
			if(data[i]!=NULL)
			{
			//	printf("data[%d]==%p",i,data[i]);
				free(data[i]);
				data[i]=NULL;
			//	printf("  change to %p\n",data[i]);
			}
		}
		if(data!=NULL)
		{
		//	printf("data==%p\n",data);
			free(data);
			data=NULL;
		}
	//	printf("end of free\n");
	}
	void Print()
	{
		printf("[ ");
		for(int i=0;i<hang;i++)
		{
			printf("[ ");
			for(int j=0;j<lie;j++)
			{
				printf("%d",data[i][j]);
				if(j!=lie-1)
				{
					printf(",");
				}
			}
			printf(" ]");
			if(i!=hang-1)
			{
				printf(",");
			}
		}
		printf(" ]\n");
	}
	void concat(int mode,Node &a,Node &b)
	{
		if(data!=NULL)
		{
			del();
		}
		int chang,kuan;
		chang=a.lie;
		kuan=a.hang;
		
		if(mode)
		{
			hang=kuan;
			lie=chang*2;
			data=(int **)malloc(hang*sizeof(int *));
			for(int i=0;i<kuan;i++)
			{
				data[i]=(int *)malloc(lie*sizeof(int));
			}
			for(int i=0;i<a.hang;i++)
			{
				for(int j=0;j<a.lie;j++)
				{
					data[i][j]=a.data[i][j];
				}
			}
			for(int i=0;i<b.hang;i++)
			{
				for(int j=a.lie;j<a.lie+b.lie;j++)
				{
					data[i][j]=b.data[i][j-a.lie];
				}
			}
		}
		else
		{
			hang=kuan*2;
			lie=chang;
			data=(int **)malloc(hang*sizeof(int *));
			for(int i=0;i<hang;i++)
			{
				data[i]=(int *)malloc(lie*sizeof(int));
			}
			for(int i=0;i<a.hang;i++)
			{
				for(int j=0;j<a.lie;j++)
				{
					data[i][j]=a.data[i][j];
				}
			}
			for(int i=a.hang;i<a.hang+b.hang;i++)
			{
				for(int j=0;j<b.lie;j++)
				{
					data[i][j]=b.data[i-a.hang][j];
				}
			}
		}
	}
};
int main()
{
	
//	t1.data={{1,2,3},{4,5,6}};
	Node t1(2,3);
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<3;j++)
		{
			t1.data[i][j]=i*3+j+1;
		}
	}
	printf("t1为:\n");
	t1.Print();
	printf("***************\n");
	
	
//	int t2[][3]={{7,8,9},{10,11,12}};
	Node t2(2,3);
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<3;j++)
		{
			t2.data[i][j]=i*3+j+7;
		}
	}
	printf("t2为:\n");
	t2.Print();
	printf("***************\n");
	
	
	Node tt1;
	tt1.concat(0,t1,t2);
	printf("tt.concat 0模式链接:\n"); 
	tt1.Print();
	printf("***************\n");
	
	tt1.concat(1,t1,t2);
	printf("tt.concat 1模式链接:\n"); 
	tt1.Print();
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wang_huizhang/article/details/80279974