程序------>数据结构

一程序概念:

  1.对身边的任何一个事物进行认知和分类,从而得到一些信息;
  2.在得到的信息基础之上建立了概念模型;
  3.根据概念模型将我们生活中的实际问题转换成计算机能理解的形式;
  4.用户通过人机交互,从而解决实际生活中出现的问题!

 

二.数据结构:

  就是用来反映一个概念模型的内部组成!也就是概念模型由那些具体的数据构成的!

.线性结构:

  1.数组:存储一系列相同类型的数据集合!在内存总会开辟一块连续的内存空间!

     2.链表 : 单链表  双向链表  循环链表

 

  

 

//单链表
public class MyNode {
   private int data; // 元素ABC的值
   private MyNode next; // 下一个元素

   public  MyNode(int d){
         data=d; //把用户传递来的值 给我们节点的元素
     }
   //用户传递来的下一个节点
   private void append(MyNode myNode) {
       MyNode node=this;
       while(node.next!=null){
           node=node.next;
        }
       node.next=myNode; //把传递过来的对象作为当前节点的下一个
   }

   //要增加的节点
   private void add(MyNode myNode) {
        myNode.next=next;//把当前的null 给了传递过来节点的next属性
        next=myNode;
    }

   //显示链表中所有的节点
   private void show() {
        MyNode node=this;
        while (node!=null){
            System.out.println(node.data);
            node= node.next;
        }
    }

   public static void main(String[] args) {
         //创建我们自己的链表
        MyNode node=new MyNode(10);
        node.append(new MyNode(30));
        node.append(new MyNode(40));
        node.add(new MyNode(20));
        node.show();
    }
}

 

3.分叉关系:
    01.图
    02.树
    03.二叉树
    根节点 中间节点 叶子节点 左子树 右子树

    根节点没有父节点!
    中间节点有父节点也有子节点!
    叶子节点没有子节点,但是有父节点!

  4.遍历二叉树的两种方式:
    01.前序遍历===》先根遍历===》 根=》左=》右
    02.中序遍历===》 左=》根=》右

//二叉排序树
public class MyTree {
   private int data;  //树上的数据
   private MyTree left;  //左边
   private MyTree right;  //右边

    public MyTree(int data){
        this.data=data;
    }

    //新增的树节点
    private void add(MyTree myTree) {
        if (myTree.data<this.data){
            if (left==null){ //务必判断 否则数据会覆盖
                left=myTree;
            }else {
                left.add(myTree);
            }
        }else{
            if (right==null){ //务必判断 否则数据会覆盖
                right=myTree;
            }else {
                right.add(myTree);
            }
        }
    }

    //显示树上所有的数据
    private void show() {
        if (left!=null) left.show();
        System.out.println(data); //中序
        if (right!=null) right.sho

 

//二叉排序树
public class TreeDemo {
    //创建集合保存所有节点
     static List<Node> list=new ArrayList<>();

    class Node{ //节点
        String data; //
        String parent; //父节点的值
    }

    //parent是父节点的值,child是子节点的值
    private void add(String parent, String child) {
        Node  node=new Node();
        node.data=child;
        node.parent=parent;
        list.add(node); //把数据放进集合
    }

    //根据子节点查询对应的父节点
    private static void showParent(String child) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).data.equals(child)){
                System.out.println(list.get(i).parent);
            }
        }
    }
    //根据父节点查询对应的子节点
    private static List<String> showChildren(String parent) {
        List<String> children=new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).parent.equals(parent)){
                children.add(list.get(i).data);
            }
        }
        return  children;
    }

    public static void main(String[] args) {
        TreeDemo tree=new TreeDemo(); //创建一个空树
        tree.add("学校","一年级");
        tree.add("学校","二年级");
        tree.add("学校","三年级");
        tree.add("一年级","一年级1班");
        tree.add("一年级","一年级2班");
        tree.add("一年级","一年级3班");
        tree.add("二年级","二年级1班");
        tree.add("二年级","二年级2班");
        tree.add("三年级","三年级1班");

          //根据子节点查询对应的父节点
       // showParent("二年级1班");
          //根据父节点查询对应的子节点
        showChildren("学校");

    }
}

    public static void main(String[] args) {

        //创建一个树的根节点
        MyTree tree=new MyTree(50);
        tree.add(new MyTree(45));
        tree.add(new MyTree(49));
        tree.add(new MyTree(82));
        tree.add(new MyTree(75));
        tree.add(new MyTree(46));
        tree.add(new MyTree(99));
        tree.show();
    }
}

 

posted @ 2018-07-12 19:02  舞凍  Views(190)  Comments(0Edit  收藏  举报