数据结构实验报告单链表的基本操作

一.知识点

单链表:

部分成员方法:
构造函数、getsetaddremovegetSizecontainsmerge
最基本的动作:

从左到右移动指针p=p.next


带头节点的单链表类

public class SheadLinkedList>{

       private int theSize;  //表的大小

       private Node headNode;  //头节点      

       ……成员方法

}

add

1、idx=0

1、重新修改操作

2、idx=theSize-1

2、OK

3、空表

3、重新修改操作

remove

1、空表无法进行删除操作

2、idx=0

3、表中只有一个元素

4、idx=theSize-1


二.错误

错误1

public void add(int idx,AnyType x){
Node newNode=new Node(x);
if(headNode==null||idx==0){
newNode.next=headNode;
headNode=newNode;
theSize++;
}
else{
Node p=getNode(idx-1);//如果此处写成idx就会把第一个元素弄成null
newNode.next=p.next;
p.next=newNode;
theSize++;
}
}

错误2单链表中的最小元素移到最前面

public boolean move(){
if(headNode==null) 
return false;
Node p=headNode;
AnyType x=p.data;
for(int i=0;iif(getNode(i).data.compareTo(headNode.data)<0){
AnyType val=headNode.data;
headNode.data=getNode(i).data;
getNode(i).data=val;*
// getNode(i+1).data=x;错误

                                val=getNode(i).data;错误*
p=p.next;
}
}
return true;
}

三.实现操作

1、定义单链表类型并动态创建单链表;

2、实现单链表的取元素操作、插入操作和删除操作;

3、实现输出单链表中各元素值的操作;

4、将单链表中的最小元素移到最前面。

四.实验代码

package exp1;
import java.util.Scanner;
class   Node{
	AnyType data;
	Node next;
	public Node(){
		this.data=null;
		this.next=null;
	}
	public Node(AnyType d){
		this.data=d;
		this.next=null;
	}
public Node(AnyType d,Node n){
	this.data=d;
	this.next=n;
}
}
public class MyLinkedList>{
	private static int theSize;
	private Node headNode;
	public MyLinkedList(){
		Node p=new Node();
		p.next=null;
		headNode=p;
		theSize=0;
	}
	//取元素
	public AnyType get(int idx){
		return getNode(idx).data;
	}
	private Node getNode(int idx){
		if(idx<0||idx>(theSize))
                 throw new IndexOutOfBoundsException("getNode index: " + idx + "; size: " + theSize );//抛出异常
		Node p=headNode;  ;   //指向头节点
		for(int i=0;i newNode=new Node(x);
		if(headNode==null||idx==0){
			newNode.next=headNode;
			headNode=newNode;
			theSize++;
		}
		else{
			Node p=getNode(idx-1);
			newNode.next=p.next;
			p.next=newNode;
			theSize++;
		}
	}
	//删除
	public boolean remove(AnyType idx){
		if(headNode==null)
			return false;
		else{
		    remove(idx);
		    return true;
		    }
		    
	}
	public void remove(int idx){
		if(headNode.next==null||idx==0){
			Node p=headNode;
			headNode=p.next;
			theSize--;
		}
		else{
			Node p=getNode(idx-1);
			Node q;
			q=p.next;
			p.next=q.next;
			theSize--;	
		}
	}
	//将单链表中的最小元素移到最前面
	public boolean move(){
		if(headNode==null) 
			return false;
		Node p=headNode;
		@SuppressWarnings("unused")
		AnyType x=p.data;
		for(int i=0;i s1=new MyLinkedList ();
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入表的大小:");
		int m=sc.nextInt();
		int num =0;
		System.out.println("你所添加的元素为:");
		for(int i=0;i


你可能感兴趣的:(数据结构实验报告单链表的基本操作)