java 数据结构——堆栈和队列

队列的基本概念

  队列(简称队)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同。差别是线性表允许在任意位置插入和删除,而队列只允许在一端进行插入操作而在另一端进行删除操作。

  队列中允许插入操作的一端称为队尾,允许进行删除操作的一端称为队头。队列的插入操作通常称为入队列,队列的删除操作通常称为出队列。

  根据队列的定义,每次入队列的数据元素都放在原来的队尾之后成为新的队尾元素,每次出队列的数据元素都是队头元素。这样,最先入队列的数据元素总是最先出队列。最后入队列的数据元素总是最后出队列,所以队列也称为先进先出表。

  队列的抽象数据类型

  1、数据集合:队列的数据集合可以表示为a1,a2,a3,a4,每个数据元素的数据类型可以是任意类类型

  2、操作集合:1、入队列操作(append())

  2、出队列操作(delete())

  3、取队列的头元素(getFront())

  4、判断队列是否为空(isEmpty())

  源代码------顺序存储结构

  队列接口代码


package com.queue;

//队列接口

public interface Queue {

//入队列操作

public void append(Object object);

//出队列操作

public Object delete();

//取队列头元素

public Object getFront();

//判断队列是否为空

public boolean isEmpty();

}

 队列接口实例化类


package com.queue;

public class SeqQueue implements Queue {

//相关属性和构造方法

//默认大小

static final int defauleSize=10;

//队头

int front;

//队尾

int rear;

//队列元素个数统计

int count;

//队列初始化大小

int maxSize;

//队列数据信息

Object[] data;

public void initiate(int sz){

maxSize=sz;

front=rear=0;

count=0;

data=new Object[sz];

}

public SeqQueue(){

initiate(defauleSize);

}

public SeqQueue(int length){

initiate(length);

}

@Override

public void append(Object object) {

// TODO Auto-generated method stub

if(count>0&&front==rear){

return;

}

data[rear]=object;

//求模运算

rear=(rear+1)%maxSize;

count++;

}

@Override

public Object delete() {

// TODO Auto-generated method stub

Object object=null;

if(count==0){

object="404";

return object;

}else{

object=data[front];

//求模运算

front=(front+1)%maxSize;

count--;

return object;

}

}

@Override

public Object getFront() {

// TODO Auto-generated method stub

Object object=null;

if(count==0){

object="404";

return object;

}else{

return data[front];

}

}

@Override

public boolean isEmpty() {

// TODO Auto-generated method stub

return count!=0;

}

}

 实验结果:


package com.queue;

public class QueueTest {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

SeqQueue queue=new SeqQueue();

//判断队列是否为空

boolean target=queue.isEmpty();

System.out.println("队列是否为空:"+target);

//入队列

queue.append("c");

queue.append("c++");

queue.append("c#");

queue.append("object-c");

queue.append("php");

queue.append("java");

queue.append("ruby");

queue.append("javascript");

queue.append("ext");

queue.append("jquery");

//再次判断队列是否为空

boolean targets=queue.isEmpty();

System.out.println("再次判断队列是否为空:"+targets);

//出队列

Object object=queue.delete();

System.out.println("出队列的元素是:"+object);

//取队列头元素

Object front=queue.getFront();

System.out.println("队列头元素是:"+front);

}

}

  图片展示:

  源代码--------链式存储结构

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-02 03:04:48

java 数据结构——堆栈和队列的相关文章

数据结构――栈、队列和树(Java)

数据|数据结构 数据结构――栈.队列和树 开发者可以使用数组与链表的变体来建立更为复杂的数据结构.本节探究三种这样的数据结构:栈.队列与树.当给出算法时,出于简练,直接用Java代码. 栈 栈是这样一个数据结构,其数据项的插入和删除(获取)都只能在称为栈顶的一端完成.因为最后插入的数据项就是最先要删除的数据项,开发者往往将栈称为LILO(last-in, first-out)数据结构. 数据项压入(插入)或者弹出(删除或取得)栈顶.图13示例了一个有三个String数据项的栈,每个数据项压入栈顶

Java数组模拟优先级队列数据结构的实例_java

优先级队列如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了.这样,我们就引入了优先级队列 这种数据结构. 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 .对于优先权相同的元素,可按先进先出次序处理或按任意优先权

java数据结构与算法之双向循环队列的数组实现方法_java

本文实例讲述了java数据结构与算法之双向循环队列的数组实现方法.分享给大家供大家参考,具体如下: 需要说明的是此算法我并没有测试过,这里给出的相当于伪代码的算法思想,所以只能用来作为参考! package source; public class Deque { private int maxSize; private int left; private int right; private int nItems; private long[] myDeque; //constructor p

LinkedList学习示例模拟堆栈与队列数据结构_java

堆栈:先进后出First in Last Out FILO 如同一个杯子队列:先进先出 First in First out FIFO  如同一个水管 复制代码 代码如下: class Duilie{    private LinkedList link;    Duilie(){        link = new LinkedList();    }    public void myAdd(Object obj){        link.addFirst(obj);    }    pu

Java中的阻塞队列

1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时, 获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用.阻塞队列常用于生 产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程.阻塞队列就 是生产者存放元素的容器,而消费者也只从容器里拿元素. 阻塞队列提供了四种处理方法: 方法\处理方式  抛出异常  返回特殊值  一直阻塞    超时退出插入方 法          

深入浅析C语言中堆栈和队列_C 语言

1.堆和栈 (1)数据结构的堆和栈 堆栈是两种数据结构. 栈(栈像装数据的桶或箱子):是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取.这就如同要取出放在箱子里面底下的东西(放入的比较早的物体),首先要移开压在它上面的物体(放入的比较晚的物体). 堆(堆像一棵倒过来的树):是一种经过排序的树形数据结构,每个结点都有一个值.通常所说的堆的数据结构,是指二叉堆.堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆.由于堆的这个特性,常用来实现优先队列,堆的存取是随意,

偶写的链表、堆栈、队列的集合操作------的解释补充

偶发写了几个关于链表的集合操作的程序,有一些人反映说不是很懂,希望偶能够解释一下,当然, 偶的程序进行了一层的封装,可能理解起来不是很自然,另外程序本身也有部分的不完善,不理解是正常的! 偶粗略的总结了一下,主要是函数的分析,至于main函数,就留给大家细细琢磨吧~~ 1.定义一个接点型的数据结构类型struct Node{  DataType  info;  PNode link;};2.在用一个LinkType的数据结构将接点的头和尾封装一下,即保存头和尾的指针.struct LinkTyp

浅谈算法和数据结构 五 优先级队列与堆排序

在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象.这种数据结构就是优先级队列(Priority Queue) . 本文首先介绍优先级队列的定义,有序和无序数组以及堆数据结构实现优先级队列,最后介绍了基于优先级队列的堆排序(Heap Sort) 更

大话数据结构九:队列的链式存储结构(链队列)

1. 链队列的特点: 链队列其实就是单链表,只不过它是先进先出的单链表,为了实现方便,程序中设置了队头(front),队尾(rear)两个指针. 2. Java使用链表实现队列: //结点类,包含结点的数据和指向下一个节点的引用 public class Node<E> { private E data; // 数据域 private Node<E> next; // 指针域保存着下一节点的引用 public Node() { } public Node(E data) { thi