當前位置:首頁 » 服務存儲 » 三元組在內存中的存儲表示
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

三元組在內存中的存儲表示

發布時間: 2022-04-24 15:39:35

㈠ 數組的三元組存儲是對 什麼 矩陣的壓縮存儲

數組的三元組表存儲是對稀疏矩陣的壓縮存儲。

㈡ 什麼是鄰接矩陣的三元組

所謂三元組就是指,用三個變數來表示一個矩陣的情況,row 表示該元素所在的行號,col 表示該元素所在的列號,e 表示該元素的值。row col e 是三元組的基本結構。。
一般用鄰接矩陣來表示圖,這是e所代表的值可以為0或者1,表示相鄰的兩個點是否有關,即是否有線相連。e也可以表示相鄰兩點所在直線的權值。。

㈢ 什麼是數據結構中的二元組、三元組和五元組

二元組的定義:<K,R>
三元組的定義:<D,F,A>
五元組的定義:<V,O,G,M,S>
V是值的集合,O是操作的集合,G是構成名字的文法,M是存儲的集合,S是從G能構成的名字幾個到M的映射.

㈣ c++三元組的存儲及轉置

這個應該比較完美了。不過一些字元輸入規則沒有強制限制。你自己改下吧。
代碼如下:

/* 稀疏矩陣乘法,三元組法實現*/

#include <iostream>
#include <iomanip>
using namespace std;
const int MAX_SIZE = 100; // 矩陣中非零元素的最多個數
const int LEN = 3; // 矩陣中元素的對齊長度
// 當矩陣元素因為位數導致不能對齊的時候調整該值
struct Node
{
int nRow,nCol; // 三元組的行、列號
int nVal; // 元素的值
};
struct SparMatrix
{
int nRows,nCols; // 矩陣的行、列數
int nTerms; // 矩陣的非零元個數
struct Node arrayData[MAX_SIZE]; // 存放矩陣非零元素的三元組數組
void PrintMatrix(); // 輸出矩陣
int GetElement(int m ,int n); // 獲得矩陣對應的元素
void PrintInit(); // 矩陣的輸入初始化
void AddElement(int m,int n, int nVal); // 增加非零元素
};

// 矩陣乘法函數(*new)記得釋放內存。
SparMatrix* MatrixMulti(SparMatrix* pM1,SparMatrix* pM2);

void main()
{
SparMatrix matrix1;
cout << "The 1st matrix:" << endl;
matrix1.PrintInit();
SparMatrix matrix2;
cout << "The 2nd matrix:" << endl;
matrix2.PrintInit();
cout << "Multiplication:" << endl;
matrix1.PrintMatrix();
cout << "*" << endl;
matrix2.PrintMatrix();
cout << "=" << endl;
SparMatrix* pMatrixPro;
pMatrixPro = MatrixMulti(&matrix1,&matrix2);
if (pMatrixPro == NULL)
{
cout << "Error!" << endl;
}
else
{
pMatrixPro->PrintMatrix();
}
if (pMatrixPro != NULL)
{
delete pMatrixPro;
pMatrixPro = NULL;
}

}

void SparMatrix::PrintMatrix()
{
// cout << "Print Matrix:" << endl;
for (int m = 1 ; m <= nRows; m++)
{
cout << "|" << setw(LEN);
for (int n = 1 ; n <= nCols; n++)
{
cout << GetElement(m,n) ;
if (n == nCols)
{
break;
}
cout << "," << setw(LEN);
}
cout << "|" << endl ;
}
}

int SparMatrix::GetElement(int m ,int n)
{
for (int i = 0 ; i < nTerms; i++)
{
if (arrayData[i].nRow == m && arrayData[i].nCol == n)
{
return arrayData[i].nVal;
}
}
return 0;
}

void SparMatrix::AddElement(int m,int n, int nVal)
{
Node element = {m,n,nVal};
arrayData[nTerms] = element;
nTerms++;
}

void SparMatrix::PrintInit()
{
nTerms = 0;
int m , n;
while(1)
{
cout << "Plz input the row and column num, using space to separate them:" << endl;
cin >> m >> n;
if (m > 0 && n > 0)
{
break;
}
cout << "The num is wrong. Plz input again." << endl;
cin.clear();
cin.sync();
}

nRows = m;
nCols = n;

cout << "Matrix: ( " << m << " , " << n << " )" << endl;
int num = 0;
int nVal = 0;
char chTmp[10] = {0};
while (1)
{
cout << "Plz input the " << num+1 << " element. * to end:" << endl;
cin >> chTmp;
if (*chTmp == '*')
{
cout << "Over" << endl;
break;
}
else
{
nVal = atoi(chTmp);
}
while(1)
{
cout << "Then input the row and colum of this element, using space to separate them:" << endl;
cin >> m >> n;
if (m > 0 && n > 0 && m <= nRows && n <= nCols)
{
break;
}
cout << "The num is wrong. Plz input again." << endl;
cin.clear();
cin.sync();
}
AddElement(m,n,nVal);
}
}

