亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? p55_59.cpp

?? 清華大學-數據結構(課件+習題+課后答案)
?? CPP
字號:
//Test is T55_59.cpp

#include <iostream.h>

const int MaxTerms = 100;

template <class Type>	class SparseMatrix;			//稀疏矩陣的類聲明

template <class Type>	class Trituple {			//三元組類Trituple
friend class SparseMatrix<Type> ;
friend istream & operator >> ( istream & , SparseMatrix<Type> & );
friend ostream & operator << ( ostream & , SparseMatrix<Type> & );
private:
   int row, col;							//非零元素的行號、列號
   Type value;							//非零元素的值
};


template <class Type>	class SparseMatrix {
	//對象: 是一個三元組<row, column, value>的集合。其中, row和column是整數, 記憶矩陣
	//元素所在的行號和列號,而value是矩陣元素的值。
friend istream & operator >> ( istream & , SparseMatrix<Type> & );
friend ostream & operator << ( ostream & , SparseMatrix<Type> & );
public:
   SparseMatrix ();
   SparseMatrix ( int MaxRow, int MaxCol ): Rows( MaxRow ), Cols( MaxCol ){};   	//構造函數
	//建立一個MaxRow行, Maxcol列的稀疏矩陣。
   SparseMatrix<Type> Transpose ( );
	//對*this指示的三元組數組中各個三元組交換其行、列的值, 得到其轉置矩陣。
   SparseMatrix<Type> Add ( SparseMatrix<Type> b );
	//當矩陣a(*this指示)與矩陣b的行、列數相同時, 將這兩個矩陣的對應項相加。
   SparseMatrix<Type> Multiply ( SparseMatrix<Type> b );
	//按公式 c[i][j]=∑(a[i][k]*b[k][j]) 實現矩陣a與b相乘。k=0, 1, …, a的列數-1。
   SparseMatrix<Type> FastTranspose ( );
   SparseMatrix<Type> EmptyMatrix ( );
private:
   int Rows, Cols, Terms ;
   Trituple<Type> smArray[MaxTerms];
};


template <class Type> SparseMatrix<Type> SparseMatrix<Type>::Transpose ( ) {
	//將稀疏矩陣a(*this指示)轉置, 結果在稀疏矩陣b中。
	   SparseMatrix<Type> b ( Cols, Rows );					//創建一個稀疏矩陣類的對象b
	   b.Rows = Cols;							//矩陣b的行數=矩陣a的列數
	   b.Cols = Rows;							//矩陣b的列數=矩陣a的行數
	   b.Terms = Terms;						//矩陣b的非零元素數=矩陣a的非零元素數
	   if ( Terms > 0 ) {							//非零元素個數不為零
	      int CurrentB = 0;						//存放位置指針
	      for ( int k=0; k<Cols; k++ )					//按列號做掃描,做Cols趟
	   for ( int i=0; i<Terms; i++ ) 					//在數組中找列號為k的三元組
		  if ( smArray[i].col == k ) {				//第i個三元組中元素的列號為k
			b.smArray[CurrentB].row = k;			//新三元組的行號
			b.smArray[CurrentB].col = smArray[i].row;	//新三元組的列號
			b.smArray[CurrentB].value = smArray[i].value;	//新三元組的值
			CurrentB++;						//存放指針進1
		  }
	   }
	   return b;
}


