数据结构:
- 对身边的任何一个事物进行认知,和分类从而得到一些信息;
- 在得到的信息基础之上建立了概念模型;
- 根据概念模型将我们生活中的实际问题转换成计算机所能理解的形式;
- 用户通过人机交互,从而解决实际生活中出现的问题!
数据结构:
就是用来反映概念模型的内部组成!也就是概念模型有那些具体的数据构成的!
线性结构:
- 数组:存储一系列的相同类型的数据集合,
1.集合
数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
2.线性结构
数据结构中的元素存在一对一的相互关系;
3.树形结构
数据结构中的元素存在一对多的相互关系;
4.图形结构
数据结构中的元素存在多对多的相互关系。
常见的数据结构:数组、队列、栈、链表、树、图、堆、散列表
链表:
链表的类型有多种:单链表,双链表,有序链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
单向链表
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合
双向链表
二叉树
根节点 中间节点 叶子节点 左子树 右子树
根节点没有父节点!
中间节点有父节点也有子节点!
叶子节点没有子节点,但是有父节点!
遍历二叉树的两种方式:
01.前序遍历===》先根遍历===》 根=》左=》右
02.中序遍历===》 左=》根=》右
创建自己Tree往里面添加
package hash;
public class MyNode { private int data; private MyNode next; public MyNode(int d){ data=d; } public static void main (String []args){ //创建我们自己的链表 MyNode node =new MyNode(10); node.append(new MyNode(20)); node.add(new MyNode(30)); node.show(); } private void show() { MyNode node=this; while (node!=null){ System.out.println(node.data); node=node.next; } } //需要增加的节点 private void add(MyNode myNode) { myNode.next=next; //把当前null传递给下一个mynode next=myNode; } private void append(MyNode myNode) { MyNode node=this; while (node.next!=null){ node=node.next; } node.next=myNode; } }
Tree 树:
package hash; public class MyTree { private int data; private MyTree lefttree; private MyTree righttree; public MyTree(int data){ this.data=data; } private void add(MyTree myTree) { if (myTree.data<this.data){ if (lefttree==null){ lefttree=myTree; }else { lefttree.add(myTree); } }else{ if (righttree==null){ righttree=myTree; }else { righttree.add(myTree); } } } private void show() { if (lefttree!=null) { lefttree.show(); } System.out.println(data); if (righttree!=null) { righttree.show(); } } //新增树节点 public static void main(String[] args){ //创建一个树的根节点 MyTree tree=new MyTree(50); tree.add(new MyTree(45)); tree.add(new MyTree(48)); tree.add(new MyTree(84)); tree.add(new MyTree(76)); tree.add(new MyTree(92)); tree.show(); } }
TreeDemo遍历父节点
package hash; import java.util.ArrayList; import java.util.List; public class TreeChild { //创建集合保存的所有节点 static List<Node> list =new ArrayList<>(); class Node{//节点 String data; //值 String parent; //父节点的值 } 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)){ System.out.println(list.get(i).data); } } return children; } public static void main(String []args){ //创建一个空的树 TreeChild treeDemo=new TreeChild(); treeDemo.add("学校","一年级"); treeDemo.add("学校","二年级"); treeDemo.add("学校","三年级"); treeDemo.add("一年级","一年级1班"); treeDemo.add("一年级","一年级2班"); treeDemo.add("一年级","一年级3班"); treeDemo.add("二年级","二年级1班"); treeDemo.add("二年级","二年级2班"); treeDemo.add("二年级","二年级3班"); treeDemo.add("三年级","三年级1班"); treeDemo.add("三年级","三年级2班"); treeDemo.add("三年级","三年级3班"); //根据子节点查询对应的父节点 //showParent("二年级1班"); //根据父节点查询对应的子节点 showChildren("学校"); } }