1. 程式人生 > >資料結構  稀疏矩陣的轉置 C/C++

資料結構  稀疏矩陣的轉置 C/C++

思路:

三元結構體陣列將分別儲存 行, 列,值

將行列交換

對交換後的行進行排序

typedef
	struct Node {
		int row; // 行
		int col; // 列
		int data;
	}Node;

void initList(Node *, int);
int inputList(Node *, int[][3],int,int);
void printList(Node *, int);
void transpositionList(Node *, int, int[][5]);
void transpositionList(Node * list,int);
void sort(Node * , int);
void printArray(int r,int c,int [][5]);
void intiArray(int r, int c, int[][5]);
void printArray(int r,int c,int [][5]);

int main(void)
{

	int arr[5][3] = { {0,0,1},
					  {2,0,0},
					  {0,3,0},
					  {4,0,0},
					  {5,0,0}};

	Node list[5 * 3];
	initList(list, 15);
	int len = inputList(list, arr,5,3);
	printList(list, len);
	transpositionList(list,len);
	printList(list,len);

	int transpositionArray[3][5];
	intiArray(3,5,transpositionArray);
	transpositionList(list,len, transpositionArray);
	printArray(3,5,transpositionArray);
	return 0;
}

void initList(Node * list, int n)
{
	int i;
	for (i = 0; i < n; i++) {
		list[i].col = 0;
		list[i].row = 0;
		list[i].data = 0;
	}
}

int inputList(Node * list, int a[][3],int row,int col)
{
	int count = 0;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (a[i][j] != 0)
			{
				list[count].row = i;
				list[count].col = j;
				list[count++].data = a[i][j];
			}
		}
	}
	return count;
}

void printList(Node * list, int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << list[i].row << " " << list[i].col << " " << list[i].data << endl;
	}
	cout << endl;
}

void transpositionList(Node * list, int n, int a[][5])
{
	for (int i = 0; i < n; i++)
	{
		a[list[i].row][list[i].col] = list[i].data;
	}
	cout << endl;
}

void transpositionList(Node * list,int len)
{
	for (int i = 0; i < len; i++)
	{
		int tmp = list[i].row;
		list[i].row = list[i].col;
		list[i].col = tmp;
	}
	printList(list, len);
	sort(list, len);
}

void sort(Node * list, int len)
{
	for (int i = 1; i < len; i++)
	{
		for (int j = 0; j < len - i; j++)
		{
			if (list[j].row > list[j + 1].row)
			{
				Node tmp = list[j];
				list[j] = list[j + 1];
				list[j + 1] = tmp;
			}
		}
	}
}

void intiArray(int r, int c, int a[][5])
{
	for (int i = 0; i < r; i++)
	{
		for (int j = 0; j < c; j++)
		{
			a[i][j] = 0;
		}
	}
}

void printArray(int r, int c, int a[][5])
{
	for (int i = 0; i < r; i++)
	{
		for (int j = 0; j < c; j++)
		{
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
}