利用了周末的时间仔细的研究了一下栈,队列,链表,树,二叉树,图的实现,看的收获还是很大的。我用java重写了这些结构的实现,一直看的C语 言版本,用java来重写对数据结构理解更深了
栈和队列的实现,我采用的基本结构ArrayList, 实现很简单,这里就不写了
链表的实现很值得一提,在这里对象的引用与指针的概念,值得去深究一下。
这里给出链表的java实现##
首先定义一个链表的节点结构
//先定义一个节点对象
class Node{
//数据域
public Object data;
//指针域
public Node link;
public Node(){
this.data = null;
this.link = null;
}
public Node(Object obj){
this.data = obj;
this.link = null;
}
}
然后我们开始创建我们的链表
//定义一个单端链表 理解单链表的头节点与指针
class LinkedList{
//定义一个头节点
public Node header;
//定义一个指向指向当前节点的指针
public Node Current;
//定义单链表的长度
public int count;
//初始化单链表
public LinkedList(){
count = 0 ;
//造一个头节点
header = new Node("Header");
header.link = null;
//当前的指针指向头节点
Current = header;
}
//打印单链表
public void PrintList(){
Current = header;
while(Current.link!=null){
System.out.println(Current.link.data);
Current = Current.link;
}
}
//给单链表添加节点
public void addNodeToTail(Object obj){
Node n = new Node(obj);
Current.link = n;
Current = Current.link;
count++;
}
//把单链表清空
public void listEmpty(){
//将头节点指向空
header.link = null;
//将链表指针指向头节点
Current = header;
}
//删除第i个位置的元素
public void delNodeByNum(int i){
if(i<0||i>count-1){
System.out.println("删除第i个位置元素无效。。");
return;
}
//将Current指向头节点
Current = header;
int index = -1;
//找到第i个元素的前一个位置
while(index !=i-1){
Current = Current.link;
index++;
}
Current.link = Current.link.link;
count--;
}
//在第i个位置添加元素
public void AddNodeByNum(int i,Object obj){
if(i<0||i>count-1){
System.out.println("插入的位置无效。。");
return;
}
//将current指针指向头节点
Current = header;
//找到要插入元素的前一个位置
int index = -1;
while(index != i-1){
Current = Current.link;
index++;
}
//开始添加元素了
Node n = new Node(obj);
n.link = Current.link;
Current.link = n;
count++;
}
}