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;
}
相關文章
相關標籤/搜索