① 数据结构,使用头插法创建一个链表
import java.util.Random;
//创建链表类
class MLink{
//当Mlink实例化后形成一个链表的节点对象
//节点对象中的属性
//节点存储的属性
private int data;
//存储下一个链表节点地址的属性
private MLink next;
/**
* 功能:创建一个链表,并返回头节点的地址
* @param len 创建链表数据的长度
* @return 返回头节点的地址
*/
public MLink create(int len){
MLink header=null;
//创建随机对象
Random ra=new Random();
//生成指定长度的随机数
for (int i = 0; i <len ; i++) {
//创建随机数
int num=ra.nextInt(100);
//创建一个节点对象
MLink temp=new MLink();
//存储数据
temp.data=num;
//是否第一次创建链表节点
if(header==null)
header=temp;
else{
temp.next=header;
header=temp;
}
}
return header;
}
/**
* 遍历整个链表
* @param header 链表中第一个节点的地址
*/
public void show(MLink header){
while(header!=null){
System.out.println(header.data);
//遍历下一个节点
header=header.next;
}
}
}
public class Demo01 {
public static void main(String[] args) {
//创建链表对象
MLink link=new MLink();
//创建一个链表,并返回第一个节点的地址
MLink header=link.create(8);
//遍历创建的链表
link.show(header);
}
}
② 创建一个二叉树并遍历
import java.util.Scanner;
//定义一个二叉树
//实例化后,形成二叉树的节点
class Tree{
//定义节点的属性
private char data;//存储数据
//存储左右子树地址的属性
private Tree left,right;
//控制数组索引
private int top;//默认为0
/**
* 创建一颗二叉树,并返回根节点地址
* @param des
* @return
*/
public Tree create(String des){
Scanner sc=new Scanner(System.in);
System.out.println("des:"+des);
String str=sc.next();
if(str.charAt(0)<'A')return null;
//实例化一个tree的节点
Tree root=new Tree();
//为当前的节点赋值
root.data=str.charAt(0);
//在当前树根的基础上通过递归创建左右子 树
root.left=create(str.charAt(0)+" 左子树:");
root.right=create(str.charAt(0)+" 右子树:");
//返回创建的二叉树的树根
return root;
}
//二叉树的遍历,先序遍历、中序遍历和后序遍历
public void show(Tree tree){
//先序遍历
if(tree!=null){
System.out.println(tree.data);
//遍历左子树
show(tree.left);
show(tree.right);
}
}
}
public class Demo02 {
public static void main(String[] args) {
Tree tree=new Tree();
Tree root=tree.create("根");
//调用遍历
tree.show(root);
}
}
3 输入10个随机数创建一个双向链表,创建一个方法接收int类型的整数,查询该位置的元素值,并删除该节点,
制作一个遍历二叉树的方法;
package link;
import java.util.Scanner;
//创建双向链表类
class DLink{
String data;
DLink prev,next;//prev存储前一个节点地址;next存储后一个节点的地址
/**
* 创建一个双向链表,返回头地址
* @param len 传输向节点传输数据长度
* @return 返回头地址
*/
public DLink create(int len){
//header存储头节点地址,tailer存储尾部节点地址,temp存储临时节点地址
DLink header,tailer,temp;
header=tailer=null;//初始化
Scanner sc=new Scanner(System.in);
//根据用户传递len的长度
for (int i = 0; i <len ; i++) {
//创建节点
temp=new DLink();
//获取用户传送的数据
System.out.println("请输入数据:");
String in=sc.next();
//为节点数据赋值
temp.data=in;
//判断当前节点是否为第一次创建
if(header==null){
header=tailer=temp;
}else{
//新节点与双向链表产生关联
//通过temp新节点的prev属性获取原链表最后一个节点的地址
temp.prev=tailer;
//将原链表的最后一个节点的next 存储新节点temp的地址
tailer.next=temp;
//上两步相当于将新节点连入到链表中
// tailer始终存储最后一个节点的地址
tailer=temp;
}
}
return header;
}
}
public class DoubleLinkDemo {
public static void main(String[] args) {
DLink link=new DLink();
DLink header=link.create(6);
//遍历双向链表
while(header!=null){
System.out.println(header.data);
//获取下一个元素
header=header.next;
}
System.out.println("=======================");
System.out.println(header.prev.data);
}
}