数组和链表实现队列

本文深入探讨了如何利用数组和链表实现队列,包括数组队列和链表队列的原理、核心代码解析及性能比较。详细介绍了数组和链表的特点、操作方法和注意事项,旨在帮助开发者理解和掌握这两种数据结构在队列实现中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 吐舌头终于写完了~~开森~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值