java 数据结构之栈与队列

java 数据结构之栈与队列

一:对列

队列是一种先进先出的数据结构

实现代码:

package Queue; 

/*
 * 使用java构建队列,并模拟实现队列的入队和出对方法
 */ 

public class Queue {   //队列类 

  private int maxSize; //定义队列的长度
  private int[] arrQueue;   //队列
  private int rear;   //定义队列的尾指针
  private int front;  //定义队列的头指针
  private int empty; //元素的个数 

  public Queue(int s)  //初始化构造函数
  {
    maxSize = s;
    arrQueue = new int[s];
    rear = -1;
    front=0;
    empty = 0;
  } 

  //实现插入方法
  public void insert(int m)
  {
    if(rear == maxSize-1)  //处理循环
      rear = -1;
    arrQueue[++rear] = m;  //对尾指针加一,把值放在队列结尾
    empty++;   //队列元素个数加1
    System.out.println("队列入队元素 为:" + m);
  } 

  //实现出栈的方法,即取得队列的头元素
  public int remove()
  {
    int temp = arrQueue[front++]; //将栈顶元素赋值给temp,栈顶指针加1
    if(front == maxSize) //处理循环
      front = 0;
    empty--; //元素个数-1
    return temp;
  } 

  //判断队列是否为空
  public boolean isEmpty()
  {
    return (empty==0);
  } 

  //判断对列是否为满
  public boolean isFull()
  {
    return (empty == maxSize);
  } 

  //返回队列长度
  public int qLong()
  {
    return empty;
  } 

  public static void main(String[] args) {
    Queue q = new Queue(5); //初始化队列为5个元素 

    q.insert(1);
    q.insert(2);
    q.insert(3);
    q.insert(4);
    q.insert(5); 

    int t1 = q.remove();
    System.out.println("队列元素出队:" + t1);
    int t2 = q.remove();
    System.out.println("队列元素出队:" + t2); 

    System.out.println("队列是否为空:" + q.isEmpty());
    System.out.println("队列是否为满:" + q.isFull());
    System.out.println("队列的长度:" + q.qLong());
  } 

}

二:栈

栈是一种先进后出的数据结构

1:使用数组模拟栈

package Statck;
/*
 * 使用java构建栈,并模拟实现栈的入栈和出栈方法
 * 使用数组实现
 */ 

public class Statck1 { 

  private int maxSize;   //栈的最多元素数
  private int top;  //栈顶指针
  private int len;   //栈的深度
  private int[] arrStack; // 模拟栈 

  //栈的初始化
  public Statck1(int s){
    maxSize = s;
    len =0;
    top= -1;
    arrStack = new int[s];
  } 

  //获取栈的长度
  public int getLen(){
    return len;
  } 

  //获取当前栈还能插入多少个f元素
  public int getLeaveLen(){
    return (maxSize-len);
  }
  //判断栈是否满
  public boolean isFull(){
    return (len==maxSize);
  } 

  //判断栈是否为空
  public boolean isEmpty(){
    return (len ==0);
  } 

  //元素入栈
  public void inStack(int s)
  {
    arrStack[++top] = s; //栈顶指针加1,入栈
    System.out.println("元素入栈:" + s);
    len ++ ;//栈深度+1
  } 

  //元素出栈
  public int outStack()
  {
    int temp = arrStack[top--];//赋值之后减1
    System.out.println("元素出栈:" + temp);
    len--;  //栈深度-1
    return temp;
  } 

  public static void main(String[] args) {
    Statck1 s = new Statck1(5); 

    s.inStack(1);
    s.inStack(2);
    s.inStack(3);
    s.inStack(4);
    s.inStack(5); 

    s.outStack();
    s.outStack();
    System.out.println("栈的长度:" + s.getLen());
    System.out.println("还能入栈元素个数:" + s.getLeaveLen());
    System.out.println("栈的是否为空:" + s.isEmpty());
    System.out.println("栈的是否为满:" + s.isFull());
  }
}

2:使用链表模拟栈

package Statck; 

import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.List; 

/*
 * 使用java构建栈,并模拟实现栈的入栈和出栈方法
 * 使用链表实现
 */ 

public class Statck2<E extends Object> {  

  private List<E> statck = new ArrayList<E>();  

  public Statck2(){
       //栈的初始化
  } 

  //清空栈
  public void clear(){
    statck.clear();
    System.out.println("清空栈..........");
  }
  //判断栈是否为空
  public boolean isEmpty(){
    return statck.isEmpty();
  }
  //获取栈顶元素
  public E getTop(){
    if(isEmpty())
      return null;
    return statck.get(0);
  } 

