数据结构与算法-队列

今天可能要多说几句,因为又遇到点事有点感触哈。

出去开会结果讲的大多数都是个我的专业无关的专题,专家讲的那些名词别说不了解,听都没听过。我就突然联想到平时的学习,既然我们作为某个领域的人,就一定要了解领域里的相关专业术语。要不无论是跟其他人交流,或者是出去学习,人家拿出来一个术语,咱还不知道就很难受。

 

先不说知不知道的问题,对术语的了解一定程度上可以判断一个人对该领域的研究和学习是否深入,你学计算机的考官提问:你讲讲对SEH的了解,结果你来了一句SEH是啥。。。。估计暴躁一点的直接就可以让你走了。这里可能夸张了一些哈,我们说回来数据就够,有很多数据结构和操作有其对应的专业术语,比如栈是入栈和出栈,树的左子树,右子树. 当我们描述这些已有的并且被规定好名称的操作时,最好是使用正确的术语,而不是“大白话”。

 

好了,今天要简单说说队列,上次的栈是这样的逻辑结构:

它的特点是先进后出,关于应用我们也简单的说了几个,而队列是我们熟悉的一个逻辑:

它是一个线性的,并且是先进先出的一个逻辑结构,从名字来看很容易就理解为排队?

在实际应用中除了这个排队,比如我们的CPU的运行队列,在python编程中也有queue队列,支持我们存储任何数据并按照顺序再取出。队列的优势就是这个,保持任务的顺序,任务会按照排队的顺序一个一个被处理,非常符合我们日常的逻辑。

一般队列的用途就是存储多的任务,当空出“手“”来的时候就会从队列中取出下一个任务,一直到整个队列变为空等。队列的操作分为入队和出队,入队仅允许从队尾进入,出队仅允许从队头出来。

那我们可想而知,当队头的元素出队之后,后续的任务都需要前移,变为:

代码实现比较简单,(实际例子就使用java写了,比较通用的写法,其他程序也差不多,最好还是自己安装一个MyEclipse吧,在线的有时候就不靠谱。。。。

class learn {  
public static void main(String []args) throws RuntimeException, Exception 
{
	Quene quene = new Quene(6);
	quene.out();
	quene.in(5);
	quene.in(8);
	quene.in(18);
	quene.in(7);
	quene.out();
	quene.out();
	quene.out();
	quene.out();
}
}

class Quene
{
	private int[] quene;
	private int count;
	
	//初始化指定大小的队列
	Quene(int num)
	{
		quene = new int[num];
		count = 0;	
	}
	
	//插入元素,并移动元素游标
	public void in(int item)
	{
		quene[count++]=item;	
	}
	
	//判断是否为空 不为空就弹出【0】,然后移位
	public void out()
	{	
		if(count==0)
		{
			System.out.println("队列为空");
		}
		else
		{
			System.out.println(quene[0]);
			count--;
			move();

		}
	}
	
	//将后面的都往前移动一位
	private void move()
	{   
		//由于count已经减1了 此时count指向数组最后一个元素  所以移位的上界为count-1
		for(int i=0;i<count;i++)
		{
			quene[i]=quene[i+1];
		}
	}
}

 

#输出

队列为空
5
8
18
7
 

队列操作的不只是数字,可以是任何数据,而且在实际应用中,队列也是无处不在。

说不定哪天编程做项目弄算法就用到了,哈哈^_^。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值