链表与二叉树-数据结构

news2024/10/6 20:37:55

链表与二叉树-数据结构

    • 创建叶子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,列是n
  for(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.coloradmin.cn/o/1428141.html

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

相关文章

24.云原生ArgoCD高级之数据加密seale sealed

云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…

Leetcode 热门百题斩(第二天)

介绍 针对leetcode的热门一百题&#xff0c;解决大多数实习生面试的基本算法题。通过我自己的思路和多种方法&#xff0c;供大家参考。 1.两数之和&#xff08;题号&#xff1a;1) 方法一 最先想到的就是两个for去遍历匹配。 class Solution {public int[] twoSum(int[]…

DPVS 多活部署架构部署

一、目标 利用DPVS部署一个基于OSPF/ECMP的提供HTTP服务的多活高可用的测试环境。 本次部署仅用于验证功能&#xff0c;不提供性能验证。 配置两台DPVS组成集群、两台REAL SERVER提供实际HTTP服务。 注&#xff1a;在虚拟环境里面&#xff0c;通过在一台虚拟服务器上面安装FR…

Linux - iptables 防火墙

一. 安全技术和防火墙 1.安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

阿里云如何找回域名,进行添加或删除?

权威域名管理介绍说明&#xff0c;包含添加域名、删除域名、找回域名、域名分组等操作介绍。 一、添加域名 非阿里云注册域名或子域名如需使用云解析DNS&#xff0c;需要通过添加域名功能&#xff0c;将主域名或子域名添加到云解析控制台&#xff0c;才可以启用域名解析服务。…

Redis -- hash哈希

马行软地易失蹄&#xff0c;人贪安逸易失志。 目录 关于Redis的hash hash命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hash计数 hincrby hincrbyfloat 小结 关于Redis的hash 几乎所有的主流编程语言都提供了哈希&#xff08;hash&a…

基于极大似然法和最小二乘法系统参数辨识matlab仿真,包含GUI界面

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 1.极大似然法系统参数辨识 2. 最小二乘法系统参数辨识 5.完整程序 1.程序功能描述 分别对比基于极大似然法的系统参数辨识以及基于最小二乘法的系统参数辨识&#xff0c;输出起参数辨识收敛…

计算存储设备(Computational Storage Drive, CSD)

随着云计算、企业级应用以及物联网领域的飞速发展&#xff0c;当前的数据处理需求正以前所未有的规模增长&#xff0c;以满足存储行业不断变化的需求。这种增长导致网络带宽压力增大&#xff0c;并对主机计算资源&#xff08;如内存和CPU&#xff09;造成极大负担&#xff0c;进…

计算机网络实验二

目录 实验二 交换机的基本配置 1、实验目的 2、实验设备 &#xff08;1&#xff09;实验内容&#xff1a; &#xff08;2&#xff09;练习&#xff1a; 1.实验内容一&#xff1a;&#xff08;交换机的配置方式&#xff09; 2.实验内容二&#xff1a;&#xff08;交换机…

碳汇的概念

碳汇的概念 在理解碳汇之前&#xff0c;首先理解“汇”&#xff0c;汇是指存储温室气体、气溶胶或温室气体化合物的库&#xff0c;例如土壤、海洋、森林等都是地球的重要碳库。根据《联合国气候变化框架公约》的定义&#xff0c;“碳汇”指从大气中清除二氧化碳等温室气体的过…

有没有合适写毕业论文的AI工具?

最近挺多同学在忙着写毕业论文&#xff0c;不断在“提交-打回-修改-提交”过程里循环着&#xff0c;好不容易写完了&#xff0c;还得考虑论文查重的问题&#xff01;基哥作为一名曾经的毕业生&#xff0c;当然也体验过这种痛苦了。 但是&#xff0c;大人&#xff0c;时代变了&…

元素的显示与隐藏,精灵图,字体图标,CSSC三角

元素的显示与隐藏 类似网站广告&#xff0c;当我们点击关闭就不见了&#xff0c;但是我们重新刷新页面&#xff0c;会重新出现 本质&#xff1a;让元素在页面中隐藏或者显示出来。 1.display显示隐藏 2.visibility显示隐藏 3.overflow溢出显示隐藏 1.display属性&#xff08;…

使用STM32 DMA实现高效数据传输的设计与优化

使用STM32的DMA功能可以有效地实现高效的数据传输。在下面的解释中&#xff0c;我将介绍如何设计和优化使用STM32 DMA进行高效数据传输的方法。同时&#xff0c;我将提供一些示例代码来帮助您理解和实践。 ✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术…

缓存相关问题记录解决

缓存相关问题 在这里我不得不说明,我写的博客都是我自己用心写的,我自己用心记录的,我写的很详细,所以会有点冗长,所以如果你能看的下去的化,会有所收获,我不想写那种copy的文章,因为对我来说没什么益处,我写的这篇博客,就是为了记录我缓存的相关问题,还有我自己的感悟,所以如果…

机器学习_12_梯度下降法、拉格朗日、KKT

文章目录 1 梯度下降法1.1 导数、梯度1.2 梯度下降法1.3 梯度下降法的优化思想1.4 梯度下降法的调优策略1.5 BGD、SGD、MBGD1.5.1 BGD、SGD、MBGD的区别 2 有约束的最优化问题3 拉格朗日乘子法3.1 拉格朗日乘子法理解3.2 对偶问题 4 KKT条件4.1 KKT条件理解4.2 KKT公式理解4.3 …

【DPI(Direct Programming Interface)_2024.02.01】

DPI接口&#xff1a;实现SV与C的交互 ① DPI_svc test.sv文件&#xff1a; 从C import task/function到SV 从SV export task到C 利用DPI调用C code访问register test.c文件&#xff1a; C调用apb_write驱动 ② dpi_perl test.sv文件&#xff1a; 利用DPI调用c code间接调…

【echarts】动态滚动趋势图,解决坐标轴数据太多遮挡覆盖问题

写在前面 业务场景x轴的文字太多&#xff0c;会出现遮挡问题&#xff0c;想到文字倾斜展示&#xff0c;页面不美观&#xff0c;于是想到使用滚动条优化趋势图。 <template><div id"storeDown" style"height: 400px;width:100%"/> </temp…

独立按键实验

轻触开关是一种电子开关&#xff0c;使用时,轻轻按开关按钮就可使开关接通&#xff0c;当松开手时,开关断开。我们使用的开关如下图&#xff1a; 按键在闭合和断开时&#xff0c;触点会存在抖动现象。 硬件消抖电路&#xff1a; 实现现象&#xff1a;下载程序后按下K1按键可以对…

C++类和对象知识点集合

又多又难的C类和对象知识点看这里了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 1.先看看类是咋用的2.访问限定符3.类中的声明和定义分离4.类对象模型4.1 空类的大小4.2 成员访问 5.内存对齐6.this指针6.1 this在哪里&#xff1f;6.2 (类对象及thi…

Mybatis 自定义ResultHandler(结果处理器)正确使用姿势

阅读指引 一、使用场景二、前提条件三、源码对照四、使用示例目标实现方式 一、使用场景 对Mybatis查询的结果集进行统一批量处理&#xff0c;如进行类型转换、数据变更等等。 二、前提条件 必须是查询语句。mapper方法的返回值必须是void&#xff0c;这也就是不能直接从这个…