上周我们学习了队列的实现,我们可以通过数组或者链表实现队列,队列是对数据的一种存储方式,但是它更优于数组和链表,下面是编写的简单的数组/链表对队列的实现,完善版的还没有完全搞好,先是最基础的实现类:

数组实现的队列:

package lyw.study0411;/*** 通过数组来实现队列* 作用 :用来实现一个队列类用来存储对象* @author 刘俞雯  2013-04-11*/
public class MyQueue {//定义一个数组内用来存储数据的数组,初始长度为0private MyStudent[] srcA=new MyStudent[0];/*** 用来给数组中添加MyStudent对象* @param ms MyStudent类的对象名*/public void add(MyStudent ms){//1.新建一个学生类的数组,长度是原数组长度+1MyStudent[] srcB=new MyStudent[srcA.length+1];//2.将要加入的对象ms放入新数组的最后一位srcB[srcA.length]=ms;//3.把原数组放入新数组for(int i=0;i<srcA.length;i++){srcB[i]=srcA[i];System.out.println("此时加入了:"+srcB[i]);}//4.指向新建的数组srcA=srcB;}/*** 用来取得队列中index位置的对象* @param index 要取得对象的位置* @return 一个学生对象*/public MyStudent get(int index){MyStudent ms=srcA[index];return ms;}/*** 得到队列的长度* @return 队列中元素个数*/public int size(){return srcA.length;}public void PrintArray(){for(int index=0;index<srcA.length;index++)System.out.println("队列的第"+(index+1)+"个位置的数据是"+srcA[index]);}}

这是简单的数组对队列的实现,后面还有编写的简单测试类:

package lyw.study0411;public class MyStudent {//定义学生的性命年龄属性private String name; private int age; static MyStudent a1; static MyStudent a2; static MyStudent a3;/*** 入口主函数* @param args*/public static void main(String[] args) {//实例化一个队列对象MyQueue mq=new MyQueue();//调用它的各种方法mq.add(a1);mq.add(a2);mq.add(a3);mq.get(2);System.out.println("2号位置的学生:"+mq.get(2));mq.size();System.out.println("队列的长度:"+mq.size());mq.PrintArray();}//编写构造方法传入属性public MyStudent(String name,int age){this.name=name;this.age=age;}public MyStudent(){}
}

刚开始编写的时候在队列里传入的是学生类,所以只好只能加入学生类的对象,但是上面的代码中加入的学生对象a1等都是空值,以后会通过设置Object类来添加各种不同类型的对象,目前程序正在完善。

通过链表实现的队列:

package lyw.study0416;/*** 通过链表实现一个队列类* 作用 实现一个队列类,用来存储对象* @author 刘俞雯 2013-04-16**/
public class MyQueue2 {//根结点private static MyNode2 root;//另外的结点用来保存根结点private MyNode2 other;//计数器private int count=1;//队列的初始长度private int size=0; /*** 向队列中添加元素* @param mn 向队列中添加的对象*/public void add(Object mn){//开始加入元素if(root==null){//实例化一个结点,为根结点root=new MyNode2();//把要传入的数据加入根结点root.date=mn;
//          System.out.println("root="+root.date);//之后把other指向rootother=root;}else{//新实例化一个结点类对象nodeMyNode2 node=new MyNode2();//把要传入的数据加入新结点node.date=mn;//other的下一个结点为nodeother.next=node;//other指向他的下一个结点other=other.next;
//          System.out.println("other="+other.date);}}/*** 从队列中取出元素* @param index 取出元素的位置* @return 查找位置的结点*/public Object get(int index){//实例化一个新的结点对象ms为需要返回的结点MyNode2 ms=new MyNode2();//把other指向rootother=root;//遍历链表查找对应位置的结点while(count<=index){System.out.println("count="+count);if(count==index){//需要返回的值为other结点ms=other;count ++;}else{count++;other=other.next;ms=other;}}return ms;}/*** 取得当前队列的长度* @return 当前链表的长度*/public int size(){  //新实例化一个结点nodeMyNode2 node=new MyNode2();other=root;if(other==null){return size;}else{while(other!=null){  size++;  node=other.next;  other=node;  }  return size;  } }  /*** 打印链表中的数据* @param root 根结点的数据*/public void printLink(MyNode2 root,int index){if(root!=null){System.out.println("第"+index+++"个位置的数据是:"+root.date);MyNode2 next=root.next;printLink(next,index++);}}public static void main(String[] args) {//新建一个队列对象MyQueue2 mq=new MyQueue2();//调用mq的各种方法mq.add(123);mq.add("刘");mq.add("刘俞雯");mq.add("哈哈");mq.add("哈");mq.add("You");mq.add(1267);MyNode2 mn1=(MyNode2) mq.get(3);System.out.println("第三位的 :"+mn1.date);  int si=mq.size();  System.out.println("链表的长度为:"+si);  int index = 1;mq.printLink(root,index);}}

后面是定义的结点类:

package lyw.study0416;/*** 通过链表实现一个队列类* 作用 实现一个队列类,用来存储对象* @author 刘俞雯 2013-04-16**/
public class MyQueue2 {//根结点private static MyNode2 root;//另外的结点用来保存根结点private MyNode2 other;//计数器private int count=1;//队列的初始长度private int size=0; /*** 向队列中添加元素* @param mn 向队列中添加的对象*/public void add(Object mn){//开始加入元素if(root==null){//实例化一个结点,为根结点(由于刚开始的时候在root前又加了MyNode2,相当于新的一个root对象,//而不是属性中的root,导致无法加入,最后在改进下改正了过来
)root=new MyNode2();//把要传入的数据加入根结点root.date=mn;
//          System.out.println("root="+root.date);//之后把other指向rootother=root;}else{//新实例化一个结点类对象nodeMyNode2 node=new MyNode2();//把要传入的数据加入新结点node.date=mn;//other的下一个结点为nodeother.next=node;//other指向他的下一个结点other=other.next;
//          System.out.println("other="+other.date);}}/*** 从队列中取出元素* @param index 取出元素的位置* @return 查找位置的结点*/public Object get(int index){//实例化一个新的结点对象ms为需要返回的结点MyNode2 ms=new MyNode2();//把other指向rootother=root;//遍历链表查找对应位置的结点while(count<=index){System.out.println("count="+count);if(count==index){//需要返回的值为other结点ms=other;/***开始在这一步没加count++,导致当到了索引的位置之后,*因为while中的count<=index也一直成立,形成了死循环,*导致电脑卡机。。。。。。-_- !。。之后经过调试才改了过来o(∩_∩)o*/count ++;}else{count++;other=other.next;ms=other;}}return ms;}/*** 取得当前队列的长度* @return 当前链表的长度*/public int size(){  //新实例化一个结点nodeMyNode2 node=new MyNode2();other=root;if(other==null){return size;}else{while(other!=null){  size++;  node=other.next;  other=node;  }  return size;  } }  /*** 打印链表中的数据* @param root 根结点的数据*/public void printLink(MyNode2 root,int index){if(root!=null){System.out.println("第"+index+++"个位置的数据是:"+root.date);MyNode2 next=root.next;printLink(next,index++);}}public static void main(String[] args) {//新建一个队列对象MyQueue2 mq=new MyQueue2();//调用mq的各种方法mq.add(123);mq.add("刘");mq.add("刘俞雯");mq.add("哈哈");mq.add("哈");mq.add("You");mq.add(1267);MyNode2 mn1=(MyNode2) mq.get(3);System.out.println("第三位的 :"+mn1.date);  int si=mq.size();  System.out.println("链表的长度为:"+si);  int index = 1;mq.printLink(root,index);}}

下面是程序执行后的结果:

count=1
count=2
count=3
第三位的 :刘俞雯
链表的长度为:7
第1个位置的数据是:123
第2个位置的数据是:刘
第3个位置的数据是:刘俞雯
第4个位置的数据是:哈哈
第5个位置的数据是:哈
第6个位置的数据是:You
第7个位置的数据是:1267

对于数组或者链表实现的队列,刚开始做的时候还有好多细节方面的错误,导致刚开始测试的时候的初的结果不是运行不起来要么就是运行结果不正确,之后通过一步步的测试,发现并且改正下,得到了最终的程序,而这只是最简单的初始队列的实现,之后还会做出有插入删除等的队列,还有用双向链表实现的队列。

基础的数组/链表实现的队列相关推荐

