Java实现链表,线性表
2018-03-21 09:42
316 查看
List
package MyList; public interface List { abstract public int size(); abstract public boolean empty(); abstract public Object at(int index); abstract public List indexOf(Object object); abstract public List insert(Object object); abstract public List insert(Object object,int index); abstract public List deleteByIndex(int index); abstract public void output(); abstract public void swap(int index1,int index2); abstract public List[] split(int index); }
LinkList
package MyList; public class LinkList implements List { public static void main(String[] args){ List list=new LinkList(); for(int i=0;i<20;i++){ list.insert(i); } System.out.println("插入0到19"); list.output(); System.out.println("Size:"+list.size()); System.out.println("Empty:"+list.empty()); for(int i=0;i<20;i++){ list.insert(i,5); } System.out.println("在索引5插入0到19"); list.output(); List ll=list.indexOf(2); System.out.println("2的索引"); ll.output(); System.out.println("删除索引为1的数据30次"); for(int i=0;i<30;i++){ list.deleteByIndex(1); } list.output(); System.out.println("根据at返回元素"); for(int i=0;i<5;i++){ System.out.print("At "+i+" "+list.at(i)+" "+"\r\n"); } System.out.println("LinearList转LinkList"); List linearlist=new LinearList(); for(int i=0;i<20;i++){ linearlist.insert(i); } List list2=new LinkList(linearlist); list2.output(); System.out.println("交换3和4"); list2.swap(3, 4); list2.output(); System.out.println("从10分成两个"); List[] lists=list2.split(10); lists[0].output(); lists[1].output(); } class Node{ public Object Data; public Node Next; public Node(){ Data=null; Next=null; } public Node(Object object){ Data=object; Next=null; } public Node(Object object,Node next){ Data=object; Next=next; } } private Node Head; private static Node Next; private int Size; public LinkList(){ Head=new Node(); Size=0; } public LinkList(List list){ Head=new Node(); Size=0; if(list.getClass().getName().equals("MyList.LinearList")){ Node node=new Node(list.at(0)); Node p=node; for(int i=1;i<list.size();i++){ p.Next=new Node(list.at(i)); p=p.Next; } insert(node); } else if(list.getClass().getName().equals("MyList.LinkList")){ LinkList linklist=(LinkList)list; linklist.next(0); Node node=new Node(next()); Node p=node; for(int i=1;i<list.size();i++){ p.Next=new Node(next()); p=p.Next; } insert(node); } else{ System.out.println("type matching error"); } } @Override public int size() { // TODO Auto-generated method stub return Size; } @Override public boolean empty() { // TODO Auto-generated method stub return Size==0; } public Object next(){ if(Next!=null){ Next=Next.Next; return Next.Data; } else{ System.out.println("list is ended"); return null; } } public void next(int index){ if(index<0){ System.out.println("parameter not positive"); } else if(index>=Size){ System.out.println("out of range"); } else{ Next=Head; for(int i=0;i<index;i++){ Next=Next.Next; } } } @Override public Object at(int index) { // TODO Auto-generated method stub if(index<0){ System.out.println("parameter not positive"); return null; } else if(index>=Size){ System.out.println("out of range"); return null; } else{ Node p=Head.Next; while(index-->0){ p=p.Next; } return p.Data; } } @Override public List indexOf(Object object) { // TODO Auto-generated method stub List list=new LinkList(); Node p=Head; for(int i=0;i<Size;i++){ p=p.Next; if(p.Data.equals(object)){ list.insert(i); } } if(list.empty()){ System.out.println("target not found"); } return list; } @Override public List insert(Object object) { // TODO Auto-generated method stub Node p=Head; for(int i=0;i<Size;i++){ p=p.Next; } p.Next=new Node(object); Size++; return this; } @Override public List insert(Object object, int index) { // TODO Auto-generated method stub if(index<0){ System.out.println("parameter not positive"); } else if(index>=Size){ System.out.println("out of range"); } else{ Node p=Head; while(index-->0){ p=p.Next; } p.Next=new Node(object,p.Next); Size++; } return this; } private List insert(Node node){ Node p=Head; for(int i=0;i<Size;i++){ p=p.Next; } p.Next=node; while(node!=null){ Size++; node=node.Next; } return this; } @Override public List deleteByIndex(int index) { // TODO Auto-generated method stub if(index<0){ System.out.println("parameter not positive"); } else if(index>=Size){ System.out.println("out of range"); } else{ Node p=Head; while(index-->0){ p=p.Next; } p.Next=p.Next.Next; Size--; } return this; } @Override public void output() { // TODO Auto-generated method stub if(empty()){ System.out.println("list is empty"); } else{ Node p=Head.Next; while(p!=null){ System.out.print(p.Data+" "); p=p.Next; } System.out.print("\r\n"); } } @Override public void swap(int index1, int index2) { // TODO Auto-generated method stub if(index1<0||index2<0){ System.out.println("parameter not positive"); } else if(index1>=Size||index2>=Size){ System.out.println("out of range"); } else{ Node p1=Head.Next; for(int i=0;i<index1;i++){ p1=p1.Next; } Node p2=Head.Next; for(int i=0;i<index2;i++){ p2=p2.Next; } Object object=p1.Data; p1.Data=p2.Data; p2.Data=object; } } @Override public List[] split(int index) { // TODO Auto-generated method stub if(index<0){ System.out.println("parameter not positive"); return null; } else if(index>=Size){ System.out.println("out of range"); return null; } else{ List[] lists=new LinkList[2]; lists[0]=new LinkList(); lists[1]=new LinkList(); next(0); for(int i=0;i<index;i++){ lists[0].insert(next()); } for(int i=index;i<Size;i++){ lists[1].insert(next()); } return lists; } } }
LinearList
package MyList; public class LinearList implements List { public static void main(String[] args){ List list=new LinearList(); for(int i=0;i<20;i++){ list.insert(i); } System.out.println("插入0到19"); list.output(); System.out.println("Size:"+list.size()); System.out.println("Empty:"+list.empty()); for(int i=0;i<20;i++){ list.insert(i,5); } System.out.println("在索引5插入0到19"); list.output(); List ll=list.indexOf(2); System.out.println("2的索引"); ll.output(); System.out.println("删除索引为1的数据30次"); for(int i=0;i<30;i++){ list.deleteByIndex(1); } list.output(); System.out.println("根据at返回元素"); for(int i=0;i<5;i++){ System.out.print("At "+i+" "+list.at(i)+" "+"\r\n"); } System.out.println("LinkList转LinearList"); List linklist=new LinkList(); for(int i=0;i<20;i++){ linklist.insert(i); } List list2=new LinearList(linklist); list2.output(); System.out.println("交换3和4"); list2.swap(3, 4); list2.output(); System.out.println("从10分成两个"); List[] lists=list2.split(10); lists[0].output(); lists[1].output(); } private final static double X=1.8; private int Size; private int MaxLength; private Object[] Element; public LinearList(){ Size=0; MaxLength=2; Element=new Object[MaxLength]; } public LinearList(List list){ if(list.getClass().getName().equals("MyList.LinearList")){ LinearList linearlist=(LinearList)list; Size=linearlist.size(); MaxLength=linearlist.maxLength(); Element=new Object[MaxLength]; for(int i=0;i<Size;i++){ Element[i]=linearlist.Element[i]; } } else if(list.getClass().getName().equals("MyList.LinkList")){ LinkList linklist=(LinkList)list; Size=0; MaxLength=2; setMaxLength(list.size()); Element=new Object[MaxLength]; linklist.next(0); for(int i=0;i<linklist.size();i++){ insert(linklist.next()); } } else{ System.out.println("type matching error"); } } public double getX(){ return X; } @Override public int size() { // TODO Auto-generated method stub return Size; } public int maxLength(){ return MaxLength; } public void setMaxLength(int size){ while(MaxLength<=size){ MaxLength*=X; } } @Override public boolean empty() { // TODO Auto-generated method stub return Size==0; } @Override public Object at(int index) { // TODO Auto-generated method stub if(index<0){ System.out.println("parameter not positive"); return null; } else if(index>=Size){ System.out.println("out of range"); return null; } else{ return Element[index]; } } @Override public List indexOf(Object object) { // TODO Auto-generated method stub List list=new LinearList(); for(int i=0;i<Size;i++){ if(Element[i].equals(object)){ list.insert(i); } } if(list.empty()){ System.out.println("target not found"); } return list; } @Override public List insert(Object object) { // TODO Auto-generated method stub //System.out.print("("+MaxLength+")"); if(Size==MaxLength){ MaxLength*=X; Object[] temp=new Object[MaxLength]; for(int i=0;i<Size;i++){ temp[i]=Element[i]; } temp[Size]=object; Size++; Element=temp; } else{ Element[Size]=object; Size++; } return this; } @Override public List insert(Object object,int index) { // TODO Auto-generated method stub //System.out.print("("+MaxLength+")"); if(index<0){ System.out.println("parameter not positive"); } else if(index>Size){ System.out.println("out of range"); } else if(Size==MaxLength){ MaxLength*=X; Object[] temp=new Object[MaxLength]; for(int i=0;i<index;i++){ temp[i]=Element[i]; } temp[index]=object; for(int i=Size;i>index;){ temp[i]=Element[--i]; } Element=temp; Size++; } else{ for(int i=Size;i>index;){ Element[i]=Element[--i]; } Element[index]=object; Size++; } return this; } @Override public List deleteByIndex(int index) { // TODO Auto-generated method stub //System.out.print("("+MaxLength+")"); if(index<0){ System.out.println("parameter not positive"); } else if(index>=Size){ System.out.println("out of range"); } else if(Size==(int) (MaxLength/X+1)){ MaxLength/=X; Object[] temp=new Object[MaxLength]; for(int i=0;i<index;i++){ temp[i]=Element[i]; } Size--; for(int i=index;i<Size;){ temp[i]=Element[++i]; } Element=temp; } else{ Size--; for(int i=index;i<Size;){ Element[i]=Element[++i]; } } return null; } @Override public void output() { // TODO Auto-generated method stub if(empty()){ System.out.println("list is empty"); } else{ for(int i=0;i<Size;i++){ System.out.print(Element[i]+" "); } System.out.print("\r\n"); } } @Override public void swap(int index1, int index2) { // TODO Auto-generated method stub if(index1<0||index2<0){ System.out.println("parameter not positive"); } else if(index1>=Size||index2>=Size){ System.out.println("out of range"); } else{ Object object=Element[index1]; Element[index1]=Element[index2]; Element[index2]=object; } } @Override public List[] split(int index) { // TODO Auto-generated method stub if(index<0){ System.out.println("parameter not positive"); return null; } else if(index>=Size){ System.out.println("out of range"); return null; } else{ List[] lists=new LinearList[2]; lists[0]=new LinearList(); lists[1]=new LinearList(); for(int i=0;i<index;i++){ lists[0].insert(Element[i]); } for(int i=index;i<Size;i++){ lists[1].insert(Element[i]); } return lists; } } }
相关文章推荐
- 大话数据结构(二)——线性表链式存储结构(单链表)的java实现
- java实现链表线性表
- JAVA实现具有迭代器的线性表(单链表)
- 数据结构(二)--- 线性表链表(单链表)java实现方式
- 线性表--双链表实现方式 (JAVA)
- (4) 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- java 用链表实现线性表
- java 链表实现线性表
- 线性表 及Java实现 顺序表、链表、栈、队列
- 线性表 及Java实现 顺序表、链表、栈、队列
- java 单向链表的实现
- java双向链表的实现(部分功能)
- 利用链表实现队列的Java代码
- JAVA实现链表
- 用java数组实现基本链表和可自扩充的链表
- Java实现链表之结点
- Java实现链表
- JAVA实现双向链表
- 栈的链表实现_JAVA描述《数据结构与算法分析》
- JAVA实现循环链表