数据结构之队列java版

//java由于泛型的擦除,用起来十分不方便

abstract class BaseQueue<T>{
    abstract boolean enQueue(T x);
    abstract T front(T x);//注意这里也要和c++ 区别一下 这里直接返回首部元素
    abstract boolean delQueue();
    abstract void clear();
}
class Queue<T> extends BaseQueue<T>{
    int mMaxSize,mIndexF,mIndexR;
    T []mQueue;
    @SuppressWarnings("unchecked")
    Queue(Class<T> type,int maxSize){
        mMaxSize=maxSize;
        mIndexF=mIndexR=0;
        mQueue=(T[])Array.newInstance(type, maxSize);
    }
    @Override
    boolean enQueue(T x) {
        // TODO Auto-generated method stub
        if(isFull()){
            //over flow
            return false;
        }else{
            mIndexF=(mIndexF+1)%mMaxSize;
            mQueue[mIndexF]=x;
            return true;
        }
    }
    @Override
    T front(T x) {
        // TODO Auto-generated method stub
        if(isEmpty()){
            //emprty
            return null;
        }
        else{
            x=mQueue[mIndexF];
            System.out.println(x);
            return x;
        }
    }

    @Override
    boolean delQueue() {
        // TODO Auto-generated method stub
        if(isEmpty()){
            //empty
            return false;
        }
        else{
            mIndexR=(mIndexR+1)%mMaxSize;
            return true;
        }
    }
    @Override
    void clear() {
        // TODO Auto-generated method stub
        mIndexF=mIndexR=0;
    }
    boolean isFull(){
        if((mIndexR+1)%mMaxSize==mIndexR){
            return true;
        }else{
            return false;
        }
    }
    boolean isEmpty(){
        return mIndexF==mIndexR;
    }
}
public class JBQueue {
    public static void main(String args[]){
        Integer j = 6;
        Queue<Integer> test=new Queue<>(Integer.class, 10);
        test.enQueue(3);
        test.front(j);//由于擦除的原因 直接导致j的值没有变
        System.out.println(test.front(j));
    }
    static int ff(int j){
        j--;
        return j;
    }
}
时间: 2024-08-05 21:45:35

数据结构之队列java版的相关文章

数据结构和算法(Java版)

主要内容:(内容来自互联网以及李刚著作的<突破程序员基本功的16课>) 1.数据结构:线性表.栈.队列.树&二叉树 2.算法:常用内部排序(选择.插入.交换.归并) 目录: 1. 线性表(顺序存储.链式存储单链表.双向链表)-------------2014/10/15 2. 栈(顺序栈.链栈)                                        -------------2014/10/15 线性表(顺序存储.链式存储):一对一松耦合关系.(List就是线性

数据结构之堆栈java版

import java.lang.reflect.Array; /* 具体原理在c++版已经说的很清楚,这里不再赘述, 就提一点:java的泛型具有边界效应,一旦离开作用域立马被替换为object类型,在new泛型数组需要借助反射. */ interface BaseStack<T>{ boolean push(T x); boolean pop(); void clear(); T top();}public class JBStack<T> implements BaseSta

数据结构与算法分析Java版pdf

下载地址:网盘下载 本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计).本书把算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面.缜密严格,并细致讲解精心构造程序的方法. 原文地址:https://www.cnblogs.com/longgg/p/8419233.html

数据结构之队列C++版

#include "stdafx.h"/* 队列是一种先进先出的线性表队列的核心是对头部和尾部索引的操作 如上图所示,当对头索引移动到最前面6,队尾又不不再末尾0的位置,那么如果不循环利用此栈,队列就满了,为此采用(f+1%maxSize)的方式进行 当对头索引到6的位置 求余结果恰好为0 又回到对头了.这便实现了循环利用.(注意maxSize=6+1,这是c++数组特性决定了的)*/template <class T>class BaseQueuq { //返回对头元素给

数据结构 -- 图的最短路径 Java版

作者版权所有,转载请注明出处,多谢.http://www.cnblogs.com/Henvealf/p/5574455.html 上一篇介绍了有关图的表示和遍历实现.数据结构 -- 简单图的实现与遍历 (Java)现在就来看看关于求图的最短路径的问题: 注意:本人学习图的时候看的书是: <<数据结构与算法 Java语言版>> (美)Adam Drozdek/著 周翔/译 机械工业出版社出版 由于要仔细讲解内容过多并且本人水平有限,推荐大家找出这本书来看,本篇文章主要是对其中Dijk

数据结构与问题求解-Java语言描述(第三版)

数据结构对程序的重要性不言而喻,用java语言来实现常见的一些数据结构,以及在相应数据结构上的操作对学习java的同学来说是必须掌握的. 本系列博文参考<数据结构与问题求解-Java语言描述(第三版)>来实现 在自己学习的过程中,更希望有机会与大家交流. PS :本人是菜鸟,只是用博客的方式激励自己.请轻喷.Fighting!

数据结构 Java版二叉排序树

二叉搜索树,又称为二叉查找树和二叉搜索树.它或者是一颗空树,或者具有下列性质的二叉树. 1 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值. 2 若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值. 3 它的左.右子树也都为二叉搜索树. 构造一颗二叉搜索树,目的不是为了排序,而是为了提高查找.插入和删除关键字的速度.一个有序数据集上的查找速度总是要快于无序数据集,而二叉搜索树这种非线性的结构,也有利于插入和删除的实现. 二叉搜索树的查找性能取决于二叉搜索树的形状,问

Java版数据结构插入数据时遇到的结点为空的问题

在演示Java版数据结构与算法教材中的头插法代码时遇到了空结点问题 . 先上代码. 链表类 import java.util.Scanner; public class ListLinked<T> { ListLinkedNode<Integer> head=new ListLinkedNode<Integer>();//声明头结点 //添加结点 public void addFromHead(int e){ ListLinkedNode<Integer>

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插