当前位置:首页 » 服务存储 » 三元组在内存中的存储表示
扩展阅读
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、多态性。多态性指在一般类型中定义的数据或行为被特殊类型继承后,具有不同的数据类型或呈现出不同的行为。例如,“苹果”是“水果”的子类,它可以有“水果”的一般“吃”法,但其本身还可以有别的多种“吃法”。