链表类型的栈结构

import org.w3c.dom.Node;

import java.util.LinkedList;import java.util.Scanner;

/** * @author laoduan * @create 2020-04-10-17:53 */public class LinkedListStackDemo {    public static void main(String[] args) {        LinkedListStack linkedListStack = new LinkedListStack();

        String key = "";        boolean loop = true;        Scanner scanner = new Scanner(System.in);

        while (loop){            System.out.println("------------------------");            System.out.println("show:显示栈");            System.out.println("exit:退出程序");            System.out.println("pop:出栈");            System.out.println("push:入栈\n");            System.out.println("输入你的选择\n");

            key = scanner.next();            switch (key){                case "show":                    linkedListStack.list();                    break;                case "push":                    System.out.println("请输入一个数");                    int value = scanner.nextInt();                    System.out.println("请输入数据");                    String data = scanner.next();                    MyNode myNode = new MyNode(value, data);                    linkedListStack.push(myNode);                    break;                case "pop":                    try {                        linkedListStack.pop();                    }catch (Exception e){                        System.out.println(e.getMessage());                    }                    break;                case "exit":                    scanner.close();                    loop=false;                    break;                default:                    break;

            }

        }        System.out.println("程序退出");

    }}

class LinkedListStack{    private int top=-1;

    MyNode head = new MyNode(0,"");    public MyNode getHead(){        return head;    }

    //入栈    public void push(MyNode myNode){        MyNode temp = head.next;        if(head.next==null){            head.next=myNode;        }else {            myNode.next=temp;            head.next=myNode;        }        top++;    }

    //出栈    public MyNode pop (){        MyNode node = head.next;        head.next=node.next;        System.out.println("取出的栈顶数据是:"+node);        if(node==null){            System.out.println("链表为空");        }        return node;    }

