链表与二叉树-数据结构

链表与二叉树-数据结构

    • 创建叶子node节点
    • 建立二叉树
    • 三元组:只考虑稀疏矩阵中非0的元素,并且存储到一个类(三元组)的数组中。

在这里插入图片描述

创建叶子node节点

class Node{int no;Node next;public Node(int no){this.no=no;} 
}
public class Lbiao {Node head;int size;public void init(){head=null;size=0;}public boolean isEmpty(){return head==null; //return size==0;}public void insertT(Node n1){n1.next=head;head=n1;size++;}public void insertW(Node n1){if (isEmpty()){insertT(n1);return;}Node p=head;while(p.next!=null)p=p.next;p.next=n1;size++;  }public Node get(int i){if ((i<1)||(i>size)) {System.out.println("i超过了范围!");return null;}int j=1;Node p=head;while(j<i){p=p.next;j++;}return p;}public void delete(int i){if (!isEmpty()){if ((i<1)||(i>size)){return ;}    if (i==1){head=head.next;size--;return;}Node p=head;int j=1;while(j<i-1){p=p.next;j++;}p.next=p.next.next;size--;   }else{System.out.println("没有结点用来删除!");}}public void printLink(){Node p;p=head;while(p!=null){System.out.println(p.no);p=p.next;}}public void insert(int i,Node n1){if ((i<1)||(i>size+1)){System.out.println("超过范围!");  return;}if (i==1){n1.next=head;head=n1;size++;return ;}  Node p=head;int j=1;while(j<i-1){p=p.next;j++;}n1.next=p.next;p.next=n1;size++;  }public static void main(String[] args) {Lbiao link=new Lbiao();link.init();link.insertT(new Node(10));link.insertT(new Node(20));link.insertT(new Node(30));link.insertT(new Node(40));link.insertT(new Node(50));link.printLink();link.insert(6,new Node(23));link.printLink();}
}

建立二叉树

class Tree{int data;Tree lchild;Tree rchild;}public class Shu {Tree []t;public void createT(int m){t=new Tree[m+1];for(int i=1;i<=m;i++)t[i]=new Tree();	}public void Zhprintbt(int n){if (t[n].lchild!=null){Zhprintbt(2*n);if (t[n].data!=0)System.out.print("t["+n+"].data="+t[n].data+"\t");if (t[n].rchild!=null)Zhprintbt(2*n+1);}else{if (t[n].data!=0)System.out.print("t["+n+"].data="+t[n].data+"\t");if (t[n].rchild!=null)Zhprintbt(2*n+1);}	}	
public void Qprintbt(int n){if (t[n].data!=0)System.out.print("t["+n+"].data="+t[n].data+"\t");if (t[n].lchild!=null)	Qprintbt(2*n);if (t[n].rchild!=null)Qprintbt(2*n+1);}public void Hprintbt(int n){if (t[n].lchild!=null)	Hprintbt(2*n);if (t[n].rchild!=null)Hprintbt(2*n+1);if (t[n].data!=0)System.out.print("t["+n+"].data="+t[n].data+"\t");}
public static void main(String[] args) {Shu s=new Shu();s.createT(16);for(int i=1;i<16/2;i++){s.t[i].lchild=s.t[i*2];s.t[i].rchild=s.t[i*2+1];}s.t[1].data=11;s.t[2].data=22;s.t[3].data=33;s.t[5].data=44;s.t[6].data=55;s.t[7].data=66;s.t[11].data=77;s.t[14].data=88;s.Zhprintbt(2);System.out.println();s.Qprintbt(1);System.out.println();s.Hprintbt(1);}}

三元组:只考虑稀疏矩阵中非0的元素,并且存储到一个类(三元组)的数组中。

0 0 0 0 0 1 2 0 0
23 0 0 0 0 0 0 0 0
0 98 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 3 0 0
(0,0,0) (0,0,0) (0,0,0) (0,0,0) (0,0,0) (0,0,0) (0,0,0)
(5,9,6) (0,6,1) (0,7,2) (1,0,23) (2,1,98) (4,0,3) (4,6,3)

import java.util.Random;
class Sanyuanzu{int row;int col;int value;public Sanyuanzu(int row,int col,int value){this.row=row;this.col=col;this.value=value;} 
}
public class Xsjz {Random r=new Random();int [][]jz;Sanyuanzu []a;public void createjz(int m,int n){  //产生二维数组jz=new int[m][n];  //给二维数组jz分配空间,该数组的行是m,列是nfor(int i=0;i<jz.length;i++)for(int j=0;j<jz[0].length;j++)jz[i][j]=r.nextInt(100)<=85?0:r.nextInt(99)+1; }public void toSan(){int c=0,k=0;  //表示非0元素的个数for(int i=0;i<jz.length;i++)for(int j=0;j<jz[0].length;j++)if (jz[i][j]!=0)c++;a=new Sanyuanzu[c+1];  //给数组分配空间for(int i=0;i<a.length;i++)a[i]=new Sanyuanzu(0,0,0);  //实例化类为对象 a[0].row=jz.length;a[0].col=jz[0].length;a[0].value=c;for(int i=0;i<jz.length;i++)for(int j=0;j<jz[0].length;j++)if (jz[i][j]!=0){k++;a[k].row=i;a[k].col=j;a[k].value=jz[i][j];}  }public void prinjz(){for(int i=0;i<jz.length;i++){for(int j=0;j<jz[0].length;j++)System.out.print(jz[i][j]+"   ");System.out.println();}} public void printsan(){  for(int i=0;i<a.length;i++)System.out.print("("+a[i].row+","+a[i].col+","+a[i].value+")     ");} public static void main(String[] args) {Xsjz s=new Xsjz();s.createjz(5,8);s.prinjz();s.toSan();s.printsan();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fink CDC数据同步(三)Flink集成Hive

1 目的 持久化元数据 Flink利用Hive的MetaStore作为持久化的Catalog&#xff0c;我们可通过HiveCatalog将不同会话中的 Flink元数据存储到Hive Metastore 中。 利用 Flink 来读写 Hive 的表 Flink打通了与Hive的集成&#xff0c;如同使用SparkSQL或者Impala操作Hive中的数据…

流畅的Python(七)-函数装饰器和闭包

一、核心要义 主要解释函数装饰器的工作原理&#xff0c;包括最简单的注册装饰器和较复杂的参数化装饰器。同时&#xff0c;因为装饰器的实现依赖于闭包&#xff0c;因此会首先介绍闭包存在的原因和工作原理。 二、代码示例 1、变量作用域规则 #!/usr/bin/env python # -*-…

前端学习笔记 | HTML5+CSS3静态网页制作的技巧(持续更新)

注&#xff1a;本文的css样式均使用less写法 1、字体居中 &#xff08;1&#xff09;先text-align:center;行内元素水平居中 &#xff08;2&#xff09;再line-heigh:(盒子高度);行内元素垂直居中 text-align: center;line-height: ( 30 / vw ); 2、盒子居中 情景1&#…

【课程作业_01】国科大2023模式识别与机器学习实践作业

国科大2023模式识别与机器学习实践作业 作业内容 从四类方法中选三类方法&#xff0c;从选定的每类方法中 &#xff0c;各选一种具体的方法&#xff0c;从给定的数据集中选一 个数据集&#xff08;MNIST&#xff0c;CIFAR-10&#xff0c;电信用户流失数据集 &#xff09;对这…

【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)

手把手零基础带你玩转大数据流式处理引擎Flink&#xff08;运行机制原理加深&#xff09; 前提介绍运行Flink应用运行机制Flink的两大核心组件JobManagerTaskManagerTaskSlot Flink分层架构Stateful Stream ProcessingDataStream和DataSetDataStream&#xff08;数据流&#xf…

GPIO中断

1.EXTI简介 EXTI是External Interrupt的缩写&#xff0c;指外部中断。在嵌入式系统中&#xff0c;外部中断是一种用于处理外部事件的机制。当外部事件发生时&#xff08;比如按下按钮、传感器信号变化等&#xff09;&#xff0c;外部中断可以立即打断正在执行的程序&#xff0…

大红喜庆版UI猜灯谜小程序源码/猜字谜微信小程序源码

今天给大家带来一款UI比较喜庆的猜灯谜小程序&#xff0c;大家看演示图的时候当然也是可以看得到那界面是多么的喜庆&#xff0c;而且新的一年也很快就来了,所以种种的界面可能都比较往喜庆方面去变吧。 这款小程序搭建是免服务器和域名的&#xff0c;只需要使用微信开发者工具…

Linux一键部署telegraf 实现Grafana Linux 图形展示

influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…

Linux开发工具

前言&#xff1a;哈喽小伙伴们&#xff0c;经过前边的学习我们已经掌握了Linux的基本指令和权限&#xff0c;相信大家学完这些之后都会对Linux有一个更加深入的认识&#xff0c;但是Linux的学习可以说是从现在才刚刚开始。 这篇文章&#xff0c;我们将讲解若干个Linux的开发工…

Java基础数据结构之Map和Set

Map和Set接口 1.Set集合&#xff1a;独特性与无序性 Set是Java集合框架中的一种&#xff0c;它代表着一组无序且独特的元素。这意味着Set中的元素不会重复&#xff0c;且没有特定的顺序。Set接口有多个实现类&#xff0c;如HashSet、LinkedHashSet和TreeSet。 2.Map集合&…

Redis核心技术与实战【学习笔记】 - 19.Pika:基于SSD实现大容量“Redis”

前言 随着业务数据的增加&#xff08;比如电商业务中&#xff0c;随着用户规模和商品数量的增加&#xff09;&#xff0c;就需要 Redis 能保存更多的数据。你可能会想到使用 Redis 切片集群&#xff0c;把数据分散保存到不同的实例上。但是这样做的话&#xff0c;如果要保存的…

利用牛顿方法求解非线性方程(MatLab)

一、算法原理 1. 牛顿方法的算法原理 牛顿方法&#xff08;Newton’s Method&#xff09;&#xff0c;也称为牛顿-拉弗森方法&#xff0c;是一种用于数值求解非线性方程的迭代方法。其基本思想是通过不断迭代来逼近方程的根&#xff0c;具体原理如下&#xff1a; 输入&#…

PCB笔记(二十三):allegro 标注长宽(一般用于测量板宽)时如何显示双单位

步骤&#xff1a;首先选择标注工具&#xff0c;然后右键→Parameters&#xff0c;在弹出来的窗口中√上如下图二所示选项 最终要达到显示单位的效果的话&#xff0c;需要在Text项键入%v%u。 今天就记录到这里啦O

Leetcode206:反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 示例&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]输入&#xff1a;head [] 输出&#xff1…

[ESP32 IDF]web server

目录 通过web server控制LED 核心原理解析 分区表 web server的使用 错误Header fields are too long的解决 通过web server控制LED 通过网页控制LED灯的亮灭&#xff0c;一般的ESP32开发板都可以实现&#xff0c;下面这篇文章是国外开发者提供的一个通过web server控制…

13.2K Star,12306 抢票助手帮你回家

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 马上过年了&#xff0c;今年你在哪里过年&#xff1f;回老家吗&#x…

前端入门第一天

目录 HTML超文本标记语言——Hyper Text Markup Language 标签语法&#xff1a; 双标签&#xff1a; 单标签——只有开始标签&#xff0c;没有结束标签 基本骨架&#xff1a; 标签的关系: 注释&#xff1a; 标题标签&#xff1a;&#xff08;新闻标题、文章标题、网页区域…

探索设计模式的魅力:为什么你应该了解装饰器模式-代码优化与重构的秘诀

设计模式专栏&#xff1a;http://t.csdnimg.cn/nolNS 开篇 在一个常常需要在不破坏封装的前提下扩展对象功能的编程世界&#xff0c;有一个模式悄无声息地成为了高级编程技术的隐形冠军。我们日复一日地享受着它带来的便利&#xff0c;却往往对其背后的复杂性视而不见。它是怎样…

项目安全-----加密算法实现

目录 对称加密算法 AES &#xff08;ECB模式&#xff09; AES(CBC 模式)。 非对称加密 对称加密算法 对称加密算法&#xff0c;是使用相同的密钥进行加密和解密。使用对称加密算法来加密双方的通信的话&#xff0c;双方需要先约定一个密钥&#xff0c;加密方才能加密&#…