template <class Type> SparseMatrix<Type> SparseMatrix<Type>::FastTranspose ( ) {
	//對稀疏矩陣a(*this指示)做快速轉置, 結果放在b中, 時間代價為O(Terms+Columns)
	   int *rowSize = new int[Cols];					//輔助數組, 統計各列非零元素個數
	   int *rowStart = new int[Cols];					//輔助數組, 預計轉置后各行存放位置
	   SparseMatrix<Type> b ( Cols, Rows );					 //存放轉置結果
	   b.Rows = Cols;  b.Cols = Rows;  b.Terms = Terms;
	   if ( Terms > 0 ) {
		 for ( int i=0; i<Cols; i++ ) rowSize[i] = 0; 		//統計矩陣b中第i行非零元素個數
		 for ( i=0; i<Terms; i++ ) rowSize[smArray[i].col]++;
	      //根據矩陣a中第i個非零元素的列號, 將rowSize相當該列的計數加1
		 rowStart[0] = 0;						//計算矩陣b第i行非零元素的開始存放位置
		 for ( i=1; i <Cols; i++ )					//rowStart[i] = 矩陣b的第i行的開始存放位置
		   rowStart[i] = rowStart[i-1]+rowSize[i-1];
		 for ( i=0; i<Terms; i++ ) {					//從a向b傳送
		   int j = rowStart[smArray[i].col];			// j為第i個非零元素在b中應存放的位置
		   b.smArray[j].row = smArray[i].col;
		   b.smArray[j].col = smArray[i].row;
		   b.smArray[j].value = smArray[i].value;
		   rowStart[smArray[i].col]++;				//矩陣b第i行非零元素的存放位置加一
		 }
	   }
	   delete [ ] rowSize;   delete [ ] rowStart;
	   return b;
}

template <class Type> SparseMatrix<Type> SparseMatrix<Type>::Multiply(SparseMatrix<Type> b)
	//兩個稀疏矩陣A (*this指示) 與B (參數表中的b) 相乘, 結果在Result中
{
    if ( Cols != b.Rows ) {
	 cout << "Incompatible matrices" << endl;			//A矩陣列數與B矩陣行數不等
	 return EmptyMatrix ( );					//不能做乘法的矩陣,返回空矩陣
    }
    if ( Terms == MaxTerms || b.Terms == MaxTerms ) {		//有一個矩陣的項數達到最大
       cout << "One additional space in a or b needed" << endl;
	 return EmptyMatrix ( );					//空間不足,返回空矩陣
    }
    int *rowSize = new int[b.Rows];		 		//輔助數組, 矩陣B各行非零元素個數
    int *rowStart = new int[b.Rows+1]; 				//輔助數組, 矩陣B各行在三元組開始位置
    Type * temp = new Type[b.Cols];				//臨時數組, 暫存每一行計算結果
    SparseMatrix<Type> result ( Rows, b.Cols );			//結果矩陣的三元組表result
    for ( int i=0; i<b.Cols; i++ ) rowSize[i] = 0; 		//統計矩陣B中第i行非零元素個數
    for ( i=0; i<b.Terms; i++ ) rowSize[smArray[i].row]++;
    rowStart[0] = 0;							//計算矩陣B第i行非零元素的開始位置
    for ( i=1; i <=b.Cols; i++ ) rowStart[i] = rowStart[i-1] + rowSize[i-1];
    int Current = 0,  lastInResult = -1;				//a.smArray掃描指針及result存放指針
    while ( Current < Terms ) {					//生成result的當前行temp
	  int RowA = smArray[Current].row;			//當前行的行號
	  for ( i=0; i<b.Cols; i++ ) temp[i] = 0;			//temp初始化
	  while ( Current < Terms && smArray[Current].row == RowA ) {
	     int ColA = smArray[Current].col;			//矩陣A當前掃描到元素的列號
	     for ( i=rowStart[ColA]; i<rowStart[ColA+1]; i++ ) {
		  int ColB = b.smArray[i].col;			//矩陣B中相乘元素的列號
		  temp[ColB] = temp[ColB] + smArray[Current].value * b.smArray[i].value;
	     }								//A的RowA行與B的ColB列相乘
	    Current++;
	  }
	  for ( i=0; i<b.Cols; i++ )
	    if ( temp[i] != 0 ) {					//將temp中的非零元素壓縮到result中去
		 lastInResult++;
		 result.smArray[lastInResult].row = RowA;
		 result.smArray[lastInResult].col = i;
		 result.smArray[lastInResult].value = temp[i];
	    }
    }
    result.Rows = Rows;  result.Cols = b.Cols;  result.Terms = lastInResult+1;
    delete [ ] rowSize;  delete [ ] rowStart;  delete [ ] temp;
    return result;
}

