1. 程式人生 > >陣列和廣義表 講義實現

陣列和廣義表 講義實現

在這裡插入圖片描述
一般都是採用順序儲存的方式來表示陣列。
兩種順序儲存方式

  1. 以行序為主序儲存
  2. 以列序為主序儲存

在這裡插入圖片描述

在這裡插入圖片描述

無論是行優先還是列優先

  1. 開始節點的存放地址
  2. 維數和每維的上下界
  3. 每個陣列元素所佔用的空間數

多維陣列時
行優先:從右到左
列優先:從左到右

矩陣的壓縮儲存

為多個相同的非零元素只分配一個儲存空間,對零元素不分配空間。

對稱矩陣

在這裡插入圖片描述

在這裡插入圖片描述

三角矩陣

對角矩陣

稀疏矩陣

在這裡插入圖片描述

template <class T>
struct Triple
{
	int i;	//該非零元的行下標
int j; //該非零元的列下標 T e; //該非零元的值 };//三元組型別 template <class T> class TSMatrix { public: Triple<T> data[MAXSIZE+1]; int rows; //行數值 int cols; //列數值 int nums; //該非零元素的個數 public: TSMatrix(); ~TSMatrix(); Status InitMatrix(T *A, int rows, int cols); Status TransMatrix(TSMatrix &M); Status FastTransMatrix
(TSMatrix &M); Status DispMatrix(char name); };
//矩陣轉置演算法實現
template <class T>
Status TSMatrix<T>::TransMatrix(TSMatrix &M)
{
	//採用三元組表方式儲存,實現矩陣的轉置
	rows = M.cols;
	cols = M.rows;
	nums = M.nums;
	if(nums != 0)
	{
		int q = 0;	//新三元組表T中的元素下標
		
		//按M的列序號由小到大轉化
		for(int col=0; col<M.
cols; col++) { for(int p=0; p<M.nums; ++p) { //在三元組順序表M中查詢列下標等於col者 if(M.data[p].j == col) { data[q].i = M.data[p].j; data[q].j = M.data[p].i; data[q].e = M.data[p].e; q++; } } } } return OK; }