  //弹出栈操作
  public E pop(){
    if (isEmpty())
      throw new EmptyStackException();
    System.out.println(statck.size() + "\t 出栈");
    return statck.remove(statck.size() - 1);
  } 

  //压入栈操作
  public void push(E e){
    statck.add(e);
    System.out.println(e + "\t 入栈");
  } 

  //获取当前栈的深度
  public int getStatckSize(){
    if(isEmpty())
      throw new EmptyStackException();
    return statck.size();
  } 

  public static void main(String[] args) {
    Statck2 s = new Statck2();
    s.clear();      //清空栈
    System.out.println("当前栈是否为空:" + s.isEmpty());
    s.push(1);
    s.push(2);
    s.push(3); 

    s.pop();
    System.out.println("当前栈的深度为:" + s.getStatckSize());
    System.out.println("当前栈顶元素为:" + s.getTop());
  } 

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言或者到本站社区交流讨论,大家共同进步!

(0)

相关推荐

  • Java数据结构之循环队列简单定义与用法示例

    本文实例讲述了Java数据结构之循环队列简单定义与用法.分享给大家供大家参考,具体如下: 一.概述: 1.原理: 与普通队列的区别在于循环队列添加数据时,如果其有效数据end == maxSize - 1(最大空间)的话,end指针又移动到-1的位置 删除数据时,如果head== maxSize时 head指针移动到0的位置 2.示例图: 二.实现代码: package com.java.queue; /** * @描述 对列 * @项目名称 Java_DataStruct * @包名 com.

  • Java模拟栈和队列数据结构的基本示例讲解

    栈和队列: 一般是作为程序员的工具,用于辅助构思算法,生命周期较短,运行时才被创建: 访问受限,在特定时刻,只有一个数据可被读取或删除: 是一种抽象的结构,内部的实现机制,对用户不可见,比如用数组.链表来实现栈. 模拟栈结构 同时,只允许一个数据被访问,后进先出 对于入栈和出栈的时间复杂度都为O(1),即不依赖栈内数据项的个数,操作比较快 例,使用数组作为栈的存储结构 public class StackS<T> { private int max; private T[] ary; priv

  • Java数据结构之队列的简单定义与使用方法

    本文实例讲述了Java数据结构之队列的简单定义与使用方法.分享给大家供大家参考,具体如下: 一.概述: 1.说明: 队列的原则时先进先出,就像生活中排队取票一样,谁排在前面谁先得到 2.有五个属性: 1)数组元素 2)最大空间 3)长度 4)队头 5)队尾 3.示例图: 二.代码实现 /** * @描述 对列 * @项目名称 Java_DataStruct * @包名 com.java.stack * @类名 Queue * @author chenlin * @version 1.0 * @S

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

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

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

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

  • Java数据结构之队列(动力节点Java学院整理)

    队列的定义: 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表. (1)允许删除的一端称为队头(Front). (2)允许插入的一端称为队尾(Rear). (3)当队列中没有元素时称为空队列. (4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表. 队列的修改是依先进先出的原则进行的.新来的成员总是加入队尾,每次离开的成员总是队列头上的(不允许中途离队). 队列的存储结构及实现 队列的顺序存储结构 (1) 顺序队列的定义: 队列

  • java 数据结构中栈和队列的实例详解

    java 数据结构中栈和队列的实例详解 栈和队列是两种重要的线性数据结构,都是在一个特定的范围的存储单元中的存储数据.与线性表相比,它们的插入和删除操作收到更多的约束和限定,又被称为限定性的线性表结构.栈是先进后出FILO,队列是先进先出FIFO,但是有的数据结构按照一定的条件排队数据的队列,这时候的队列属于特殊队列,不一定按照上面的原则. 实现栈:采用数组和链表两种方法来实现栈 链表方法: package com.cl.content01; /* * 使用链表来实现栈 */ public cl

  • Java数据结构之有效队列定义与用法示例

