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

来源:互联网 发布:mac os操作系统教程 编辑:程序博客网 时间:2024/06/11 23:35

单链表的结点定义:

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;}//判断线性表是否包含元素epublic 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);//定义新的链表节点用来存储数据eSlinklist 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的元素替换为epublic void exChange(int e,int i){if(i>=size||i<0) throw new OutofBoundaryException("索引越界了");Slinklist m=getIndex(i);m.setData(e);}//线性表添加元素epublic 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