欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java使用数组和链表实现队列示例

程序员文章站 2024-02-23 23:00:34
(1)用数组实现的队列:复制代码 代码如下:  //先自己定义一个接口  public interface netjavalist {  &n...

(1)用数组实现的队列:

复制代码 代码如下:
 
//先自己定义一个接口 
public interface netjavalist { 
  public void add(student t);    //继承该接口的类必须实现的方法 
  public student get(int index);//队列的加入,取出,队列的大小 
  public int size(); 


定义一个学生类

复制代码 代码如下:

class student { 
    private string name ;   //私有属性 名字,学分 
    private int score ; 
    public student(string name , int score){ 
        this.name = name ; 
        this.score = score ; 
    } 
    public void printinfo(){ 
        system.out.println("姓名"+name + "学分"+score ) ; 
    } 

 实现自定义接口

复制代码 代码如下:

public class stlist implements netjavalist{ 
private student[] str = new student[0] ; 
    //增加队列的元素 
    public void add(student t) { 
        student[] src = new student[str.length+1]; 
        for(int i=0;i<str.length;i++){ 
            src[i]=str[i] ; 
        } 
        src[str.length]=t ; 
        str = src ; 
    } 

    //得到队列中的某个元素 
    public student get(int index) { 
        student t = str[index]; 
        return t; 
    } 

    //返回队列的长度 
    public int size() { 

        return str.length; 
    } 


写个主函数类实现下队列

复制代码 代码如下:

public class manager { 
    public static void main(string[] args) { 
        stlist sil = new stlist() ; 
        for(int i=0;i<5;i++){ 
        student st = new student("name"+i,i*10);     
        sil.add(st); 
        } 
       printlist(sil) ; 

    } 
//输出队列中的所有元素 
  public static void printlist(stlist t){ 
      for(int i=0;i<t.size();i++){ 
          student f =t.get(i); 
          f.printinfo(); 
      } 

  } 

 (2)链表实现的队列
  先定义一个节点类;

复制代码 代码如下:

public class linknode { 
private object obj ; //节点内的数据对象 
private linknode next ; //对下一个节点的引用 
//在创建节点对象的时候就传入节点的数据对象 
public linknode(object obj){ 
    this.obj = obj ; 

public object getobj(){ 
    return obj ; 

public void setobj(object obj){ 
    this.obj = obj ; 


public linknode getnext(){ 
    return next ; 

public void setnext(linknode next){ 
    this.next =next ; 


 然后写个队列的实现方法类

复制代码 代码如下:

public class linklist { 

    public static linknode root ;//第一个节点 
    public linknode last = null ;//最后的一个节点 
    public static void main(string ara[]){ 
        linklist df = new linklist() ; 
        df.add(1); 
        df.add(2); 
        df.add(3); 
        df.printlinklist(root); 
        df.move(root,2) ; 
        df.move(root,2) ; 
        df.printlinklist(root); 

    } 
    /*
     * 插入节点
     */ 
    public void add(object obj){ 
        //创建一个新的节点 
        linknode t = new linknode(obj); 
        if(root ==null){ 
            root = t ; 
            last = root ; 
        }else{ 
            last.setnext(t); 
            last = t ; 
        } 

    } 
    /*
     * 输出操作
     */ 
    public void printlinklist(linknode root){ 
        if(null != root){ 
            object data = root.getobj(); 
            system.out.println(data); 
            linknode temp = root.getnext(); 
            printlinklist(temp) ; 
        } 
    } 
    /*
     * 删除操作
     */ 
    public linknode move(linknode root,int index){ 
        if(this.getlength()<index || index <0){ 
            throw new runtimeexception("下标越界:"+index + 
                ",size:" +this.getlength()) ; 
        }else{ 
        int count = 1 ;linknode sd = root ; 
         while(count!=index-1){ 
             sd = sd.getnext(); 

         } 

         
         sd.setnext(sd.getnext().getnext()); 
        return root ; 
    }} 

   /*
    * 得到链表的长度
    */ 
      public int  getlength(){ 
        int count = 0 ; 
        if(root==null){ 
            return count ; 
        } 
        linknode node =root.getnext(); 
        while(null != node){ 
            count ++ ; 
            node=node.getnext(); 

        } 
        //system.out.println((count+1)); 
        return count+1 ; 
      }