链表结构;
数据部分:保存的是该结点的实际数据
地址部分:保存的是下一个结点的地址
操纵数据:
public class DATA2 {
String key;
String name;
int age;
}
具体操作:
/**
* 链表类
* @author Administrator
*
*/
public class CLType {
DATA2 nodeData=new DATA2();
CLType nextNode;
/**
* 在链表结构中追加结点的代码
* @param head
* @param nodeData
* @return
*/
CLType CLAddEnd(CLType head,DATA2 nodeData){
CLType node,htemp;
if((node=new CLType())==null){
System.out.println("申请内存失败!\n");
return null;
}
else{
node.nodeData=nodeData;//保存数据
node.nextNode=null;//设置结点引用为空,即为表尾
if(head==null){
head=node;
return head;
}
htemp=head;
while(htemp.nextNode!=null){
htemp=htemp.nextNode;
}
htemp.nextNode=node;
return head;
}
}
CLType CLAddFirst(CLType head,DATA2 nodeData){
CLType node;
if((node=new CLType())==null){
System.out.println("申请内存失败");
return null;
}else{
node.nodeData=nodeData;
node.nextNode=head;//指向头引用所指结点
head=node;//头引用指向新增结点
return node;
}
}
CLType CLFindNode(CLType head,String key){
CLType htemp;
htemp=head;
while(htemp!=null){
if(htemp.nodeData.key.compareTo(key)==0){
return htemp;
}
htemp=htemp.nextNode;//处理下一个结点
}
return null;
}
CLType CLInsertNode(CLType head,String findkey,DATA2 nodeData){
CLType node,nodetemp;
if ((node=new CLType())==null) {
System.out.println("申请内存失败");
return null;
}
node.nodeData=nodeData;
nodetemp=CLFindNode(head, findkey);
if(nodetemp!=null){
node.nextNode=nodetemp.nextNode;
nodetemp.nextNode=node;
}else{
System.out.println("未找到插入位置");
}
return head;
}
int CLDeleteNode(CLType head,String key){
CLType node,htemp;//node保存删除结点的前一结点
htemp=head;
node=head;
while(htemp!=null){
if(htemp.nodeData.key.compareTo(key)==0){
node.nextNode=htemp.nextNode;
htemp=null;
return 1;
}else{
node=htemp;
htemp=htemp.nextNode;
}
}
return 0;
}
int CLLength(CLType head){
CLType htemp;
int Len=0;
htemp=head;
while(htemp!=null){
Len++;
htemp=htemp.nextNode;
}
return Len;
}
/**
* show all node
*/
void CLAllNode(CLType head){
CLType htemp;
DATA2 nodeData;
htemp=head;
System.out.println("共有结点:"+CLLength(head));
while(htemp!=null){
nodeData=htemp.nodeData;
System.out.println("("+nodeData.name+","+nodeData.age+")");
htemp=htemp.nextNode;
}
}
}
嗯,经过对比,可以发现,线性表的操作中,主要是对数组的操作,而链表的操作呢?是对引用的操作,比如node,就理解为指向某一个结点的引用,然后node.noteData是指数据,node.nextNode是指指向下一个结点的引用.
然后就很好理解了.