SparMatrix* MatrixMulti(SparMatrix* pM1,SparMatrix* pM2)
{
if (pM1->nCols != pM2->nRows)
{
return NULL;
}
SparMatrix* pro = new SparMatrix;
pro->nTerms = 0;
pro->nRows = pM1->nRows;
pro->nCols = pM2->nCols;
for (int m = 1 ; m <= pM1->nRows; m++)
{
for (int n = 1 ; n <= pM2->nCols; n++)
{
int nVol = 0;
for (int p = 1; p <= pM1->nCols; p++)
{
int nPro = pM1->GetElement(m,p)*pM2->GetElement(p,n);
nVol += nPro;
}
if (nVol != 0)
{
pro->AddElement(m,n,nVol);
}
}
}

return pro;
}

㈤ 三元組表與稀疏矩陣,怎麼轉換要求法。最好文字表述

l->e=(list)malloc((MAXSIZE+1)*sizeof(ElemType));// 這句在VC不能通過編譯,因為e是elemtype類型,分配的空間是list類型,不匹配。

三元組,第1列是行號,第2列是列號,第3列是非零元素的值。假設以順序存儲結構來表示三元組表(triple table),則得到稀疏矩陣的一種壓縮存儲方式,即三元組順序表,簡稱三元組表。

(5)三元組在內存中的存儲表示擴展閱讀:

對於在實際問題中出現的大型的稀疏矩陣,若用常規分配方法在計算機中儲存,將會產生大量的內存浪費,而且在訪問和操作的時候也會造成大量時間上的浪費,為了解決這一問題,從而產生了多種解決方案。

由於其自身的稀疏特性,通過壓縮可以大大節省稀疏矩陣的內存代價。具體操作是:將非零元素所在的行、列以及它的值構成一個三元組(i,j,v),然後再按某種規律存儲這些三元組,這種方法可以節約存儲空間。

㈥ 一個稀疏矩陣如圖所示,寫出對應的三元組表示形式

對於稀疏矩陣來說,如果還是用100×100的方式來存儲的話,顯然是非常浪費的,三元組方式存儲數據的策略是只存儲非零元素。但是稀疏矩陣中非零元素的分布是沒有任何規律的,在這種情況下,表示形式是:

1、存儲非零元素

2、同時存儲該非零元素所對應的行下標和列下標

3、稀疏矩陣中的每一個非零元素需由一個三元組(i,j,aijaij)唯一確定,稀疏矩陣中的所有非零元素構成三元組線性表,三元組中的i就是行下標,j是列下標,aijaij是對應的元素值。

(6)三元組在內存中的存儲表示擴展閱讀:

稀疏矩陣的壓縮存儲方法

拿稀疏矩陣中的元素1來說,該元素的位置為第0行,第2列,在用三元組(i ,j ,aij)進行存儲時,就是0 2 1,發現在這個三元組的線性表中,每個數據元素都是以三元組的方式組成的。

當確定三元組的存儲策略後,要做的就是把這樣的三元組存儲下來。需要把矩陣中的行數,列數,非零元素個數,矩陣中的數據都保存在data數據域,在data數據域中的每個數據元素都是以三元組形式存儲,data域中表示的非零元素通常以行序為主序順序排列,下標按行有序的存儲結構。

演算法:以行序方式掃描二維矩陣A,將其非零的元素加入到三元組t。要求為data域以行序為主序順序排列。

㈦ 稀疏矩陣一般的壓縮存儲方法有兩種

分別是三元組和十字鏈表。

三元組是指形如((x,y),z)的集合(這就是說,三元組是這樣的偶,其第一個射影亦是一個偶),常簡記為(x,y,z)。

三元組是計算機專業的一門公共基礎課程——數據結構里的概念。主要是用來存儲稀疏矩陣的一種壓縮方式,也叫三元組表。假設以順序存儲結構來表示三元組表(triple table),則得到稀疏矩陣的一種壓縮存儲方式,即三元組順序表,簡稱三元組表。

十字鏈表(Orthogonal List)是有向圖的另一種鏈式存儲結構。該結構可以看成是將有向圖的鄰接表和逆鄰接表結合起來得到的。用十字鏈表來存儲有向圖,可以達到高效的存取效果。同時,代碼的可讀性也會得到提升。

拓展資料:

十字鏈表(Orthogonal List)是有向圖的另一種鏈式存儲結構。可以看成是將有向圖的鄰接表和逆鄰接表結合起來得到的一種鏈表。在十字鏈表中,對應於有向圖中每一條弧都有一個結點,對應於每個定頂點也有一個結點。

十字鏈表之於有向圖,類似於鄰接表之於無向圖。

也可以理解為 將行的單鏈表和列的單鏈表結合起來存儲稀疏矩陣稱為十字鏈表, 每個節點表示一個非零元素。

