首页 > 作文

利用Java如何实现将二维数组转化为链式储存

更新时间:2023-04-04 03:06:46 阅读: 评论:0

目录
链式存储结构代码思路代码实现输出结果总结

链式存储结构

链脚手架搭设专项施工方案式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素。由于不需要按顺序存储,链表在插入、删除数据元素时比顺序存储要快,但是在查找一个节点时则要比顺序存储要慢。

使用链式莫等闲白了少年头空悲切的意思存储可以克服顺序线性表需要预先知道数据大小的缺点,链表结构可以充分利用内存空间,实现灵活的内存动态管理。但是链式存储失去了数组随机存取的特点,同时增加了节点的指针域,空间开销较大。

下图就是最简单最一般的单向链表:

代码思路

将二维数组压缩成链式存储大体思路与数组压缩成稀疏数组相似
这里我将链表的头节点储存二维数组的总行数、列数和有效值个
数 头结点之后的每个结点存储有效值的下标和值 转化思路如下图所示

代码实现

创建模拟结点的类 提供构造方法和tostring

/** * 模拟结点 */public class singlenode {    /**     * @row 行号     * @column 列号     * @num 值     */    public int row;    public int colunm;    public int num;    /**     *next域:指向下一个结点     */    public singlenode next;    public singlenode(int row, int colunm, int num) {        this.row = row;        this.colunm = colunm;        this.num = num;    }    @override    public string tostring() {        return "singlenode{" + "row=" + row + ", colunm=" + colunm + ", num=" + num + '}';    }}

创建模拟链表类 提供添加结点、遍历链表和还原数组等方法

public class singlelinklist {    //头节点    private singlenode headsinglenode;//通过构造行数初始化头节点    public singlelinklist(singlenode headsinglenode) {        this.headsinglenode = headsinglenode;    }    /**     * 添加结点(追加在链表的尾端)     */    public void add(singlenode singlenode){        singlenode temp = headsinglenode;        while(true){            if (temp.next == null) {                //如果这个结点的next域为空就跳出while循环                break;            }            //将下一个结点赋值给temp            temp = temp.next;        }        temp.next= singlenode;    }    /**     * 遍历单项链表     */    public void show(){        if (headsinglenode.next == null) {            system.out.println("当前链表为空");            return;        }        singlenode temp = headsinglenode;        while (true){            if (temp.next == null){                break;            }            temp = temp.next;            system.out.println(temp);        }    }    /**     * 将链表还原成二维数组     * @return array还原后的二维数组     */    public int[][] backtoarray(){        singlenode temp = headsinglenode;        //头结点中存储着原数组的行数和列数        //通过这两个值创建二维数组        int[][] array = new int[headsinglenode.row][headsinglenode.colunm];        while (true){            if (temp.next == null){                break;            }            temp = temp.next;            //每遍历一个结点就还原一个数据            array[temp.row][temp.colunm] = temp.num;        }        return array;    }}
public class arraytolink {    public static void main(string[] args) {        int[][] array = new int[4][5];        //初始化二维数组        array[0][2] = 1;        array[1][1] = 2;        array[2][3] = 3;        system.out.println("========普通数组========");        //遍历二维数组        int count = 0;        for (int i = 0; i < array.length; i++) {            for (int j = 0; j < array[i].length; j++) {                if (array[i][j]!=0){                    count++;                }                system.out.print(array[i][j] + " ");            }            system.out.println();        }        //将数组转化成链式存储        singlelinklist list =圆周率前60位 new singlelinklist(new singlenode(array.length,array[0].length,count));        for (int i =机械硬盘安装 0; i < array.length; i++) {            for (int j = 0; j < array[i].length; j++) {                if (array[i][j] != 0){                //当数字不为0时视为有效值就创建一个结点并添加到链表尾部                    list.add(new singlenode(i,j,array[i][j]));                }            }        }        system.out.println("========转化后的链表========");        //遍历单向链表        list.show();        int[][] returnarray = list.backtoarray();        //遍历还原后的二维数组        system.out.println("========还原后的数组========");        for (int i = 0; i < returnarray.length; i++) {       代价作文     for (int j = 0; j < returnarray[i].length; j++) {                system.out.print(returnarray[i][j] + " ");            }            system.out.println();        }    }}

输出结果

总结

到此这篇关于利用java如何实现将二维数组转化为链式储存的文章就介绍到这了,更多相关java二维数组转链式储存内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 03:06:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/8c0b40f2d6728f0687cfd60becdc7bba.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:利用Java如何实现将二维数组转化为链式储存.doc

本文 PDF 下载地址:利用Java如何实现将二维数组转化为链式储存.pdf

标签:数组   链式   结点   链表
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图