java使用数组和链表实现队列示例

(1)用数组实现的队列:

代码如下:

//先自己定义一个接口 
public interface NetJavaList { 
  public void add(Student t);    //继承该接口的类必须实现的方法 
  public Student get(int index);//队列的加入,取出,队列的大小 
  public int size();

}

定义一个学生类

代码如下:

class Student { 
    private String name ;   //私有属性 名字,学分 
    private int score ; 
    public Student(String name , int score){ 
        this.name = name ; 
        this.score = score ; 
    } 
    public void printInfo(){ 
        System.out.println("姓名"+name + "学分"+score ) ; 
    } 
}

实现自定义接口

代码如下:

public class STList implements NetJavaList{ 
private Student[] str = new Student[0] ; 
    //增加队列的元素 
    public void add(Student t) { 
        Student[] src = new Student[str.length+1]; 
        for(int i=0;i<str.length;i++){ 
            src[i]=str[i] ; 
        } 
        src[str.length]=t ; 
        str = src ; 
    }

//得到队列中的某个元素 
    public Student get(int index) { 
        Student t = str[index]; 
        return t; 
    }

//返回队列的长度 
    public int size() {

return str.length; 
    }

}

写个主函数类实现下队列

代码如下:

public class Manager { 
    public static void main(String[] args) { 
        STList sil = new STList() ; 
        for(int i=0;i<5;i++){ 
        Student st = new Student("name"+i,i*10);     
        sil.add(st); 
        } 
       printList(sil) ;


//输出队列中的所有元素 
  public static void printList(STList t){ 
      for(int i=0;i<t.size();i++){ 
          Student f =t.get(i); 
          f.printInfo(); 
      }


}

(2)链表实现的队列
  先定义一个节点类;

代码如下:

public class LinkNode { 
private Object obj ; //节点内的数据对象 
private LinkNode next ; //对下一个节点的引用 
//在创建节点对象的时候就传入节点的数据对象 
public LinkNode(Object obj){ 
    this.obj = obj ; 

public Object getObj(){ 
    return obj ; 

public void setObj(Object obj){ 
    this.obj = obj ;


public LinkNode getNext(){ 
    return next ; 

public void setNext(LinkNode next){ 
    this.next =next ; 

}

然后写个队列的实现方法类


代码如下:

public class LinkList {

public static LinkNode root ;//第一个节点 
    public LinkNode last = null ;//最后的一个节点 
    public static void main(String ara[]){ 
        LinkList df = new LinkList() ; 
        df.add(1); 
        df.add(2); 
        df.add(3); 
        df.printLinkList(root); 
        df.move(root,2) ; 
        df.move(root,2) ; 
        df.printLinkList(root);


    /*
     * 插入节点
     */ 
    public void add(Object obj){ 
        //创建一个新的节点 
        LinkNode t = new LinkNode(obj); 
        if(root ==null){ 
            root = t ; 
            last = root ; 
        }else{ 
            last.setNext(t); 
            last = t ; 
        }


    /*
     * 输出操作
     */ 
    public void printLinkList(LinkNode root){ 
        if(null != root){ 
            Object data = root.getObj(); 
            System.out.println(data); 
            LinkNode temp = root.getNext(); 
            printLinkList(temp) ; 
        } 
    } 
    /*
     * 删除操作
     */ 
    public LinkNode move(LinkNode root,int index){ 
        if(this.getLength()<index || index <0){ 
            throw new RuntimeException("下标越界:"+index + 
                ",size:" +this.getLength()) ; 
        }else{ 
        int count = 1 ;LinkNode sd = root ; 
         while(count!=index-1){ 
             sd = sd.getNext();

}

sd.setNext(sd.getNext().getNext()); 
        return root ; 
    }}

/*
    * 得到链表的长度
    */ 
      public int  getLength(){ 
        int count = 0 ; 
        if(root==null){ 
            return count ; 
        } 
        LinkNode node =root.getNext(); 
        while(null != node){ 
            count ++ ; 
            node=node.getNext();


        //System.out.println((count+1)); 
        return count+1 ; 
      } 
}

(0)

相关推荐

  • JAVA实现链表面试题

    这份笔记整理了整整一个星期,每一行代码都是自己默写完成,并测试运行成功,同时也回顾了一下<剑指offer>这本书中和链表有关的讲解,希望对笔试和面试有所帮助. 本文包含链表的以下内容: 1.单链表的创建和遍历 2.求单链表中节点的个数 3.查找单链表中的倒数第k个结点(剑指offer,题15) 4.查找单链表中的中间结点 5.合并两个有序的单链表,合并之后的链表依然有序[出现频率高](剑指offer,题17) 6.单链表的反转[出现频率最高](剑指offer,题16) 7.从尾到头打印单链表(

  • java实现单链表、双向链表

    本文实例为大家分享了java实现单链表.双向链表的相关代码,供大家参考,具体内容如下 java实现单链表: package code; class Node { Node next; int data; public Node(int data) { this.data=data; } } class LinkList { Node first; //头部 public LinkList() { this.first=null; } public void addNode(Node no) {

  • java实现单链表之逆序

    下面一段代码准确的介绍了java实现单链表逆序,具体内容就不做详解了,有需要的朋友可以直接拷贝了 package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedReverse { class Node{ int data; Node next; public Node(int data){ this.data = data; } } public static

  • java实现数据结构单链表示例(java单链表)

    复制代码 代码如下: /** * 单向链表 * */public class NodeList<E> { private static class Node<E> { // 节点类  E data; // 节点上的数据  Node<E> next; // 指向下一个节点 Node(E e) {   this.data = e;   this.next = null;  } } private Node<E> head; // 链表的头节点 private N

  • Java编程实现递增排序链表的合并

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解答: /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1==null)

  • java使用数组和链表实现队列示例

    (1)用数组实现的队列: 复制代码 代码如下: //先自己定义一个接口  public interface NetJavaList {    public void add(Student t);    //继承该接口的类必须实现的方法    public Student get(int index);//队列的加入,取出,队列的大小    public int size(); } 定义一个学生类 复制代码 代码如下: class Student {      private String na

  • 使用python实现数组、链表、队列、栈的方法

    引言 什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表,集合和字典等都是数据结构 N.Wirth:"程序=数据结构+算法" 数据结构按照其逻辑结构可分为线性结构.树结构.图结构 线性结构:数据结构中的元素存在一对一的互相关系. 树结构:数据结构中的元素存在一对多的互相关系. 图结构:数据结构中的元素存在多对多的互相关系. 数组 在python中是没有数

  • Java 判断数组是否相等的方法示例

    以下实例演示了如何使用 equals ()方法来判断数组是否相等: import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { int[] ary = {1,2,3,4,5,6}; int[] ary1 = {1,2,3,4,5,6}; int[] ary2 = {1,2,3,4}; System.out.println("数组 ary 是否与数组 a

  • Java用数组实现循环队列的示例

    复习了下数据结构,用Java的数组实现一下循环队列. 队列的类 //循环队列 class CirQueue{ private int QueueSize; private int front; private int rear; private int[] queueList ; public CirQueue(int QueueSize){ this.QueueSize = QueueSize; queueList = new int[QueueSize]; front = 0; rear =

  • java数据结构与算法数组模拟队列示例详解

    目录 一.什么是队列 二.用数组来模拟队列 一.什么是队列 队列是一个有序列表,可以用数组或者链表来实现. 遵循先入先出的原则,即:先存入队列的数据,要先取出.后存入的的数据,后取出. 看一张队列的模拟图,1,2,3表示同一个队列Queue.在队列中有2个指针,front表示队首,rear表示队尾. 图1中表示队列里还没有数据,所以front跟rear初始化都是-1. 当图2中有数据进行存入的时候,front没变,而rear则随着数据的增多而改变.存入了4个数据,于是rear=3. 再看图3,f

  • java中用数组实现环形队列的示例代码

    本篇文章主要讲述了使用数组实现环形队列的思路以及具体代码 一.队列是什么 我们先来看下百科的解释: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的端称为队头. 总结起来两点: 1.一种线性表 2.添加操作只能在表尾,删除操作在表头(先进先出) 二.实现队列的思路 1.初始化一个空队列 初始化一个大小固定的数组,并将头指针,尾指针都指向下表为0的位置,但其

  • java数组实现循环队列示例介绍

    从顶部进去数据,从底部出来数据,用数组实现队列,但是下面这个队列,只能进行一次存数值,取数值,不够完善. import java.util.Scanner; public class ArrayQueueDemo { public static void main(String[]args){ //定义队列大小maxsize ArrayQueue arrayQueue=new ArrayQueue(3); Scanner scanner=new Scanner(System.in); char

  • Python实现队列的方法示例小结【数组,链表】

    本文实例讲述了Python实现队列的方法.分享给大家供大家参考,具体如下: Python实现队列 队列(FIFO),添加元素在队列尾,删除元素在队列头操作 列表实现队列:利用python列表方法 代码如下: # 列表实现队列 class listQueue(object): def __init__(self): self.items = [] def is_empty(self): return self.items == None def size(self): return len(sel

  • Java模拟有序链表数据结构的示例

    有序链表: 按关键值排序.删除链头时,就删除最小(/最大)的值,插入时,搜索插入的位置. 插入时需要比较O(N),平均O(N/2),删除最小(/最大)的在链头的数据时效率为O(1), 如果一个应用需要频繁的存取(插入/查找/删除)最小(/最大)的数据项,那么有序链表是一个不错的选择 优先级队列 可以使用有序链表来实现 有序链表的插入排序: 对一个无序数组,用有序链表来排序,比较的时间级还是O(N^2) 复制时间级为O(2*N),因为复制的次数较少,第一次放进链表数据移动N次,再从链表复制到数组,

  • java链表应用--基于链表实现队列详解(尾指针操作)

    本文实例讲述了java基于链表实现队列.分享给大家供大家参考,具体如下: 在开始栈的实现之前,我们再来看看关于链表的只在头部进行的增加.删除.查找操作,时间复杂度均为O(1). 一.链表改进分析 对于队列这种数据结构,需要在线性结构的一端插入元素,另外一端删除元素.因此此时基于链表来实现队列,则有一端的时间复杂度为O(n).因此我们不能使用之前已经实现的链表结构,我们需要改进我们的链表.思路如下: 1.参考在链表头部删除.增加元素的时间复杂度为O(1)的思路,我们在链表的尾部设立一个Node型的

随机推荐