[数据结构]手动实现栈

栈有两种实现:静态栈(数组)和动态栈(链表)。这里采用链表。

package com.darrenchan;

public class MyStack {
    public ListNode stackTop;
    public ListNode stackBottom;
    public MyStack(ListNode stackTop, ListNode stackBottom){
        this.stackTop = stackTop;
        this.stackBottom = stackBottom;
    }
    /**
     * 进栈
     */
    public static void pushStack(MyStack myStack, int value){
        ListNode node = new ListNode(value);
        node.next = myStack.stackTop;
        myStack.stackTop = node;
    }

    /**
     * 遍历
     * 只要栈顶元素指针不指向栈底
     */
    public static void traverse(MyStack myStack){
        ListNode stackTop = myStack.stackTop;
        while(stackTop != myStack.stackBottom){
            System.out.print(stackTop.value + " ");
            stackTop = stackTop.next;
        }
        System.out.println();
    }

    /**
     * 判断是否为空
     */
    public static boolean isEmpty(MyStack myStack){
        if(myStack.stackTop == myStack.stackBottom){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 出栈
     */
    public static void popStack(MyStack myStack){
        //栈不为空才出栈
        if(!isEmpty(myStack)){
            ListNode stackTop = myStack.stackTop;
            myStack.stackTop = stackTop.next;
            System.out.println(stackTop.value);
        }
    }

    /**
     * 清空栈
     */
    public static void clearStack(MyStack myStack){
        myStack.stackTop = null;
        myStack.stackBottom = myStack.stackTop;
    }

    public static void main(String[] args) {
        MyStack myStack = new MyStack(new ListNode(0), new ListNode(0));
        myStack.stackBottom = myStack.stackTop;
        //myStack.stackTop.next = null;

        System.out.println(isEmpty(myStack));
        //进栈
        pushStack(myStack, 1);
        pushStack(myStack, 2);
        pushStack(myStack, 3);
        traverse(myStack);
        System.out.println(isEmpty(myStack));

        popStack(myStack);
        clearStack(myStack);
        System.out.println(isEmpty(myStack));
    }
}

原文地址:https://www.cnblogs.com/DarrenChan/p/9535549.html

时间: 2024-08-30 10:37:29

[数据结构]手动实现栈的相关文章

python数据结构与算法——栈

# 栈# 其实python里面的list就可以当栈使用啦,用collections.deque也可以# 1. 入栈 list.append(item)# 2. 出栈 item = list.pop()# 3. 对于首元素出栈,还可以 item = list.pop(0) 和队列概念一样# 4. 其实还可以任意元素出栈 item = list.pop(i) 相当于删除第i个元素# 注意3,4是很耗时间的 栈可以方便用来判断一个字符串是否回文,但是要在一个长字符串中找到最大的回文一般用的数据结构是后

数据结构快速回顾——栈

堆栈,也可直接称栈,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端进行加入资料和输出资料的运算.另外堆栈也可以用一维阵列或连结串行的形式来完成. 1 #define STACK_INIT_SIZE 100 2 #define STACKINCREMENT 10 3 4 typedef struct 5 { int* top; 6 int* base; 7 int stacksize; 8 }SqStack; 9 10 int InitStack(SqStack &

【手动开栈】【dfs序】【树状数组】【Tarjan】bzoj2819 Nim

考虑树状数组区间修改(只对其子树的答案有影响)点查询,每个点记录的是它到根路径上的权值异或和. 答案时query(L)^query(R)^a[lca]. 这种方法在支持区间加法.减法的树上询问的时候可以避免树链剖分. 可能爆栈,考虑手动开栈.(诶诶Tarjan预处理lca的时候怎么没手动开栈?不要在意^_^) 实际上不会爆的. #include<cstdio> #include<stack> #include<algorithm> #include<queue&g

javascript数据结构与算法---栈

在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈.栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现. 一:对栈的操作. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端陈为栈顶.比如餐馆里面洗盘子,只能先洗最上面的盘子,盘子洗完后,也只能螺到这一摞盘子的最上面.栈被称为 "后入先出"(LIFO)的数据结构. 由于栈具有后入先出的特点

数据结构实验之栈:进制转换

            数据结构实验之栈:进制转换 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数:第二行输入R. 输出 输出转换所得的R进制数. 模板: while(n!=0) { mod = n%r; q[i++] = mod;//i初始化为0 n/=r; }  

数据结构实验之栈:行编辑器

数据结构实验之栈:行编辑器 题目描述 一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区. 由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的.较好的做 法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区.允许用户输入出差错,并在发现有误时可以及时更正.例如,当用户发现刚 刚键入的一个字符是错的时,可补进一个退格符"#",以表示前一个字符无效: 如果发现当前

SDUT OJ 1479 数据结构实验之栈:行编辑器

数据结构实验之栈:行编辑器 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区. 由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的.较好的做 法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区.允许用户输入出差错,并在发现有误时可以及时更正.例如,当

迷宫问题,手动模拟栈

(1)迷宫问题 ①问题描述 这是心理学中的一个经典问题.心理学家把一只老鼠从一个无顶盖的大盒子的入口处放入,让老鼠自行找到出口出来.迷宫中设置很多障碍阻止老鼠前行,迷宫唯一的出口处放有一块奶酪,吸引老鼠找到出口. 简而言之,迷宫问题是解决从布置了许多障碍的通道中寻找出路的问题.本题设置的迷宫如图1所示. 图1 迷宫示意图 迷宫四周设为墙:无填充处,为可通处.设每个点有四个可通方向,分别为东.南.西.北.左上角为入口.右下角为出口.迷宫有一个入口,一个出口.设计程序求解迷宫的一条通路. ②基本要求

[欧拉回路+手动开栈] poj 1780 Code

题目链接: http://poj.org/problem?id=1780 Code Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2037   Accepted: 751 Description KEY Inc., the leading company in security hardware, has developed a new kind of safe. To unlock it, you don't need