package lianbiao;
import java.util.Scanner;
/*define CL data class*/
class DATA2{
String key;
String name;
int age;
}
/*define CL data class*/
/*define CL structure*/
class CLType{
DATA2 nodeData= new DATA2();
CLType nextNode;
/*define CL structure*/
/*add end node*/
CLType CLAddEnd(CLType head,DATA2 nodeData){
CLType node,htemp;
if((node = new CLType())==null){
System.out.print("the memory distribute failed");
return null;
}
else
{
node.nodeData = nodeData;//save nodeData
node.nextNode = null;
if(head == null){
head = node;
return head;
}
htemp = head;
while(htemp.nextNode!=null){//find CL end
htemp = htemp.nextNode;
}
htemp.nextNode = node;
return head;
}
}
/*add end node*/
/*add first node*/
CLType CLAddFirst(CLType head,DATA2 nodeData){
CLType node;
if((node = new CLType())==null){
System.out.print("the memory distribute failed");
return null;
}
else{
node.nodeData = nodeData;
node.nextNode = head;
head = node;
return head;
}
}
/*add first node*/
/*find 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;
}
/*find node*/
/*insert node*/
CLType CLInsertNode(CLType head,String findkey,DATA2 nodeData){
CLType node,nodetemp;
if((node = new CLType())==null){
System.out.print("the memory distribute failed");
return null;
}
node.nodeData = nodeData;
nodetemp = CLFindNode(head,findkey);
if(nodetemp!=null){
node.nextNode = nodetemp.nextNode;
nodetemp.nextNode = node;
}
else{
System.out.print("not find the correct location");
}
return head;
}
/*insert node*/
/*delete node*/
int CLDeleteNode(CLType head,String key){
CLType node,htemp;
htemp = head;
node = head;
while(htemp!=null){
if(htemp.nodeData.key.compareTo(key)==0){
node.nextNode = htemp.nextNode;
return 1;
}
else{
node = htemp;
htemp = htemp.nextNode;
}
}
return 0;
}
/*delete node*/
/*get length*/
int CLLength(CLType head){
CLType htemp;
int len = 0;
htemp = head;
while(htemp!=null){
len ++;
htemp = htemp.nextNode;
}
return len;
}
/*get length*/
/*show all node*/
void CLAllNode(CLType head){
CLType htemp;
DATA2 nodeData;
htemp = head;
System.out.printf("the present node number is %d,all of them are:\n",CLLength(head));
while(htemp!=null){
nodeData = htemp.nodeData;
System.out.printf("node(%s,%s,%s)\n",nodeData.key,nodeData.name,nodeData.age);
htemp = htemp.nextNode;
}
}
}
/*show all node*/
public class lianbiao{
public static void main(String[] args){
CLType node,head=null;
CLType CL = new CLType();
String key,findkey;
Scanner input = new Scanner(System.in);
System.out.print("chain list(CL) test,please input CL data,the format: keyword name age\n");
do{
DATA2 nodeData = new DATA2();
nodeData.key = input.next();
if(nodeData.key.equals("0")){
break;
}
else{
nodeData.name = input.next();
nodeData.age = input.nextInt();
head = CL.CLAddEnd(head,nodeData);
}
}while(true);
CL.CLAllNode(head);
System.out.print("insert node:please input the keyword\n");
findkey = input.next();
System.out.print("please input the data that you want to insert(key,name,age):\n");
DATA2 nodeData = new DATA2();
nodeData.key = input.next();
nodeData.name = input.next();
nodeData.age = input.nextInt();
head = CL.CLInsertNode(head,findkey,nodeData);
CL.CLAllNode(head);
System.out.print("delete node:please input the keyword that you want to delete\n");
key = input.next();
CL.CLDeleteNode(head,key);
CL.CLAllNode(head);
System.out.print("find node:please input the keyword that you want to find\n");
key = input.next();
input.close();
node = CL.CLFindNode(head,key);
if(node!=null){
nodeData = node.nodeData;
System.out.printf("the node finded by keyword:(%s,%s,%s)\n",nodeData.key,nodeData.name,nodeData.age);
}
else{
System.out.printf("not find the node!\n",key);
}
}
}