数据结构概述&稀疏数组

数据结构包括:线性结构和非线性结构。

线性结构

  1. 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系
  2. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的
  3. 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
  4. 线性结构常见的有:数组、队列、链表和栈

非线性结构

非线性结构包括:二维数组,多维数组,广义表,树结构,图结构

稀疏数组

值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组
稀疏数组的处理方法是:

  1. 记录数组一共有几行几列,有多少个不同的值
  2. 把具有不同值的元素的行列及值记录再一个小规模的数组中,从而缩小程序的规模
    在这里插入图片描述
    第一行:数组的行列和一共有多少个值
    后面每一个行都记录有值的位置和数值
    二维数组转稀疏数组的思路
    1.遍历原始的二维教组,得到有效数据的个数sum
    2.根据sum就可以创建稀疏数组sparsaArr int[sum+1][]
    3.将二维数组的有效数据经据存入到稀疏数组
    稀疏数组转二维数组的思路
    1.先读取稀砖数组的第一行·根据第一行的数据。创建原始的二维数组。
    2.在读取稀疏数组后几行的数据。并赋给原给的二维数组即可,
    在这里插入图片描述
    代码
package com.m.demo;

public class sparsaArr {

	public static void main(String[] args) {
//		创建一个数组
		int [][] data=new int [11][11];
		data[1][2]=1;
		data[2][3]=2;
//		data[3][4]=3;
		for(int[] row:data) {
			for(int i:row) {
				System.out.print(i+"\t");
			}
			System.out.println();
		}
//	转稀疏数组
/*
* 1.遍历原始的二维教组,得到有效数据的个数sum
2.根据sum就可以创建稀疏数组sparsaArr int[sum+1][]
3.将二维数组的有效数据经据存入到稀疏数组*/
//		1.遍历原始的二维教组,得到有效数据的个数sum
		int sum=0;//记录有效元素
		int rownum=0;//记录行数
		int cownum=0;//记录列数
		for(int[] row:data) {
			rownum++;
			cownum=row.length;
			for(int i:row) {
				
				if(i!=0) {
					sum++;
				}
			}
		}
		System.out.println("数组转稀疏数组");
		System.out.printf("sum=%d,rownum=%d,cownum=%d\n",sum,rownum,cownum);
		int sparsaArr[][]=new int [sum+1][3];//第一行记录数组的行列和一共有多少个值
		sparsaArr[0][0]=rownum;
		sparsaArr[0][1]=cownum;
		sparsaArr[0][2]=sum;
		int sparsaRow=0;
		for(int i=0;i<rownum;i++) {
			for(int j=0;j<cownum;j++) {
				if(data[i][j]!=0) {
					sparsaRow++;
					sparsaArr[sparsaRow][0]=i;
					sparsaArr[sparsaRow][1]=j;
					sparsaArr[sparsaRow][2]=data[i][j];
				}
			}
		}
//		遍历sparsaArr
		System.out.println("遍历sparsaArr");
		for(int[] row:sparsaArr) {
			for(int d:row) {
				System.out.print(d+"\t");
			}
			System.out.println();
		}
		
//		稀疏数组转数组
		System.out.println("稀疏数组转数组");
		int newSparsaArr[][]=new int[sparsaArr[0][0]][sparsaArr[0][1]];
//		遍历稀疏数组 从第二行开始才是数据 一共有多少个数据 就有多少行
		for(int i=1;i<=sparsaArr[0][2];i++) {
			newSparsaArr[sparsaArr[i][0]][sparsaArr[i][1]]=sparsaArr[i][2];
		}
		
		System.out.println("遍历数组");
		for(int[] row:newSparsaArr) {
			for(int i:row) {
				System.out.print(i+"\t");
			}
			System.out.println();
		}
		
		

	}

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值