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/

相关文章
|
5天前
|
存储
栈与队列练习题
栈与队列练习题
|
5天前
数据结构第四课 -----线性表之队列
数据结构第四课 -----线性表之队列
|
6天前
|
存储 Java
数据结构奇妙旅程之栈和队列
数据结构奇妙旅程之栈和队列
|
9天前
|
算法 索引
数据结构与算法-三种队列基础入门
数据结构与算法-三种队列基础入门
8 0
|
9天前
带你彻底理解栈和队列
带你彻底理解栈和队列
17 1
|
10天前
|
存储 安全 Java
Java程序员必须掌握的数据结构:HashMap
HashMap底层原理实现是每个Java Boy必须掌握的基本技能,HashMap也是业务开发每天都需要遇到的好伙伴。如此基础且核心的底层数据结构,JDK也给其赋予了线程安全的功能,我们来看看~
24 1
Java程序员必须掌握的数据结构:HashMap
|
10天前
|
存储 安全 Java
Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列
Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列
|
10天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。
|
12天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
22 0
|
13天前
|
存储
数据结构:7、队列
数据结构:7、队列
20 0