读书人

用数组跟链表实现队列

发布时间: 2013-05-02 09:39:29 作者: rapoo

用数组和链表实现队列

*什么是队列?

????? 队列的实质就是以数组和链表为基础,实现对数据的添加,删除,查找,插入等动作

举个例子,一根按动笔,笔芯就代表数组或链表,而整支笔就可以代表一个队列,这支笔可以通过一些方法来控制笔芯的弹出、收回以及写字,这就和队列存在一些方法可以向链表和数组加入、删除、获取数据是一个道理。

下面是我分别用数组和链表实现的简单队列

?

(一)用数组试下的队列

?

1、首先建立数组和链表中存放的对象类

public class student {    //定义学生类private String name;  //定义姓名属性private int number;   //定义学号属性public student(String name,int number){   //带有参数的构造器,参数为name和numberthis.name=name;this.number=number;}}

?

2、创建队列类

import xxy0417.student;/** * 用数组实现队列 * @author 徐馨宇2013.04.19 * */public class list {      //定义队列类private int change;  //定义一个变动值private int count; //定义一个计数数,该数与数组下标值相同private int root;  //定义数组的初始长度student[]st=new student[root]; //创建一个长度为root的数组public list(int root,int change){  //创建带有两个参数的构造器用来实例化数组}public void add(student s){    //定义在队列中加入对象的方法,参数为student类的一个对象if(count+1>=st.length){    //判断如果新加入一个对象,是否使数组越界student[]b=new student[st.length+change]; //如果越界,则新建一个长度增加change个单位的数组来存储数据for(int i=0;i<st.length;i++){ //将原数组中的数据传到新建数组中b[i]=st[i];}b[st.length]=s;   //把新加入的对象放入新建数组中下标为【原数组长度】的位置st=b;           //将新数组中的所有数据赋给原数组}else{                  //如果数组未越界,则把新加入的对象存储在数组中st[count+1]=s;  }count++;                    //新加入一个对象,则计数数增加一}public student get(int index){  //定义获取数组中某个指定元素的值得方法,参数为一个整形的索引数student s=st[index];        //得到数组中下标为index的单元所存的对象return s;                   //返回这个对象}public void delete(int index){   //定义删除数组中某指定元素的方法student[]n=new student[st.length-1];   //创建一个新数组for(int i=0;i<index;i++){     //把原数组中所要删除元素之前的元素赋给新建数组n[i]=st[i];}for(int i=index+1;i<st.length;i++){  //把原数组中所要删除元素之后的元素赋给新建的数组,下标减一n[i-1]=st[i];}st=n;   //把新建数组赋给原数组}public int getSize(){   //定义得到队列中元素个数的方法return st.length;   //返回数组的长度}}

(二)用链表实现的队列

?

1、创建节点类

//定义节点类public class linknode {//定义数据属性   private Object obj;     private linknode child;    //定义指针指向的子节点   private linknode parent;   //定义指针指向的父节点         public linknode(Object obj){ //有参构造器   this.obj=obj;   }      public void setobj(Object obj){     this.obj=obj;   }      public Object getobj(){   return obj;   }      public void setchild(linknode child){   this.child=child;   }      public linknode getchild(){   return child;   }   public void setparent(linknode parent){   this.parent=parent;   }      public linknode getparent(){   return parent;   }}

?2、创建用链表实现的队列类

//创建链表类public class linklist {public static linknode front=null;//第一个节点赋值public  linknode last=null;//最后一个节点赋值/** *  * 函数入口 */public void main(String args[]){    linklist list=new linklist();//创建链表对象    list.add("aa");    list.add("bb");    list.add("cc");    //加入节点    }//定义接入节点的方法public void add(Object obj){linknode node=new linknode(obj);//如果链表为nullif(front==null){front=node;last=front;}else{last.setchild(node);node.setparent(last);last=node;}}//定义插入节点的方法public void insert(Object obj,int index){if(this.getlength()<index||index<0){throw new java.lang.RuntimeException("下标越界:"+index+"size:"+this.getlength());}else{linknode newnode=new linknode(obj);//创建一个新节点 linknode node=this.getnode(index);if(index==0){ front=node; }else{linknode fnode=node.getparent();fnode.setchild(newnode);newnode.setparent(fnode);//设置新的用关系newnode.setchild(node);node.setparent(newnode); }}}//定义删除节点的方法public void delete(Object obj,int index){linknode node=this.getnode(index);if(index>this.getlength()){throw new java.lang.RuntimeException("下标越界:"+index+"size:"+this.getlength());}else{linknode nodef=node.getparent();linknode nodez=node.getchild();if(nodef==null){     front=nodez;}else if(nodez==null){nodef.setchild(null);}else{nodez.setparent(nodef);nodef.setchild(nodez);}}}//定义取出节点的方法public linknode getnode(int index){linknode d=front.getchild();for(int i=0;i<index;i++){d=d.getchild();}return d;}public int getlength(){int count=0;if(front==null){return count;}linknode node=front.getchild();while(node!=null){count++;node=node.getchild();}return count+1; }} 

?用数组跟链表实现队列时间不够链表的注解没怎么写,明天补上

读书人网 >编程

热点推荐