主存逻辑上是一维线性结构吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主存逻辑上是一维线性结构吗相关的知识,希望对你有一定的参考价值。
参考技术A你好像把数据的逻辑结构与存储结构搞混淆了。
数据的逻辑结构包括线性结构、树、图、集合这四种,在线性结构里面又有线性表、栈、队列等等。
而数据的存储结构只有两种:顺序存储结构和链式存储结构,这两种存储结构,前面一个是利用数据元素在存储器中的相对位置表示其逻辑结构,另外一个是用指针来表示其逻辑关系。
结论:
线性结构的数据在存储结构方面,既可能是顺序存储,也可能是链式存储。
线性表是线性结构,也是顺序存储结构。
数据机构分类
数据结构 大体上分为了 线性结构和非线性结构
如果再细分,可以把非线性结构分为 图 和 树,多维数组(2维以上),再加上集合(一般不研究)
线性结构
1.数据元素之间存在一对一的关系
2.数据存储有两种方式,顺序存储(一维数组)和链式存储(链表),
其中顺序存储的叫做线性表,存储的元素物理上是连续的,链式存储的叫做链表,物理上不一定连续
3.常见的线性结构
数组,链表,栈,队列
数组
稀疏数组:当一个数组里面大部分的值都一样的时候,可以使用稀疏数组(列永远是3)
只记录不同值所在的行,列,以及值(存到一个更小的数组中),以及原数组的大小和不同值的个数
比如五子棋
左边是正常数组 右边是稀疏数组,右边的意思是
上边的红框存储原数组的大小和有不同的值的个数,下边的红框表示第0行第2列有一个值为1的数据 同理 第0行第3列有一个值为2的数据........
这样存储的容量小于左边的
二维转稀疏
获得当前不同值的个数(遍历)n
创建稀疏数组 int [n+1] [3]
保存数据,第一行一定是二维数组的行,列,n
稀疏转二维
先读取第一行,获得n行,m列值 创建二维数组 int [n] [m]
去读后边的数据
public class MainTest public static void main(String[] args) //直接赋值 int[][] arr1=0,0,0,0,0,1,0,4,0,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; //创建一个对象 /* int[][] arr2=new int[5][5]; arr2[1][0]=1; arr2[1][2]=4; arr2[1][4]=51;*/ //打印arr1 System.out.println("二维数组:"); for(int[] row:arr1) for (int i : row) System.out.print(i); System.out.print(" "); System.out.println(); //遍历arr1二维数组 int count=0; for(int i=0;i<arr1.length;i++) for(int j=0;j<arr1[i].length;j++) if(arr1[i][j]!=0) count++; //创建稀疏数组 行为个数+1 int[][] arrmix=new int[count+1][3]; arrmix[0][0]=5; arrmix[0][1]=5; arrmix[0][2]=count; //把二维数组的值存入 //稀疏数组的行 第0行已经存过数据了,从第一行开始 int n=1; for(int i=0;i<arr1.length;i++) for(int j=0;j<arr1[i].length;j++) if(arr1[i][j]!=0) arrmix[n][0] = i; arrmix[n][1] = j; arrmix[n][2] = arr1[i][j]; n++; //打印稀疏数组 System.out.println("稀疏数组:"); /*System.out.println(arrmix[0][0]); System.out.println(arrmix[0][1]); System.out.println(arrmix[0][2]);*/ for(int[] row:arrmix) for (int i : row) System.out.print(i); System.out.print(" "); System.out.println(); //恢复为二维数组 int[][] arr2=new int[arrmix[0][0]][arrmix[0][1]]; for(int i=1;i<count+1;i++) arr2[arrmix[i][0]][arrmix[i][1]]=arrmix[i][2]; System.out.println("打印恢复后的"); for(int[] row:arr2) for(int i:row) System.out.print(i); System.out.print(" "); System.out.println();
打印结果
------------------------------------------未完待续,继续补充---------------------------------------------------------------
以上是关于主存逻辑上是一维线性结构吗的主要内容,如果未能解决你的问题,请参考以下文章