  1. DSt:数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【贪心/分治/动态规划】之详细攻略

    DSt:数据结构的简介.最强学习路线(逻辑结构[数组-链表-栈和队列/树-图-哈希].物理结构[元素/关系].数据运算[十大排序/四大查找-图三大搜索-树三大遍历].高级算法[贪心/分治/动态规划]) ...

  2. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  3. 【Java8】堆栈/队列/数组/链表/红黑树,List/set子接口,hashcode/hashset,Map/内部接口,/统计字符个数,debug,斗地主,Collections,TreeSet

    文章目录 1.堆栈/队列/数组/链表:数据结构即计算机组织管理数据的方式,堆栈指的是内存图中的栈,不是堆 2.红黑树:二查,二查平,二查平1倍 3.List子接口:集合,IndexOutOfBound ...

  4. Java基础入门笔记-数组链表

    数组链表ArrayList ArrayList是JDK自带的基础工具类. java.util.ArrayList 也是一个容器(里面存放对象) 1.添加对象add: 2.删除对象remove: 3.遍 ...

  5. JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)

    注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...

  6. 常见的数据结构:栈 队列 数组 链表 红黑树——List集合 _ HashSet集合、可变参数 collections集合 Map集合

    2021-06-07复习java 一.常见的数据结构 栈(先进后出) 队列 数组 链表 红黑树 二.List集合_介绍&常用方法 ArrayList集合 Linkedlist集合 三.Hash ...

