链 表
1、工作原理:
C语言中结点与结点之间的连接方式是指针,而在java中的连接方式是利用的引用关系。
2、示例:
/**
* 链表的结点
* @author Administrator
*
*/
public class LinkNode<E> {
//结点中的成员
E obj;
//前面的结点
LinkNode front = null;
//后面的结点
LinkNode next = null;
}
/**
* 创建链表的类
* @author Administrator
*
*/
public class LinkList<E> {
//头结点
LinkNode head = null;
//尾结点
LinkNode last = null;
/**
* 向链表中添加成员
* @param obj 向链表中所添加的成员
*/
public void Add(E obj){
//创建一个新结点
LinkNode node = new LinkNode<E>();
if(head == null){//如果当前是空链表
//向结点中添加信息元素
node.obj = obj;
//头结点指向第一个结点
head = node;
//尾结点指向第一个结点
last = node;
}else{//如果当前不是空链表
//向结点中添加信息元素
node.obj = obj;
//构建新节点与旧尾结点的双向关系
last.next = node;
node.front = last;
//移交尾结点的位置
last = node;
}
}
/**
* 删除链表中的成员
* @param n 所要删除的成员在链表中的序号
*/
public void Delet(int n){
//先检查n的范围是否合适
if(n<1||n>Size()){
System.out.println("请输入正确的范围数字。");
}else{
if(n == Size()){//如果删除的是最后一个结点
last = last.front;
last.next = null;
}else if(n == 1){//如果删除的是第一个结点
head = head.next;
}else{
//在头结点的位置创建测试结点
LinkNode node = head;
//一个用于计数的数字
int count = 0;
while(node.next != null){
++count;
if(count == n){
(node.front).next = (node.next).front;
}
//移动当前测试结点的位置
node = node.next;
}
}
}
}
/**
* 查询并得到链表中的成员
* @param n 所要查询的成员在链表中的序号
*/
public E Get(int n){
//先检查n的范围是否合适
if(n<1||n>Size()){
System.out.println("请输入正确的范围数字。");
}else{
if(n == Size()){
return (E) last.obj;
}else{
//在头结点的位置创建测试结点
LinkNode node = head;
//一个用于计数的数字
int count = 0;
while(node.next != null){
++count;
if(count == n){
return (E) node.obj;
}
//移动当前测试结点的位置
node = node.next;
}
}
}
return null;
}
/**
* 修改链表中的成员
* @param n 所要修改的成员在链表中的序号
* @param obj 修改后的成员
*/
public void Change(int n,E obj){
//先检查n的范围是否合适
if(n<1||n>Size()){
System.out.println("请输入正确的范围数字。");
}else{
if(n == Size()){
last.obj = obj;
}else{
//在头结点的位置创建测试结点
LinkNode node = head;
//一个用于计数的数字
int count = 0;
while(node.next != null){
++count;
if(count == n){
node.obj = obj;
}
//移动当前测试结点的位置
node = node.next;
}
}
}
}
/**
* 链表的大小
* @return
*/
public int Size(){
int count = 0;
//在头结点的位置创建测试结点
LinkNode node = head;
while(node.next != null){
++count;
//移动当前测试结点的位置
node = node.next;
}
count++;
return count;
}
}
3、系统提供的链表:
java.util java.util
类 LinkedList<E>