java实现栈与队列

一、栈

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。(先进后出)

访问权限:栈限制了访问权限,只可以访问尾节点,也就是最后添加的元素 即栈顶的元素

 1 /**
 2  * 栈 先进后出
 3  * @author Administrator
 4  *
 5  */
 6 public class MyStack {
 7     private long [] arr;
 8     private int top;
 9     public MyStack(){
10         arr=new long[10];
11         top=-1;//初始化的时候栈为空
12     }
13     public MyStack(int maxSize){
14         arr=new long [maxSize];
15         top=-1;
16     }
17     /**
18      * 入栈
19      */
20     public void push(long value){
21         arr[++top]=value;
22     }
23     /**
24      * 移出栈
25      */
26     public long pop(){
27         return arr[top--];
28     }
29     /**
30      * 查看 栈顶的数据
31      */
32     public long peek(){
33         return arr[top];
34     }
35     /**
36      * 查看是否为空
37      */
38     public boolean isEmpty(){
39         return top==-1;
40     }
41     /**
42      * 查看是否满了
43      */
44     public boolean isFull(){
45         return top==arr.length-1;
46     }
47     //测试
48     public static void main(String[] args) {
49         MyStack myStack=new MyStack();
50         myStack.push(12);
51         myStack.push(10);
52         myStack.push(34);
53         myStack.push(40);
54         System.out.println(myStack.peek());
55         while(!myStack.isEmpty()){
56             System.out.print(myStack.pop() +", ");
57         }
58         System.out.println(myStack.isEmpty());
59         System.out.println(myStack.isFull());
60     }
61 }

二、队列
  队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),
而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front);

访问权限:队列限制了访问权限,只可以访问队头的数据,也就是最先添加的元素。

/**
 * 队列 先进 先出
 * @author Administrator
 *
 */
public class MyQueue {
    private long [] arr;
    private int elements;//元素个数
    private int front;//队列 头
    private int end;//队列尾部
    public MyQueue(){
        arr=new long[10];
        elements=0;
        front=0;
        end=-1;
    }
    public MyQueue(int size){
        arr=new long[size];
        elements=0;
        front=0;
        end=-1;
    }
    /**
     * 添加数据  队列 从尾部添加
     */
    public void insert(long value){
        if(end==arr.length-1){
            end=-1;
        }
        arr[++end]=value;
        elements++;
    }
    /**
     * 移除数据  队列从头部移出
     */
    public long remove(){
        long value=arr[front++];
        if(front==arr.length){
            front=0;
        }
        elements--;
        return value;
    }
    /**
     * 查看 队列头部的数据
     */
    public long peek(){
        return arr[front];
    }
    /**
     * 查看 队列是否为空
     * @return
     */
    public boolean isEmpty(){
        return elements==0;
    }
    /**
     * 判断队列 是否满了
     */
    public boolean isFull(){
        return elements==arr.length;
    }
    public static void main(String[] args) {
        MyQueue myQueue=new MyQueue();
        myQueue.insert(1001);
        myQueue.insert(1000);
        myQueue.insert(1003);
        myQueue.insert(1005);
        System.out.println(myQueue.peek());
        while(!myQueue.isEmpty()){
            System.out.print(myQueue.remove()+", ");
        }
        System.out.println();
        System.out.println(myQueue.isEmpty());
        System.out.println(myQueue.isFull());

        myQueue.insert(1007);
        myQueue.insert(1002);
        myQueue.insert(1008);
        myQueue.insert(1009);
        while(!myQueue.isEmpty()){
            System.out.print(myQueue.remove()+", ");
        }
        System.out.println();
        System.out.println(myQueue.isEmpty());
        System.out.println(myQueue.isFull());

        myQueue.insert(1010);
        myQueue.insert(1012);
        myQueue.insert(1018);
        myQueue.insert(1019);
        while(!myQueue.isEmpty()){
            System.out.print(myQueue.remove()+", ");
        }
        System.out.println();
        System.out.println(myQueue.isEmpty());
        System.out.println(myQueue.isFull());

        myQueue.insert(1021);
        myQueue.insert(1022);
        myQueue.insert(1023);
        myQueue.insert(1024);
        while(!myQueue.isEmpty()){
            System.out.print(myQueue.remove()+", ");
        }
        System.out.println();
        System.out.println(myQueue.isEmpty());
        System.out.println(myQueue.isFull());
    }
}