  7. Java集合常见数据结构-栈/队列/数组/链表/红黑树

    数组 链表 红黑树

  8. Java基础之数组与集合

    Java基础之数组与集合 一.数组 二.冒泡排序算法 三.选择排序算法 四.二维数组 五.Arrays 工具 六.宠物管理系统 七.集合 Collection 八.List 九.重写 equals 方 ...

  9. 基于数组的无锁队列(译)

    2019独角兽企业重金招聘Python工程师标准>>> 1 引言 最近对于注重性能的应用程序,我们有了一种能显著提高程序性能的选择:多线程.线程的概念实际上已经存在了很长时间.在过去 ...

最新文章

  1. c语言循环并行处理,C语言设计并行处理
  2. Android View 的onDraw 和 draw 一定会调用吗?
  3. xshell 安装yum_Xshell上面简单安装docker
  4. Redis(案例六:ZSet数据)
  5. java nutz_jnutz: 基于nutz的java+js混合开发项目
  6. 万众期待的PowerBI Report Server与PowerBI Premium
  7. go 的时间与时间戳计算
  8. 【ACM International Collegiate Programming Contest Gym-100814 C】Connecting Graph【并查集按秩合并】
  9. ps无法加载扩展未经正确签署解决方法
  10. mysql山西区位码_输入码、区位码、国标码与机内码关系简介【转载】
  11. SECS半导体通信委员会参考书
  12. C# C++ 互操作:C++向C#输出不定长数组或指针的实现
  13. 密码爆破工具——九头蛇(hydra)
  14. 研华IO控制卡硬件接线方式
  15. 矩阵乘法的实现(一般形式及单个矩阵的n次幂)
  16. 阿里云服务器绑定域名,阿里云esc绑定域名,阿里云域名备案相关完整情况
  17. gtx780有html接口吗,NVIDIA GTX780Ti评测_评测_太平洋电脑网PConline
  18. 错误类型:reflection.ReflectionException: Could not set property ‘xxx‘ of ‘class ‘xxx‘ with value ‘xxx‘
  19. websocket——Firefox 无法建立到 ws://... 服务器的连接
  20. 【总结】利用AWS搭建混合云的架构

热门文章

  1. 电脑打印机老是文档挂起无法打印怎么办
  2. java gef_【插件开发】—— 12 GEF入门
  3. c#实现批量坐标方位角计算
  4. 脑控技术原理及受害者自救
  5. 管理心理学试题库【1】
  6. 【MySQL数据库】 - 复杂查询(二)
  7. 小镇故事介绍 这个世界很喧哗,有的时候只需要一个人静一静
  8. 玩客云刷linuxARMBIAN当服务器过程记录
  9. 扒一扒那些叫欧拉的定理们(十一)——欧拉数论定理
  10. iOS-不用网线搭建IPv6网络测试环境