三元組解釋:

1、所謂「三元組」是指圖形的幾何元素構成、圖線間的拓撲關系和尺寸約束。如果一組圖形的前二元相同而只是尺寸大小不同,則這組圖形構成一族形狀相同的系列化圖形。

2、把組成一個元素的三個數稱為三元組。一個三元組包含以下三部分的內容SDO_STARTING_OFFSET表明每個幾何元素的第一個坐標在SDO_ORDINATES數組中的存儲位置。

3、…Mt:N2)的表示稱為三元組...…Mt稱為標號,N1、N2為結點R為關系。當n≠0時,稱Li為對結點N1的修飾。t≠0時,稱Mj為對結點N2的修飾。

參考資料:網路:十字鏈表

網路:三元組

㈧ C語言 三元組 問題

//三元組表示稀疏矩陣

#include<stdio.h>
#define N 1000

typedef struct Elem
{
int i,j;
int e;
} ELEM; /* 表示一個元素的三元組結構 */
void main()
{
ELEM mat[N];
int row,col; /* 行列數 */
int i,j,k=0,n;
int x;
char fn[]="data.txt";
FILE *pf=fopen(fn,"r");
if(!pf){
printf("Error: Can't open the file: %s\n",fn);
return;
}
fscanf(pf,"%d%d",&row,&col); /* 讀取行列數 */
/* 讀取矩陣數據,並存入三元組 */
for(i=0; i<row; i++)
for(j=0; j<col; j++){
fscanf(pf,"%d",&x);
if(x!=0){
mat[k].e=x;
mat[k].i=i;
mat[k].j=j;
if(k%5==0) printf("\n");
k++;
printf("[%2d][%2d]=%3d ",i,j,x);
}
}
printf("\n");
fclose(pf);
n=k; k=0;
/* 將給定的一個三元組(就用前面得到的這個三元組),輸出稀疏矩陣 */
for(i=0; i<row; i++){
for(j=0; j<col; j++){
if(mat[k].i==i && mat[k].j==j){
printf("%3d ",mat[k].e);
k++;
}else
printf("%3d ",0);
}
printf("\n");
}
printf("\n");
}
/*
注意,為了便於測試,將一個稀疏矩陣保存於數據文件data.txt中(該文件放在源程序所在的目錄中),文件的內容如下:
第一行兩個數據(數據間用空格分隔):r c(分別表示矩陣行數和列數)
接下來是矩陣的數據,共有r行,每行c個數據。例如:
10 10
0 0 0 0 0 1 0 0 0 1
2 0 0 0 1 0 0 0 0 0
0 3 0 0 0 0 0 1 0 0
0 0 0 0 0 0 4 0 0 0
0 0 5 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0 0 1
2 0 0 0 1 0 0 0 0 0
0 3 0 0 0 0 0 1 0 0
0 0 0 0 0 0 4 0 0 0
0 0 5 0 0 0 0 0 1 0
*/

㈨ 給出三元組線性表的順序存儲表示

這很簡單的問題啊... #define MaxSize 100 typedef char ElemType typedef struct { ElemType data[MaxSize]; //存放順序表元素 int length; //存放順序表的長度 }; //順序表的類型定義

㈩ 抽象數據類型三元組的定義什麼意思

三元組指形如((x,y),z)的集合(這就是說,三元組是這樣的偶,其第一個射影亦是一個偶),常簡記為(x,y,z)。

三元組為計算機專業的一門公共基礎課程——數據結構里的概念。主要用來存儲稀疏矩陣的一種壓縮方式,也叫三元組表。假設以順序存儲結構來表示三元組表(triple table),則得到稀疏矩陣的一種壓縮存儲方式,即三元組順序表,簡稱三元組表。



(10)三元組在內存中的存儲表示擴展閱讀

抽象數據類型的特徵主要體現在以下幾個方面:

1、數據抽象。用ADT描述程序處理的實體時,強調的是其本質的特徵、其所能完成的功能以及它和外部用戶的介面(即外界使用它的方法)。

2、數據封裝。將實體的外部特性和其內部實現細節分離,並且對外部用戶隱藏其內部實現細節,它包含兩層含義:

將數據和其行為結合在一起,形成一個不可分割的獨立單位;信息隱藏,即盡可能隱藏數據內部細節,只留有限的對外介面形成一個邊界,與外部發生聯系。封裝的原則使得軟體錯誤能夠局部化,大大降低排錯的難度,便於軟體的維護。

3、繼承性。數據封裝使得一個類型可以擁有一般類型的數據和行為,即對一般類型的繼承。若特殊類型從多個一般類型中繼承相關的數據和行為,則為多繼承。

4、多態性。多態性指在一般類型中定義的數據或行為被特殊類型繼承後,具有不同的數據類型或呈現出不同的行為。例如,「蘋果」是「水果」的子類,它可以有「水果」的一般「吃」法,但其本身還可以有別的多種「吃法」。