在用数组实现队列之前,让我们浅析一下数组的相关定义和性质。
当我们定义一个数组时,可以采用如下方法:
数组类型 [] 数组名 = new 数组类型 [长度]
数组类型 [] 数组名 = { ......值......}
数组类型 [] 数组名 = new 数组类型 []{......值......}
我们发现数组的一个特性大小是固定的,不能根据数据总数的变化而变化。但是队列的长度是可以改变的。那我们该怎么用数组去实现队列呢?
首先我们还是要从数组本身性质出发,我们发现数组名中存的是地址。^_^有没有想到一点什么?
既然存的是地址,那我就可以改变地址的内容,使数组名中存放另一个更大的数组的首地址。核心代码如下:
//创建一个新的更大的内存
length=size+1;
Student [] temp= new Student[length];
//把老数组里面的所有元素赋值给新数组
for(int i=0;i<size;i++)
{
temp[i]=queue[i];
}
//再让queue指向新数组temp
queue=temp;
//再把添加的元素加到新的队列里面去
queue[size]=stu;
这样就数组队列就实现了,现在我们可以任性的往里面添加数据,再也不怕溢出了~
/*************************************************
下面让我们继续用链表来实现队列,链表本身就是一个长度不固定的数据结构,所以我们不用再担心溢出,但是.............
我们同样也来浅析一下链表的属性吧,所谓知己知彼,百战不殆。
链表与数组不同,链表是一块离散的内存,是由一个一个Node节点组成的,它有头结点head,尾节点rear;链表的节点有两个部分,一个是数据域,不用再解释,就是装数据的用的;另一个是引用域,(因为我最初接触的是C,所以我就把这这个引用于想成一个指针域,)指向它的next节点,这样就不会丢失后面的数据啦~(Java里面没有定义指针
,刚开始理解起来还真有点别扭,请允许我小小吐槽一下哈)。下面请看构造Node节点的核心代码:
public class List_Node {
private Object data;//数据
private List_Node next;//引用域
//构造函数
public List_Node(Object data)
{
this.data=data;
}
//设置该节点的数据域中的数据
public void setdata(Object data)
{
this.data=data;
}
//得到该节点的数据域中存放的数据
public Object getdata()
{
return data;
}
//设置它的下一个节点
public void setNext(List_Node next)
{
this.next=next;
}
//得到它的下一个节点
public List_Node getNext()
{
return next;
}
}
之后定义链表和定义数组就差不多了,但是记得链表有一个头结点和一个尾节点哦~核心代码如下:
//定义链表
public class List {
private List_Node root;// 声明一个根节点
private List_Node tail;// 声明一个尾节点
//增删查改函数依此如下
public void add(List_Node newnode)
public Object removeindex(int index)
public Object getData(int index)
public Object changedata(int index ,Object data)
}
终于写完了~~开森~