Java8实现任意参数的链栈

本文实例为大家分享了Java8实现任意参数的链栈,供大家参考,具体内容如下

1、实现功能

1)push():入栈;
2)pop():出栈;
3)getSize():获取栈大小;
4)display():展示栈。

以一下测试进行特别说明:

 /**
   * The main function.
 */
  public static void main(String[] args) {
    MyLinkedStack <Character> test = new MyLinkedStack<>();
    test.push('2');
    test.push('+');
    test.push('-');
    test.pop();
    test.push('(');
    test.display();
}

输出如下,即输出顺序为栈顶、栈顶下一个…

The linked stack is:
[(, +, 2]

2、代码

package DataStructure;

/**
 * @author: Inki
 * @email: inki.yinji@qq.com
 * @create: 2020 1026
 * @last_modify: 2020 1026
 */

public class MyLinkedStack <AnyType> {

  /**
   * Only used to store the head node.
   */
  private SingleNode<AnyType> head = new SingleNode(new Object());

  /**
   * The single linked list current size.
   */
  private int size = 0;

  /**
   * Push element to the end of the list.
   * @param:
   *   paraVal: The given value.
   */
  public void push(AnyType paraVal) {
    SingleNode <AnyType> tempNode = new SingleNode<>(paraVal);
    tempNode.next = head.next;
    head.next = tempNode;
    size++;
  }//Of push

  /**
   * Pop the last element.
   * @return:
   *   The popped value.
   */
  public AnyType pop(){

    if (size == 0) {
      throw new RuntimeException("The stack is empty.");
    }

    AnyType retVal = head.next.val;
    head.next = head.next.next;
    size--;
    return retVal;
  }//Of pop

  /**
   * Get the current size of the single linked list.
   * @return:
   *   The current size of the single linked list.
   */
  public int getSize() {
    return size;
  }//Of getSize

  /**
   * Display the single linked list.
   */
  public void display() {

    if (size == 0) {
      throw new RuntimeException("The stack is empty.");
    }//Of if

    System.out.print("The linked stack is:\n[");
    SingleNode <AnyType> tempNode = head;
    int i = 0;
    while (i++ < size - 1) {
      tempNode = tempNode.next;
      System.out.printf("%s, ", tempNode.val);
    }//Of while
    System.out.printf("%s]\n", tempNode.next.val);
  }//Of display

  /**
   * The main function.
   */
  public static void main(String[] args) {
    MyLinkedStack <Character> test = new MyLinkedStack<>();
    test.push('2');
    test.push('+');
    test.push('-');
    test.pop();
    test.push('(');
    test.display();
  }
}//Of class MyLinkedStack

class SingleNode <AnyType>{

  /**
   * The value.
   */
  AnyType val;

  /**
   * The next node.
   */
  SingleNode<AnyType> next;

  /**
   * The first constructor.
   * @param
   *   paraVal: The given value.
   */
  SingleNode (AnyType paraVal) {
    val = paraVal;
  }//The first constructor

}//Of class SingleNode

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java 实现链栈存储的方法

    如下所示: package com.learn.algorithm.linkStack; /** * 链栈实现 * @author Jiekun.Cui * @param <T> */ public class LinkStack<T> { private LinkStack<T>.Node<T> top = new Node<T>(); private int size=0; /** * 进栈 * @param t * @return ; */

  • Java8实现任意参数的链栈

    本文实例为大家分享了Java8实现任意参数的链栈,供大家参考,具体内容如下 1.实现功能 1)push():入栈: 2)pop():出栈: 3)getSize():获取栈大小: 4)display():展示栈. 以一下测试进行特别说明: /** * The main function. */ public static void main(String[] args) { MyLinkedStack <Character> test = new MyLinkedStack<>();

  • C++利用链栈实现表达式求值

    本文实例为大家分享了C++利用链栈实现表达式求值的具体代码,供大家参考,具体内容如下 #include<iostream.h> typedef int Status; typedef char Cstack; #define OK 1 #define ERROR 0 typedef struct StackNode { Cstack data; struct StackNode *next; }StackNode,*LinkStack; Status InitStack(LinkStack &

  • C#实现顺序栈和链栈的代码实例

    自己定义的栈的接口,完全是按照栈的常用方法以及命名方式实现: 注意以下类,接口都是在一个命名空间下 栈的接口:包括了常用的方法 namespace 栈 { interface IStackDS<T> { int Count { get; } int GetLength(); bool IsEmpty(); void Clear(); void Push(T item); T Pop(); T Peek(); } } 顺序栈的实现,参照顺序表实现 namespace 栈 { class SeqS

  • C语言实现链栈的步骤

    链栈图解 链栈的常规操作 /********************* 链栈的常规操作 ****************************/ LinkStack InitLinkStack(); // 初始化链栈 int StackEmpty(); // 判断链栈空 int StackLength(); // 求链栈长(链栈元素个数) int Push(); // 入栈 压栈 ElemType Pop(); // 出栈 弹栈 void DestroyStack(); // 销毁链栈 /**

  • C语言深入刨析数据结构之栈与链栈的设计与应用

    目录 一.栈的定义 二.栈的特点 三.栈的理解 四.链栈引入 五.链栈定义 六.链栈的结构体设计 七.链栈的基本操作 7.1链栈的初始化 7.2链栈判空 7.3链栈入栈 7.4链栈出栈 7.5取栈顶元素 八.总结 一.栈的定义 栈是限定仅在表尾进行插入和删除操作的数据结构(受到限制的线性表). 我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素为空栈. 二.栈的特点 后进先出 比如word,浏览器网页等一系列软件中,都有撤销的操作,就是利用栈的这种方式来实现的,可能不同软件的代码不

  • Java栈之链式栈存储结构的实现代码

    Java栈之链式栈存储结构实现 一.链栈 采用单链表来保存栈中所有元素,这种链式结构的栈称为链栈. 二.栈的链式存储结构实现 package com.ietree.basic.datastructure.stack; /** * 链栈 * * Created by ietree * 2017/4/29 */ public class LinkStack<T> { // 定义一个内部类Node,Node实例代表链栈的节点 private class Node { // 保存节点的数据 priva

  • C#数据结构与算法揭秘五 栈和队列

    这节我们讨论了两种好玩的数据结构,栈和队列. 老样子,什么是栈, 所谓的栈是栈(Stack)是操作限定在表的尾端进行的线性表.表尾由于要进行插入.删除等操作,所以,它具有特殊的含义,把表尾称为栈顶(Top) ,另一端是固定的,叫栈底(Bottom) .当栈中没有数据元素时叫空栈(Empty Stack).这个类似于送饭的饭盒子,上层放的是红烧肉,中层放的水煮鱼,下层放的鸡腿.你要把这些菜取出来,这就引出来了栈的特点先进后出(First in last out).   具体叙述,加下图. 栈通常记

  • javascript编程实现栈的方法详解【经典数据结构】

    本文实例讲述了javascript编程实现栈的方法.分享给大家供大家参考,具体如下: 栈是限定仅在表尾进行插入或删除操作的线性表,栈是先进后出的.栈的表尾称为栈顶(top),而表头端称为栈底(bottom). 和线性表类似,栈也有两种存储表示方法,顺序栈和链栈. 这里讲一下顺序栈,设置指针top指示栈顶元素在顺序栈中的位置.通常的做法就是以top=0表示空栈.base为栈底指针,top为栈顶指针. 如果base为null,则表示栈结构不存在,如果top=base则表示空栈.每当插入一个新的元素,

  • Java自定义实现链队列详解

    一.写在前面 数据结构中的队列应该是比较熟悉的了,就是先进先出,因为有序故得名队列,就如同排队嘛,在对尾插入新的节点,在对首删除节点.jdk集合框架也是提供也一个Queue的接口.这个接口代表一个队列.顺序队列:ArrayBlockingQueue,LinkedBlockingQueue.(上面两种是足色队列)还有一种是ConcurentLinkedQueue. 底层的实现由数组合链表两种的,数组的实现会有个弊端的,会造成假满的现象,开始的时候,队列为空的时候,对首引用变量个对尾的引用变量都为n

随机推荐