1.2二维数组的操作运算

/********************************
*
*		c++程序设计实践指导
*
*		1.2二维数组的操作运算
*
*********************************/

#include <iostream>
using namespace std;
class MATRIX
{
	struct  LinkNode		//定义二维数组数据结构体
	{
		int Row;		//存放行号
		int Column;		//存放列号
		int Data;		//存放二维数组对应行号和列号中的数
		LinkNode *Next;		//指向下一个节点的指针
	};
	int m;		//存放行列值
	int sum1;		//存放非对角线和值
	int sum2;		//存放主对角线和值
	LinkNode *head;		//单链表头结点
public:
	MATRIX(int x[][40], int k)		//构造函数,用k初始化m,创建单链表,为每一个节点加入行号、列号、数值
	{
		m = k;
		head = new LinkNode;		//为头结点分配存储空间
		LinkNode *p = head;
		for(int i = 0; i < k; i++)
		{
			for(int j = 0; j < k; j++)
			{
				LinkNode *q = new LinkNode;
				p->Next = q;
				p = q;
				q->Row = i;
				q->Column = j;
				q->Data = x[i][j];
			}
		}
		p->Next = NULL;		//最后一个节点的下节点指针为空,表示链表到此结束
		sum1 = 0;		//和值初始值为0
		sum2 = 0;
	}
	void process();		//完成求和功能
	void reverse();		//完成任意二维数组顺时针旋转90度的功能
	void show()			//在屏幕显示结果
	{
		LinkNode *p = head->Next;
		while(p)
		{
			cout << p->Data << "\t";
			if(p->Column == m - 1)		
				cout << endl;
			p = p->Next;
		}
		cout << "非对角线和值为: " << sum1 << endl;
		cout << "主对角线和值为: " << sum2 << endl;
	}
};

void MATRIX::process()		//完成求和功能
{
	LinkNode *p = head->Next;
	while(p->Next)
	{
		while((p->Row == p->Column) || (p->Row + p->Column == m - 1))
		{
			if(p->Row == p->Column)		//主对角线上元素求和
				sum2 += p->Data;
			p = p->Next;
		}
		sum1 += p->Data;		//非对角线上元素求和
		p = p->Next;
	}
	sum2 += p->Data;		//最后一个主对角线上的元素补上
}

void MATRIX::reverse()		//完成任意二维数组顺时针旋转90度的功能
{
	LinkNode *p = head->Next;
	int c[40][40];		//存放旋转后的数组
	int vRow = 0;		//存放结果数组的行号
	int vColumn;		//存放结果数组的列号
	cout << "顺时针旋转后的二维数组:" << endl;
	while(p->Next)		//用单链表初始化结果数组
	{
		vColumn = m - 1 - (p->Row);
		c[vRow][vColumn] = p->Data;
		vRow++;
		vRow = vRow % 4;
		p = p->Next;
	}
	c[m - 1][0] = p->Data;		//最后一个元素手动补上
	for(int i = 0; i < m; i++)		//结果数组输出到屏幕显示
	{
		for(int j = 0; j < m; j++)
		{
			cout << c[i][j] << "\t";
		}
	    cout << endl;
	}
}
int main()
{
	int b[40][40] = {{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}};
	MATRIX mtx(b, 4);
	mtx.process();
	mtx.show();
	mtx.reverse();
	system("pause");
	return 0;
}

你可能感兴趣的:(c++程序设计实践指导)