    本文实例讲述了Java数据结构之有效队列定义与用法.分享给大家供大家参考,具体如下: /** * @描述 有序对列 * 从任何位置插入数据都是有序的 * @项目名称 Java_DataStruct * @包名 com.java.stack * @类名 Queue * @author chenlin */ public class SequeQueue { private long[] arr; private int maxSize;// 最大空间 private int len;// 有效长度

  • java 数据结构之栈与队列

    java 数据结构之栈与队列 一:对列 队列是一种先进先出的数据结构 实现代码: package Queue; /* * 使用java构建队列,并模拟实现队列的入队和出对方法 */ public class Queue { //队列类 private int maxSize; //定义队列的长度 private int[] arrQueue; //队列 private int rear; //定义队列的尾指针 private int front; //定义队列的头指针 private int e

  • Java数据结构之栈与队列实例详解

    目录 一,栈 1,概念 2,栈的操作 3,栈的实现  4,实现mystack 二,队列 1,概念  2,队列的实现  3,实现myqueue 栈.队列与数组的区别? 总结 一,栈 1,概念 在我们软件应用 ,栈这种后进先出数据结构的应用是非常普遍的.比如你用浏 览器上网时不管什么浏览器都有 个"后退"键,你点击后可以接访问顺序的逆序加载浏览过的网页.   很多类似的软件,比如 Word Photoshop 等文档或图像编 软件中 都有撤销 )的操作,也是用栈这种方式来实现的,当然不同的

  • Java深入了解数据结构之栈与队列的详解

    目录 一,栈 1,概念 2,栈的操作 3,栈的实现 ①入栈 ②出栈 ③获取栈顶元素 ④判断栈是否为空 4,实现mystack 二,队列 1,概念 2,队列的实现 ①入队 ②出队 ③获取队首元素 3,实现myqueue 一,栈 1,概念 在我们软件应用 ,栈这种后进先出数据结构的应用是非常普遍的.比如你用浏 览器上网时不管什么浏览器都有 个"后退"键,你点击后可以接访问顺序的逆序加载浏览过的网页. 很多类似的软件,比如 Word Photoshop 等文档或图像编 软件中 都有撤销 )的

  • Java数据结构之栈的基本定义与实现方法示例

    本文实例讲述了Java数据结构之栈的基本定义与实现方法.分享给大家供大家参考,具体如下: 一.概述: 1.基本概念: 栈是一种数据结构,是只能在某一端插入和删除的特殊线性表.它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来). 栈是允许在同一端进行插入和删除操作的特殊线性表.允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom):栈底固定,而栈顶 浮动:栈中元素个数为零时称为空栈.插入一般

  • Python数据结构之栈、队列的实现代码分享

    1. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素. 栈(Stack)是限制插入和删除操作只能在一个位置进行的表,该位置是表的末端,称为栈的顶(top).栈的基本操作有PUSH(入栈)和POP(出栈).栈又被称为LIF

  • Python数据结构之栈、队列及二叉树定义与用法浅析

    本文实例讲述了Python数据结构之栈.队列及二叉树定义与用法.分享给大家供大家参考,具体如下: 目前只实现了三种,栈.队列和二叉树,哪天得空继续补吧~ 1. 栈 #栈 class Stack: def __init__(self,size = 16): self.stack = [] self.size = size self.top = -1 def setSize(self, size): self.size = size def isEmpty(self): if self.top ==

  • Python常见数据结构之栈与队列用法示例

    本文实例讲述了Python常见数据结构之栈与队列用法.分享给大家供大家参考,具体如下: Python常见数据结构之-栈 首先,栈是一种数据结构.具有后进先出特性. #栈的实现 class Stack(): def __init__(self,size): self.stack=[] self.size=size self.top=-1 def push(self,content): if self.Full(): print "Stack is Full" else: self.sta

  • Java数据结构之栈的线性结构详解

    目录 一:栈 二:栈的实现 三:栈的测试 四:栈的应用(回文序列的判断) 总结 一:栈 栈是限制插入和删除只能在一个位置上进行的表,此位置就是表的末端,叫作栈顶. 栈的基本操作分为push(入栈) 和 pop(出栈),前者相当于插入元素到表的末端(栈顶),后者相当于删除栈顶的元素. 二:栈的实现 public class LinearStack { /** * 栈的初始默认大小为10 */ private int size = 5; /** * 指向栈顶的数组下标 */ int top = -1

  • C语言编程数据结构的栈和队列

    目录 栈 数组实现 标题全部代码 Stack_array.c Stack_array.h 初始化数组栈 满栈后扩容 是否为空栈 压栈和退栈 链表实现 stack_chain.h stack_chain.c 整个压栈流程 整个弹栈流程 出栈情况 队列 队列的实现 queue_chain.h queue_chain.c 一个结构体类型用于维护这个队列 概念流程图 入队列的实现 出队列的实现 是否空队 栈 栈是一种以后进先出为顺序对对象进行添加或删除的数据结构 对栈进行形象记忆就像是桌子上的一堆书或一

随机推荐