数组跟链表实现队列
在用数组实现队列之前,让我们浅析一下数组的相关定义和性质。
当我们定义一个数组时,可以采用如下方法:
数组类型 [] 数组名 = 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) }
终于写完了~~开森~