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


    一程序概念:

      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();
        }
    }
  • 相关阅读:
    Vivian's Problem UVA
    Prime k-tuple UVA
    M
    Make a Crystal UVA
    Cryptography Reloaded UVALive
    Gauss Prime UVA
    Discrete Square Roots UVALive
    The Bells are Ringing UVALive
    Huge Mods UVA
    指数循环节
  • 原文地址:https://www.cnblogs.com/wang2386033566/p/9301362.html
Copyright © 2020-2023  润新知