在java中集合类有ArrayList、Linklist、Set、Hashtable、HashMap等
通常情况下这些集合类足够我们使用了。
而本文讲的是从数据结构基础来看链表、栈、队列、树这些对象。
前.节点Node
节点是存储数据的基本单位。也是下面这些对象的基本组成部分。
最简单的节点由2部分组成:1储存的数据;2下一个节点;
public class Node {
public int _intValue;//数据
public Node next;//下一个节点
}
数据结构中还有双向链表和树。双向链表的节点中还应该多前一个节点:
public class Node {
public int _intValue;//数据
public Node next;//下一个节点
public Node previous;//前一个节点
}
树型结构的话比较复杂,我们之看简单的二叉树:即只有2条子树的树
它的节点为:
public class Node {
public int _intValue;//数据
public Node left;//左节点
public Node right;//右节点
}
1.链表LinkList
链表结构为线性结构,链表中之存储头节点。
任意节点都可以通过头结点依次往下一个节点搜寻到。
链表该有基础的插入节点、删除节点、清空链表的方法。
public class Link {
public Node head;
public void insert(Node node, int position){//插入节点node和插入位置
if(head == null){
head = node;
return;
}
Node p = head;
int count = 1;
while(p.next != null && count < position){
p = p.next;
}
node.next = p.next;
p.next = node;
}
public void delete(int position){//删除position位置的节点
if(head == null){
return;
}
Node p = head;
int count = 1;
while(p.next != null &&count < position){
p = p.next;
}
p.next = p.next.next;
}
public void clear(){//清空链表
head = null;
}
}
链表还可以设计成排序的,插入按大小插入、删除还可以按节点删除,方法可以设计多种多样。
2.栈Stack
栈也是线性数据结构,遵循先进后出、后进先出的原则。
只需要一个标记记住最后入栈的节点就行。
方法也较为简单:出栈和入栈。
public class Stack {
public Node p;
public void push(Node node){
if(p == null) p = node;
else{
node.next = p;
p = node;
}
}
public Node pull(){
if(p == null){
System.err.println("nullStack!");
return null;
}
Node node = null;
node = p;
p = p.next;
node.next = null;
return node;
}
}
3.队列Queue
队列和栈很像,但是它遵循的原则是先进先出,后进后出。
设置头节点和尾节点方便操作。
方法也只有进队列和出队列。
public class Queue {
public Node head;
public Node tail;//尾
public void enQueue(Node node){//进队列
if(head == null && tail== null){
head = tail = node;
}else{
tail.next = node;
tail = node;
}
}
public Node deQueue(){//出队列
Node node = null;
if(head == null && tail== null){
System.out.println("nullQueue");
}else if(head == tail){
node = head;
head = tail = null;
}else{
node = head;
head = head.next;
}
return node;
}
}
4.树Tree
树需要一个根节点,标明树根。
public classBinaryTree {
TreeNode _root;
}
树的方法较为复杂,增删查都需要遍历整棵树
树的遍历又分为深度优先遍历(Depth-first Traversal)和广度优先遍历(Breadth-firsttraversal)。
广度优先遍历需要借助队列。
深度优先遍历又可分为:前序遍历(Preorder Traversal),后序遍历(Postorder Traversal)和中序遍历(Inorder Traversal)
较为复杂...就不写代码了....