数据结构与算法(1)---Java语言实现:线性表的单链表定义

单链表的结点定义:

package 数据结构;
//定义单链表的数据类型,存储数据以int型为例
public class Slinklist {
	private int data;
	private Slinklist next=null;
		
	public Slinklist(int data,Slinklist next){
		this.data=data;
		this.next=next;
	}
	
	public void setData(int data){
		this.data=data;
	}
	public int getData(){
		return data;
	}
	
	public void setNext(Slinklist next) {
		this.next=next;
	}
	public Slinklist getNext(){
		return next;
	}
}


自定义越界异常:

package 数据结构;
//运行时异常是编译器无法检测的
public class OutofBoundaryException extends RuntimeException{
	public OutofBoundaryException(String str){
		super(str);
	}
}


线性表的单链表表示:

package 数据结构;

import java.util.IllegalFormatCodePointException;

public class Xianxingbiao {
	public int size;
	public Slinklist head;
	//辅助方法1:获取元素e的前驱节点:
	public Slinklist getPre(int e){
		Slinklist p=head;
		while (p.getNext()!=null)
			if(p.getNext().getData()==e) return p;
			p=p.getNext();
		return null;
	}
	//辅助方法2:获取位置i元素的前驱节点
	public Slinklist getIndexPre(int i){
		Slinklist p=head;
		while (i--!=0) p=p.getNext();
		return p;
			
		
	}
	//返回线性表大小
	public int getSize(){
		return size;
	}
	//判断线性表是否为空
	public boolean isEmpty(){
		return size==0;
	}
	//判断线性表是否包含元素e
	public boolean isContain(int e){
		Slinklist p=head.getNext();
		while(p!=null)
			if (p.getData()==e) return true;
			p=p.getNext();
		return false;
	}
	//返回元素e的位置
	public int indexOf(int e){
		//先判断元素e是否包含在链式线性表中
		int index=0;
		while(isContain(e)){
			Slinklist p=head.getNext();
			while(p!=null)
				if (p.getData()==e) return index;
				else {p=p.getNext();
				index++;}
				}
		//输出位置为-1表示该线性表中不包含该元素
		return -1;
	}
	//将元素e插入i位置
	public void insertIndex(int e,int i) throws OutofBoundaryException{
		//判断i是否在合规
		if (i>size||i<0) throw new OutofBoundaryException("索引越界");
		Slinklist n=getIndexPre(i);
		//定义新的链表节点用来存储数据e
		Slinklist m=new Slinklist(e, n.getNext());
		n.setNext(m);
	}
	//将元素e放在元素p之前
	public void insertBefore(int e,int p) throws OutofBoundaryException{
		if(!isContain(p)) throw new OutofBoundaryException("线性表中不存在元素e");
		Slinklist q=getPre(p);
		Slinklist m=new Slinklist(e, q.getNext());
		q.setNext(m);
	}
	//将元素e放在元素p之后
	public void insertAfter(int e,int p) throws OutofBoundaryException{
		if(!isContain(p)) throw new OutofBoundaryException("线性表中不存在元素e");
		Slinklist m=head.getNext();
		while (m!=null){
			if (m.getData()!=p) m=m.getNext();
			Slinklist n=new Slinklist(e, m.getNext());
			m.setNext(n);
		}
	}
	//删除下标为i的元素
	public void rmIndex(int i) throws OutofBoundaryException{
		//第一个元素的index是0,最后一个元素的下标是size-1;
		if(i>=size||i<0) throw new OutofBoundaryException("索引越界了");
		Slinklist p=head.getNext();
		Slinklist m=head;
		while(i--==0)
			p=p.getNext();
			m=m.getNext();
		m.setNext(p.getNext());
		
	}
	//删除元素e,代码展示删除第一个值为m的结点
	public void rmEle(int e) throws OutofBoundaryException{
		if(!isContain(e))throw new OutofBoundaryException("线性表中不存在元素e");
		//调用之前定义的方法获取元素e的索引
		int i =indexOf(e);
		//调用之前的方法,删除索引为i的元素
		rmIndex(i);
	}
	//获取下标为i的元素
	public Slinklist getIndex(int i) throws OutofBoundaryException{
		if(i>=size||i<0) throw new OutofBoundaryException("索引越界了");
		Slinklist p=head.getNext();
		while (i -- !=0) p=p.getNext();
		return p;
	}
	//将下标为i的元素替换为e
	public void exChange(int e,int i){
		if(i>=size||i<0) throw new OutofBoundaryException("索引越界了");
		Slinklist m=getIndex(i);
		m.setData(e);
	}
	//线性表添加元素e
	public void addEle(int e){
		Slinklist m=new Slinklist(e, null);
		Slinklist p=head;
		while(p.getNext()!=null) p=p.getNext();
		p.setNext(m);
		
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值