一程序概念:
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(); } }