队列的初解
2013.7.11
在昨天上课之前,对于队列,是一个陌生而又神奇的东西,后来跟着胡哥的思路看他自己创建了一个队列才知道,工具已经
在自己手中了,东西的成型与否在于自己怎么去用,或者,利用已有的工具创建一个更高级一点的工具,然后再创建工具直
到创建一个美丽的事物,这也许就是一个软件工程师做的简单但又极其考验毅力的东西。
然后今天,自己做了一个队列的类,虽然不太完美,也很简单,但毕竟是自己造出的东西,每天就这样写一篇日记就当鼓励
自己了。
首先,建立一个队列类是为了使用它,所以最初步的建立了两个类MyQueue,TestQueue。
先考虑我的队列想要实现的功能:
1.能添加数据,长度可变
2.能找到指定位置数据
3.能统计数据个数
4.删除
5.指定位置插入
然后开始考虑各个方法实现的算法了,代码就复制一下
//创建队列类
public class MyQueue{
private int count;//设置计数器属性
private int mqs[]=new int[0];//队列实现的基本方式为将队列类比为数组
//在队列中加入数据,主要思路是每加入一个数据,都新建一个长度比当前大1的数组并舍弃旧的数组,使新数组成为队列
public void add(int a){
int mqsN[]=new int [mqs.length+1];
for(int i=0;i<mqs.length;i++){
mqsN[i]=mqs[i];
}
mqsN[mqs.length]=a;
this.mqs=mqsN;
}
//在队列指定位置加入数据
public void add(int a,int index){
int mqsN[]=new int [mqs.length+1];
for(int i=0;i<index;i++){
mqsN[i]=mqs[i];
}
mqsN[index]=a;
for(int i=index+1;i<mqsN.length;i++){
mqsN[i]=mqs[i-1];
}
this.mqs=mqsN;
}
//打印队列中的数据内容,方法同数组
public void print(){
for(int i=0;i<mqs.length;i++){
System.out.print(mqs[i]+" ");
}
}
//查找指定位置的数据,方法同数组
public int search(int index){
if(index<mqs.length){
return mqs[index];
}else
{
System.out.print("超出队列长度,查找失败");
return 0;
}
}
//计数方法,返回队列的数据个数,方法同数组
public int count(){
return mqs.length;
}
//删除操作,方法同数组
public void delet(int index){
int mqsN[]=new int [mqs.length-1];
for(int i=0;i<index;i++){
mqsN[i]=mqs[i];
}
for(int i=index;i<mqsN.length;i++){
mqsN[i]=mqs[i+1];
}
this.mqs=mqsN;
}
}
测试用的类就不写了。
其实技术性的东西确实少的可怜,思路主宰一切。
然后就是真正的心得了:
1.编出一个东西没有想象中的那么难了,虽然也许是这个练习简单的缘故,但至少不会见到练习就胆怯了,从简单的开始
找回自信吧。
2.回头来看,下午在尝试用队列存储五子棋中的棋子时,发现又得重新建一个队列,重新复制粘贴,改变队列中存储数据
的类型。晚上上课时胡哥介绍了一个“泛型”更简单的解决这个问题,学海无涯啊!public class MyQueue<E>{
......}
3.上课的心得吧,学姐学长老师的重要词汇:技术博客、课外学习...还有不记得了,但是慢慢积累总没错。
4.还有的疑问不要忘记:如何利用队列和重绘保存五子棋棋子、五子棋棋盘随界面的大小变化大小。
今天就先到这里
分享到:
相关推荐
而回溯法则用于在多解或无解问题中尝试所有可能的路径,直到找到解决方案或证明无解。 在实际面试中,除了技术知识外,良好的问题分析能力和清晰的逻辑表达同样重要。面对一道问题,首先要理解问题的要求,然后分析...
快速排序在平均情况下的效率高,归并排序则能保证稳定性,而堆排序则在处理优先级队列问题时表现出色。理解这些排序算法的原理和复杂度分析,可以帮助你在面对数据排序问题时做出明智的选择。 搜索算法如深度优先...
本资源“java_shujujiegou_suanfa.rar_Java数据结构”旨在为初中级Java程序员提供一个易懂的学习平台,帮助他们提升编程技能。 在数据结构方面,主要涉及以下知识点: 1. 数组:数组是最基本的数据结构,它存储...
熟悉基本算法,如排序(冒泡、选择、插入、快速、归并等)、查找(顺序、二分、哈希等)以及常见数据结构(数组、链表、栈、队列、树、图)的实现与应用,是初级程序员应具备的基础能力。这些知识在解决实际问题时...
这个压缩包“苏州大学 计算机系 考研初复试的历届真题分析 算法题.zip”包含了历年来的考研初试和复试算法题目,是宝贵的学习资源。作为一个已经成功上岸的考生,分享这些资料旨在帮助后来的考生站在前人的经验之上...
"蓝桥杯"是一项全国性的专业编程竞赛,旨在提升大学生和初高中学生的计算机科学技能,特别是软件开发和算法设计能力。这项比赛每年举办一次,分为预赛和决赛两个阶段,吸引了大量的参赛者积极参与。第三届蓝桥杯预...
对于初入算法领域的朋友们,这是一个很好的学习起点。 分支界限法是一种全局搜索算法,旨在避免无效的搜索路径,通过剪枝操作减少搜索空间,提高问题求解效率。其基本思想是设立一个边界函数,用以衡量当前节点的最...
从十八世纪初开始,这个问题就引起了数学家和解密爱好者的注意。简单地说,这个问题要求从棋盘上任一个方格开始按规则移动骑士,使之成功的游历国际象棋棋盘的64个方格,且每个方格都接触且仅接触一次。 可以用一种...
1. **解压源码**:使用`tar`命令解压缩源码包,例如`tar zxvf zeromq-3.2.1-rc2.tar.gz`。 2. **配置编译环境**:进入解压后的目录,运行`./configure`命令进行配置,其中`--prefix`参数指定ZeroMQ的安装路径,如`...
还有动态规划、贪心算法、回溯算法等,分别用于解决最优解问题、局部最优解问题和解空间的递归探索。 小甲鱼的数据结构课程可能涵盖了这些基本概念,并通过实际的编程示例,让学生亲手实现这些数据结构和算法。源...
数据结构与算法是计算机科学的核心组成部分,它们是程序员掌握高效编程...无论你是初入编程的新手还是寻求进阶的开发者,都能从中受益匪浅。通过学习和实践,你将能够设计出更高效、更优雅的代码,提升自己的编程能力。
19. **分支限界法**的形式包括**队列式(FIFO)** 和**优先队列式**。 20. **一致的蒙特卡洛算法**:对同一实例,不会给出两个不同的正确解答。 21. **哈夫曼编码**:使用贪心法实现的高效数据压缩方法。 22. **...
Visual C++6.0是一款经典的集成开发环境(IDE),在20世纪末到21世纪初广泛用于Windows平台的C++编程。本压缩包文件“数据结构算法:Visual C++6.0程序集”显然是一个包含用C++语言实现的数据结构和算法的代码库,...
数据结构包括数组、链表、栈、队列、哈希表、树(二叉树、平衡树如AVL和红黑树)、图等基础概念,以及它们在实际问题中的应用。算法部分则涵盖了排序(快速排序、归并排序、堆排序等)、搜索(深度优先搜索、广度...
从标签“算法20”我们可以推测,这本书可能涵盖了与算法相关的主题,特别是那些在21世纪初二十年间发展起来的算法,或者它可能强调了20个核心的算法概念。算法是计算机科学的基础,它们是解决问题或执行任务的精确...
2. **数据结构与算法**:包括数组、链表、栈、队列、树、图等基本数据结构,以及排序、查找、图论等相关算法,是软件开发的基础。 3. **操作系统**:可能考察进程管理、内存管理、文件系统、设备管理和调度策略等...
1. **算法与数据结构**:这是编程面试的基础,书中可能会深入讲解数组、链表、栈、队列、树、图等基本数据结构,以及排序、搜索、动态规划等经典算法。对于这些内容的理解和熟练应用是面试中的重要考核点。 2. **...
在队列分析中,二代测序技术可以用于 alignment and quality assessment、Variant calling、Pathogenic germline variants、Copy number analyses、Survival analyses、Driver gene identification、Clonal states ...
在学习算法之初,首先需要理解什么是算法。算法是一系列明确的指令,用于解决特定问题或执行特定任务。它们通常由基本操作组成,如赋值、条件判断、循环等,这些操作在有限的步骤内完成。算法的有效性取决于其正确性...