template <class Type>  SparseMatrix<Type> SparseMatrix<Type>:: EmptyMatrix ( ) {
    SparseMatrix<Type> b(0,0);
    return b;
}

template <class Type> istream & operator >> ( istream & is , SparseMatrix<Type> & matrix) {
    cout << "Rows and Cols: " << endl;
    is >> matrix.Rows >> matrix.Cols;
    cout << "row col value : ( ended by row = -1 ) " << endl;
    matrix.Terms = -1 ;
    do {
	matrix.Terms ++;
	is >> matrix.smArray[matrix.Terms].row
	   >> matrix.smArray[matrix.Terms].col
	   >> matrix.smArray[matrix.Terms].value;
    } while ( matrix.smArray[matrix.Terms].row != -1 );
    return is;
}

template <class Type> ostream & operator << ( ostream & os , SparseMatrix<Type> & matrix) {
    if ( matrix.Terms == 0 ) { os << "It is empty."; return os}
    os << "Rows: " << matrix.Rows << endl;
    os << "Cols: " << matrix.Cols << endl;
    os << "col row value: " << endl;
    for (int i=0; i<matrix.Terms; i++) {
	os << matrix.smArray[i].row << " "
	   << matrix.smArray[i].col << " "
	   << matrix.smArray[i].value << endl;
    }
    return os;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜操天天操亚洲| 成人在线视频一区二区| 国产精品99久久久久久久vr| 91在线观看污| 久久九九全国免费| 久久国产精品色婷婷| 色欧美片视频在线观看在线视频| 精品久久久三级丝袜| 亚洲国产成人精品视频| 91蜜桃视频在线| 国产精品三级电影| 东方aⅴ免费观看久久av| 日韩片之四级片| 亚欧色一区w666天堂| 91色porny| 国产精品白丝在线| 成人午夜免费av| 久久综合给合久久狠狠狠97色69| 日韩精品一区第一页| 欧美日韩视频在线第一区| 亚洲免费观看高清| 91在线视频官网| 中文字幕中文字幕一区二区| 成人丝袜视频网| 国产精品欧美综合在线| 成人国产视频在线观看| 国产精品情趣视频| 99天天综合性| 亚洲人成网站色在线观看| 91美女精品福利| 一区二区三区精品在线观看| 色综合久久久久综合| 亚洲欧美日韩在线播放| 色94色欧美sute亚洲线路一久| 综合久久综合久久| 91热门视频在线观看| 亚洲人妖av一区二区| 91丝袜国产在线播放| 一区二区三区四区在线| 欧美性色黄大片| 日本欧美加勒比视频| 欧美大白屁股肥臀xxxxxx| 九九视频精品免费| 久久精品一区二区三区不卡牛牛 | 国产亚洲精品福利| 国产成人精品影院| 一色桃子久久精品亚洲| 在线免费一区三区| 视频一区在线播放| 2020日本不卡一区二区视频| 国产成人自拍网| 1区2区3区国产精品| 在线观看欧美日本| 三级一区在线视频先锋| 久久久久久久电影| 成人动漫在线一区| 日韩综合一区二区| 久久精品一二三| 欧美性生活影院| 国产一区二区不卡| 亚洲最大色网站| 精品国产一区二区国模嫣然| 成人黄色在线视频| 日本亚洲最大的色成网站www| 久久久久久久电影| 欧美日韩一区三区| 福利视频网站一区二区三区| 亚洲国产中文字幕在线视频综合| 精品久久久久久无| 色狠狠色噜噜噜综合网| 黄色精品一二区| 亚洲国产成人精品视频| 欧美国产欧美亚州国产日韩mv天天看完整 | 色噜噜狠狠色综合欧洲selulu| 同产精品九九九| 久久这里只有精品6| 欧美视频一区二区在线观看| 国产成人自拍网| 日本欧美在线观看| 亚洲一区在线观看视频| 国产女同性恋一区二区| 欧美一区二区三区思思人| 91视视频在线直接观看在线看网页在线看| 美国三级日本三级久久99| 亚洲免费成人av| 国产精品欧美一区喷水| 精品免费99久久| 宅男在线国产精品| 91激情五月电影| 不卡一卡二卡三乱码免费网站| 黄页网站大全一区二区| 日韩精品成人一区二区在线| 亚洲伦理在线精品| 国产精品乱码人人做人人爱| 精品国产乱码久久久久久免费| 欧美日韩午夜在线视频| 欧美亚洲免费在线一区| 91偷拍与自偷拍精品| 不卡电影免费在线播放一区| 国产福利一区二区三区视频| 精品中文字幕一区二区| 蜜臀久久99精品久久久久久9| 亚洲v日本v欧美v久久精品| 亚洲人成网站在线| 亚洲美女精品一区| 亚洲精品免费在线| 一区二区日韩电影| 樱桃国产成人精品视频| 亚洲一区二区三区四区五区黄| 中文字幕在线视频一区| 亚洲视频在线观看三级| 成人欧美一区二区三区在线播放| 国产精品三级视频| 综合电影一区二区三区| 亚洲乱码一区二区三区在线观看| 国产精品久久久久久亚洲伦| 国产精品久久久久久久久动漫| 中文字幕在线一区免费| 亚洲激情中文1区| 亚洲尤物在线视频观看| 亚洲综合偷拍欧美一区色| 亚洲激情六月丁香| 午夜激情久久久| 日本亚洲一区二区| 国产综合久久久久影院| 粉嫩av一区二区三区| 91视频免费观看| 欧美三级电影在线观看| 日韩精品自拍偷拍| 国产亚洲综合在线| 亚洲天天做日日做天天谢日日欢| 亚洲蜜臀av乱码久久精品| 亚洲国产中文字幕| 久草这里只有精品视频| 成人国产免费视频| 欧美日韩精品一二三区| 久久影音资源网| 中文字幕一区二区三区av| 亚洲在线视频网站| 麻豆久久一区二区| 成人免费观看视频| 在线精品视频免费播放| 日韩欧美资源站| 国产精品国产三级国产aⅴ无密码| 亚洲人成小说网站色在线| 日韩中文字幕亚洲一区二区va在线| 九九国产精品视频| 色94色欧美sute亚洲13| www国产精品av| 亚洲综合av网| 国产伦精品一区二区三区免费迷 | 久久se精品一区二区| 91网页版在线| 精品国产乱码久久久久久影片| 亚洲素人一区二区| 精品一区二区久久久| 91免费观看国产| 亚洲精品在线免费播放| 亚洲蜜臀av乱码久久精品| 国产又粗又猛又爽又黄91精品| 色狠狠av一区二区三区| 久久九九久精品国产免费直播| 亚洲第一激情av| 波多野洁衣一区| 26uuu国产一区二区三区| 亚洲啪啪综合av一区二区三区| 久久99精品久久久久久动态图| 色综合色狠狠综合色| 久久品道一品道久久精品| 婷婷一区二区三区| 色综合婷婷久久| 亚洲国产经典视频| 国产美女视频一区| 日韩视频免费观看高清在线视频| 亚洲精品免费在线播放| 成人久久18免费网站麻豆 | 欧美日韩一级视频| 亚洲少妇中出一区| 国产高清视频一区| 欧美成人欧美edvon| 日韩电影在线观看网站| 欧美日韩中文精品| 亚洲精品国产一区二区精华液 | 欧美成人a∨高清免费观看| 一区二区三区在线视频观看58| 国产成人亚洲精品狼色在线| 日韩欧美国产三级电影视频| 午夜精品久久久久久久99水蜜桃| 91精品91久久久中77777| 亚洲视频电影在线| 色婷婷av一区| 亚洲一区免费在线观看| 在线视频欧美精品| 一区二区三区精品视频在线| 色婷婷久久综合| 亚洲国产三级在线| 欧美日韩国产一二三| 午夜av区久久| 日韩精品中文字幕在线不卡尤物| 蜜臀99久久精品久久久久久软件|