时间: 2024-10-29 01:40:16

java实现栈与队列的相关文章

Java实现栈和队列

栈:LIFO(后进先出) 队列:FIFO(先进先出) 栈的顺序存储结构实现: /** * 基于数组实现的顺序栈 * @param <E> */ public class Stack<E> { private Object[] data = null; private int maxSize=0; //栈容量 private int top =-1; //栈顶指针 /** * 构造函数:根据给定的size初始化栈 */ Stack(){ this(10); //默认栈大小为10 }

算法(第四版)学习笔记之java实现栈和队列(链表实现)

下压堆栈(链表实现): import java.util.Iterator; public class LinkedStack<Item> implements Iterable<Item> { public class Node { Item item; Node next; } private Node frist; private int N = 0; public boolean isEmpty() { return N == 0; } public int size()

java实现栈(可以无限put)

一直想用java实现栈.队列,可是没时间,马上要找实习了,就复习了一下算法,实现了一个简单的栈,代码还是有问题的,有兴趣的兄弟帮忙改正 问题:多线程的话pop和push只能有一个方法被执行需要加互斥变量 import java.util.Arrays; public class Stack<Item> { private transient Object[] data;// 存储数据 private int top;// 表示栈顶元素 private int oldCapacity; publ

栈和队列的面试题Java实现

栈和队列的面试题Java实现 二.栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要求min.push.pop.的时间复杂度都是O(1) (6)判断栈的push和pop序列是否一致 1.栈的创建: 我们接下来通过链表的形式来创建栈,方便扩充. 代码实现: 1 public class Stack { 2 3 public Node he

栈和队列常见题型(java版)

直接上干货..... 栈和队列常见题型: 实现栈和实现队列. 两个栈实现一个队列. 设计栈,使得pop,push和min时间复杂度为O(1). 滑动窗口的最大值. 栈的进出序列. 实现栈和实现队列 主要包括:栈,队列,循环队列. package com.sywyg; /** * 实现栈 * 数组应该是Object类型的 * 注意top的设置影响出栈和获取栈顶元素. * size也可以用top代替 */ class MyStack<E>{ // 栈元素个数 private int size; /

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a

Java数据结构与算法(第四章栈和队列)

本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构(链表.树等等)一样,都适用于数据应用中作数据记录. 然而,本章要讲解的是数据结构和算法更多的是作为程序员的工具来运用.它们组要作为构思算法的辅助工具,而不是完全的数据存储工具.这些数据结构的生命周期比那些数据库类型的结构要短的多.在程序操作执行期间它们才被创建,通常它们去执行某项特殊的任务,当完成之后,它们就被销毁. 受限访问 在数组中,只要知道下标就可以访问数据项.或顺

java 栈和队列的模拟--java

栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作.因此,表头对于栈来说具有特殊的意义,称为栈顶.相应地,表尾称为栈底.不含任何元素的栈称为空栈. 栈的逻辑结构:假设一个栈S中的元素为an,an-1,..,a1,则称a1为栈底元素,an为栈顶元 素.栈中的元素按a1 ,a2,..,an-1,an的次序进栈.在任何时候,出栈的元素都是栈顶元素.换句话说,栈的修改是按后进先出的原则进行的.因此,栈又称为后进先出(Last In First Out)表,简称为LIFO表.所以,只要问题满足LI

浅析栈与队列在java中的基本应用

一.前提 摘自java程序设计教程(华盛顿大学/斯坦福大学著,陈志等译)-机械工业出版社 1.1栈/队列基础 像线性表一样,栈与队列中存储一组有序的值.这类数据结构至少需要支持下面几种操作: 将值放入数据结构中(添加操作): 将值从数据结构中取出(删除操作): 检查数据结构中是否还有值(判断数据结构是否为空). 栈与队列很相似:都是以某种特定的顺序存储元素序列.栈是一种先进先出/LIFO(LAST IN FIRST OUT)的结构,也就是最后保存到结构中的元素会最先被访问.队列则是一种先进先出/