栈和队列的java简单实现

栈:这是一个先进后出的数据结构,生活中类似的浏览器的返回上一页就可以利用此结构实现,代码如下:

public class Stack<T> {
    private Object[] data;//存储数据
    private int top;//表示栈顶元素
    public Stack(){
        data = new Object[100];//为了说明原理随意指定
        top =-1;
    }
    public synchronized void  put(T t){    //压栈
       data[data.length] = t;
        top++;
    }
    public synchronized T pop(){    //出栈
        if(top<0){
            return null;
        }
        T t = (T) data[top];
        top --;
        return t;
    }
}

这只是我自己的Java实现只说明原理,但实际在java中是利用vector来存储数据的,我们知道vector其实是一个线程安全的ArrayList,而ArrayList的底层也是一个数组,所以原理上大同小异

  队列:队列其实就是我们生活中的排队现象,先进入的先出,后进入的后出,代码实现如下:

  

public class Queue<T> {
    private  Object[] data;  //存储数据
    private int head; //头
    private int tail;   //尾

    public Queue(){
        data = new Object[100];//为了说明原理随意指定
        head =1;
        tail =1;
    }
    public void put(T t){
        data[tail] =t;
        tail++;
    }
    public T get(){
        T t =(T) data[head];
        head ++;
        return t;
    }
}

如上所示,也只是说明原理,其实在java jdk中也有许多不同的对列,并且对列可以由数组实现,也可以由链表实现,下面介绍链表

链表是一个类似于现实中串项链的数据结构,前一个数据指向后一个数据,当然也可以后一个数据指向前一个数据,这就是双向链表,这里不做讨论

public class MyNode<T> {
    private Node<T> headNode ;
    public MyNode(T t){
        headNode = new Node<>(t,null);
    }
    public MyNode(){

    }
    private static class Node<E> {
        Object e;
        Node<E> next;
        Node(E element, Node<E> next) {
            this.e = element;
            this.next = next;
        }
    }
    public void put(T t){
        if(headNode==null){
            headNode = new Node<>(t,null);
        }else {
            headNode= new Node<>(t,headNode);
        }
    }
    public T get(int index){
        Node node = headNode;
        for(int i=2;i<index;i++){
            node= node.next;
        }
        T t = (T) node.e;
        return t;
    }
}

  

  以上就是用Java实现的简单链表,还有双向链表是一个元素指向前一个元素和后一个元素,原理大概相同,这里可以看书链表中取固定位置的数据是非常麻烦的,必须从第一个开始依次查找,这也就是linklist不用for(int i=0;i++;i<size())遍历的原因,因为linklist的底层就是通过链表来实现的

原文地址:https://www.cnblogs.com/qlqwjy/p/8637913.html

时间: 2024-10-12 20:04:15

栈和队列的java简单实现的相关文章

栈和队列的Java实现

一.  栈 1.概念 栈是一种特殊的线性表,它只能在栈顶(top)进行插入(push)和删除(pop)操作. 栈的常用操作: 入栈(push):向栈顶插入元素 出栈(pop):从栈顶删除元素 访问栈顶元素(peek):访问栈顶元素 2. 栈的顺序结构的实现 1 public class SequenceStack<T> { 2 3 private Object[] elementData; //数组用于承装元素 4 private int DEFAULT_SIZE = 20; //初始数组默认

数据结构之栈和队列及其Java实现

栈和队列是数据结构中非常常见又非常基础的线性表,在某些场合栈和队列使用很多,因此本篇主要介绍栈和队列,并用Java实现基本的栈和队列,同时用两个栈实现队列和用两个队列实现栈. 栈:栈是一种基于"后进先出"策略的线性表.在插入时(入栈),最先插入的元素在栈尾,最后插入的元素在栈顶:在删除时(出栈),最后插入的元素先出栈,最先插入的元素最后出栈.由此可见,对栈的插入和删除操作都是在栈顶位置进行的. 在Java中,提供了一个类Stack<E>来实现栈的这些特性,并提供了一些常用的

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

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

算法_栈与队列的Java链表实现

链表是一个递归的数据结构,它或者为null,或者是指向一个结点的引用,该结点含有一个泛型的元素和指向另一个链表的引用.可以用一个内部类来定义节点的抽象数据类型: private class Node /*定义节点类*/{ Item item; Node next; } 根据递归的定义,我们只需一个Node类型的变量就能表示一条链表,只要保证它的值是null或者指向另一个Node对象,且该对象的next域指向了另一条链表即可.链表表示的是一列元素,虽然也可以用数组来表示一列元素,但是在链表中插入元

剑指Offer-5.用两个栈实现队列(C++/Java)

题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈的特点是先进后出,队列的特点则是先进先出. 题目要求我们用两个栈来实现一个队列,栈和队列都有入栈(入队)的操作,所以我们可以使用一个栈来模拟入队的操作,另一个栈用来负责出队. 利用stack1模拟入队操作,stack2模拟出队操作. 当有元素入队时,就直接压入stack1中,当要出出队时,stack1中元素弹出的顺序和要求出队的顺序是正好相反的,我们可以将stack1的元素依次弹出,再压入st

剑指offer-面试题7:俩个栈实现队列(java)

详细分析请参照C语言版,这里仅仅给出实现代码,注释很详细,不得不说java各种api用起来真是爽飞了 1 package com.xsf.SordForOffer; 2 3 import java.util.Stack; 4 5 /** 6 * 剑指offer pro7,俩个链表实现一个队列 7 * @author ELVIS 8 */ 9 class ListQueue{ 10 //定义俩个栈 11 private Stack<String> stack1 = new Stack<St

简单的栈和队列

1 /* 2 入门之栈(Stack)和队列(Queue) 3 在C++中STL中预置了<stack>和<queue> 4 简单介绍栈和队列的思想和使用方法 5 栈:先入后出(LIFO),可以理解为将球放进一个一段封闭的管子,只能从入口区出,先进的球只能最后出来 6 队列:先入先出(FIFO),可以理解为将球放进不封闭的管子,球从另一端出来,先进的球先出 7 常见应用:栈可以用于深搜(DFS),队列可以用于宽搜(BFS) 8 只有看看例子就可以很好的理解栈和队列了,简单的先介绍这些

表、栈和队列

表.栈和队列是最简单和最基本的三种数据结构——<数据结构与算法分析—— C 语言描述> 表 应用范畴: i. 多项式 ADT i. 基数排序(多趟桶式排序) 代码实现: i. 多重表 链表的游标实现 代码实现: 栈 栈又叫做 LIFO(后进先出)表——<数据结构与算法分析—— C 语言描述> 应用范畴: i. 平衡符号 i. 后缀表达式 有中缀表达式 s1 : ((2 + 3)* 8 + 5 + 3)* 6 总能转换成后缀表达式 s2 : 2 3 + 8 * 5 + 3 + 6 *

《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了生命. 本章学习重点: 理解抽象数据类型(ADT)的概念 学习如何对表进行有效的操作 熟悉栈ADT及其在实现递归方面的应用 熟悉队列ADT及其在操作系统和算法设计中的应用 ADT 抽象数据类型(abstract data type)是一个操作的集合,是数学的抽象,在ADT中不涉及如何实现操作的集合,这可以看作是模块化设计的扩充. 对于每