    public void list(){        if (head.next==null){            System.out.println("链表为空");            return;        }

        MyNode temp = head.next;        while (true){            if(temp==null){                break;            }            System.out.println(temp);            //将temp后移            temp=temp.next;        }    }

}

class MyLinkedList{    MyNode head =  new MyNode(0,"");    public MyNode getHead(){        return head;    }

    public void add(MyNode myNode){        MyNode temp = head.next;        if(head.next==null){            head.next=myNode;        }else {            myNode.next=temp;            head.next=myNode;        }    }

    public void show(){        if (head.next==null){            System.out.println("链表为空");            return;        }

        MyNode temp = head.next;        while (true){            if(temp==null){                break;            }            System.out.println(temp);            //将temp后移            temp=temp.next;        }    }}class MyNode{    int no;    String data;    MyNode next;

    public MyNode(int no,String data){        this.no=no;        this.data=data;    }

    @Override    public String toString() {        return "{" +                "no=" + no +                ", data=‘" + data + ‘\‘‘ +                ‘}‘;    }}

原文地址:https://www.cnblogs.com/laoduancode/p/12675603.html

时间: 2024-11-05 17:33:12

链表类型的栈结构的相关文章

日常学习随笔-数组、单链表、双链表三种形式实现栈结构的基本操作

一.栈结构 栈(stack)是限制插入和删除只能在一个位置上的表,该位置是 表的末端,叫做栈的顶(Top).对栈的基本操作有push(进栈),pop(出栈),peak(栈顶元素),size(栈容量)等. 栈的核心思想:"先进后出". 二.案例一:数组实现"栈" 1 package com.xfwl.algorithmAnalysis.stack; 2 3 import java.util.Arrays; 4 5 /** 6 * 自定义栈结构(基于数组的形式) 7 *

闭关修炼中 *** Java常用算法之 -- 栈结构

什么是栈结构: 栈结构从数据的运算来分类,栈结构具有特殊的运算规则. 从数据的逻辑结构来看,栈结构其实就是一种线性结构. but!!! 从数据的存储结构来划分,栈结构分为两类: 顺序表结构:即用一组地址连续的内存单元依次保存栈中的数据.在程序中,可以定义一个 指定大小的结构数组来作为栈,序号为0的元素就是栈底,在定义一个top保 存栈顶的序号. 链式栈结构:即使用链式形式保存栈中各元素的值.链表首部(head引用所指向元素)为栈顶, 链表尾部(指向地址为null)为栈底. 栈结构遵循:后进先出(

使用泛型实现栈结构

泛型类就是含有一个或者多个类型参数的类.定义泛型类很简单,只需要在类的名称后面加上"<"和">",并在其中指明类型参数,比如本例中的T. 也可以在其中指明多个参数,如K.V.多个参数之间使用逗号隔开.定义完类后,就可以在类中的域和方法中使用泛型参数. 注意: 泛型类型的参数只能使用类类型,而不能使用基本类型. 设计过程: 1)编写泛型类Stack,在该类中定义了3个方法,分别用来入栈的push()方法.用来出栈的pop()方法和用来判断栈是否为空的emp

Java 模拟栈结构

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

从lua的c源码了解lua栈结构和函数调用流程

因为实习需要用到lua所以最近在学习lua,在学习过程中我使用C++与lua做交互.正常来说,如果lua要调用C++的函数,C++需要返回一个整数,这个整数的值是这个C++函数需要返回给lua调用的值的个数.这样的做法才是正确的,只是我突然间想了下,如果我返回一个不正确的值会怎样呢?于是我这么做了,然后数据如预料之中变得很不正常.然后我又在想,为什么我返回不正确的值lua会得到这样的数据呢.于是我开始了lua的C源码分析.其实就是给自己挖了个大坑23333,然后我又是属于那种有问题没解决心里仿佛

JavaScript实现栈结构(Stack)

JavaScript实现栈结构(Stack) 一.前言 1.1.什么是数据结构? 数据结构就是在计算机中,存储和组织数据的方式. 例如:图书管理,怎样摆放图书才能既能放很多书,也方便取? 主要需要考虑两个问题: 操作一:新书怎么插入? 操作二:怎么找到某本指定的书? 常见的数据结构: 数组(Aarray) 栈(Stack) 链表(Linked List) 图(Graph) 散列表(Hash) 队列(Queue) 树(Tree) 堆(Heap) 注意:数据结构与算法与语言无关,常见的编程语言都有直

C++中利用链表实现一个栈

在实现栈之前应该思考栈的一些用法: push pop top isempty 想清楚栈顶的组成: 下面是实现代码: 1 #include<iostream> 2 3 using namespace std; 4 5 typedef int dataType; 6 7 struct node //链栈节点 8 { 9 dataType val; //数值 10 node *next; //指针域 11 }; 12 13 class lstack 14 { 15 public: 16 lstack

javascript中的栈结构

1.栈的定义 栈是一种和列表类似的数据结构,可以用它来解决很多的编程问题,栈是一种高效的数据结构,因为数据只能在栈的顶端添加或者删除,所以这样的操作很快而且容易实现. 栈是一种特殊的列表,站内的元素只能拖过列表的一端进行访问,这一端陈伟栈顶.一叠盘子是最常见的栈结构,只能从顶部取盘子,洗好的盘子也只能放在顶端.栈被称为后入先出的数据结构. 由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问.为了得到栈底的元素,必须拿掉上面的元素. 对栈的操作有将一个元素压入栈和将一个元素弹出栈.压入栈使

帧栈结构

帧栈结构是一种机器实现切换上下文的机制.具体介绍看 http://blog.csdn.net/yxysdcl/article/details/5569351 IA32体系涉及寄存器保存问题,%eax,%ecx,%edx由调用者保存,%ebx,%esi,%edi由被调用者保存,%esp,%ebp分别是栈指针和帧指针,%esp指向返回地址,%ebp由被调用者恢复. leave指令可以用于释放帧栈,等同于一个或两个pop指令. 帧栈结构存储于内存中,指令也存储于内存中,两者基本没关系,指令按照顺序执行