数据结构——数组、矩阵与广义表
来源:互联网 发布:淘宝男装店名 编辑:程序博客网 时间:2024/05/29 18:37
1.数组与矩阵
2.稀疏矩阵二维数组被称为矩阵,A[m][n]表示m行n列的矩阵
线性代数学的不能再烂了,数据结构中注意,题目给出的矩阵第一个元素是a[0][0]还是a[1][1]
矩阵可以按按行优先存储和按列优先存储
矩阵的基本运算,如转置、矩阵加减、矩阵相乘等翻线性代数的书,代码实现照着翻译成设计语言即可
系统元素或者零元素在矩阵中的分布存在一定规律的矩阵称为特殊矩阵,反之是稀疏矩阵
国外普遍的看法是:矩阵中绝大多数元素都为0的矩阵称为稀疏矩阵
3.稀疏矩阵的存储及相关操作
1)三元组表示法
package matrix.trimat;import java.util.Arrays;//矩阵@SuppressWarnings("unused")public class Matrix {//三元组private class Trimat{int val;//元素值int i,j;//行号和列号}private Trimat trimat;//矩阵属性,三元组存储//创建矩阵,用三元表存储public Matrix(int[][] A){int m = A.length;//行int n = A[0].length;//列Trimat[] trimat = new Trimat[1];int k = 1;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){//按行优先顺序存储非零元素if(A[i][j] != 0){trimat = Arrays.copyOf(trimat, trimat.length + 1);trimat[trimat.length - 1].val = A[i][j];trimat[trimat.length - 1].i = i;trimat[trimat.length - 1].j = j;++k;}}}trimat[0].val = k - 1;//存储非零元素个数trimat[0].i = m;//存储原矩阵行数trimat[0].j = n;//存储原矩阵列数}}
2)十字链表表示法
package matrix.crosslist;/** * @author 芜情 十字链表存储矩阵 */public class Matrix {// 元素节点@SuppressWarnings("unused")private class Node {int row;// 行号int col;// 列号int val;// 元素值Node right;// 右指针Node down;// 下指针public Node(int m, int n, int v) {row = m;col = n;val = v;}public Node() {row = -1;col = -1;}}// 十字链表@SuppressWarnings("unused")private class CrossList {int rownum;// 行数int colnum;// 列数int valnum;// 非零元素个数Node[] chead;// 列头结点(上)Node[] rhead;// 行头结点(左)//存储行数、列数,初始化头结点数组public CrossList(int m, int n) {rownum = m;colnum = n;chead = new Node[n];for (int i = 0; i < n; i++) {chead[i] = new Node();}rhead = new Node[m];for (int i = 0; i < m; i++) {rhead[i] = new Node();}}}private CrossList list;// 矩阵的属性:十字链表存储// 创建矩阵,并用十字链表存储,默认传入的是矩阵形式,不做格式判断了public Matrix(int[][] A) {int m = A.length;int n = A[0].length;int k = 0;list = new CrossList(m, n);Node[] temp_c = new Node[n];//构造竖向链表的辅助指针数组for (int x = 0; x < n; x++) {temp_c[x] = list.chead[x];//把chead数组赋值给列头结点的辅助指针数组}for (int i = 0; i < m; i++) {Node temp_r = list.rhead[i];//构造横向链表辅助指针for (int j = 0; j < n; j++) {//尾插法if (A[i][j] != 0) {Node node = new Node(i, j, A[i][j]);temp_r.right = node;temp_r = node;temp_c[j].down = node;temp_c[j] = node;++k;}}}list.valnum = k;//赋值非零元素个数}}
阅读全文
0 0
- 数据结构——数组、矩阵与广义表
- 数据结构 - 数组、矩阵、广义表存储
- 第九周 数据结构实践项目——数组和广义表【项目3.2-- 稀疏矩阵相加】
- 数据结构_数组与广义表_矩阵的十字链表存储稀疏矩阵相加
- 数据结构实践项目——数组和广义表
- 数据结构——数组和广义表习题收集
- 第九周 数据结构实现项目--数组和广义表【项目2 - 对称矩阵压缩存储的实现与应用】
- 2015年大二上-数据结构-数组与广义表(2)-1.对称矩阵的压缩存储及基本运算
- 2015年大二上-数据结构-数组与广义表(2)-2.压缩存储的对称矩阵的运算
- 2015年大二上-数据结构-数组与广义表(3)-1.稀疏矩阵的三元组表示
- 2015年大二上-数据结构-数组与广义表(3)-2.稀疏矩阵的三元组表示
- 数据结构——数组与广义表篇——猴子选大王(数组版)——v1.0
- 数据结构——数组与广义表篇——猴子选大王(数组版)——v2.0
- 数据结构——广义表
- 数组和广义表 - [数据结构]
- 数据结构,数组和广义表
- [数据结构]数组和广义表
- 【数据结构】数组和广义表
- windows下pip安装库遇到了Microsoft Visual C++ 9.0 is required的问题
- Java PC
- AngularJS操作DOM——angular.element
- Clojure笔记
- MySQL day5---运算符和函数
- 数据结构——数组、矩阵与广义表
- 06-CentOS 7.2在虚拟机中连接Wi-Fi
- stm32 ---jlink的烧录
- ZigBee无线通信--BasicRF无线点对点通信
- 工厂模式(简单工厂,工厂方法,抽象工厂)
- NuGet学习笔记001---了解使用NuGet给net快速获取引用
- ipv4之ip地址的分类
- 2、(c++)顺序表的建立、输出、查找、按元素位置删除代码
- 矩形面积交(模板)