您的位置:首页 > 编程语言 > Java开发

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;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: