简介 目录 评价 推荐
  • qq_慕神4556126 2020-09-07

    说实话,在栈中加一个取栈顶元素会更友好

    http://img1.mukewang.com/5f55d2380001a70c04600925.jpg

    0赞 · 0采集
  • 我入戲太深 2020-03-13

    default

    截图
    0赞 · 0采集
  • 我入戲太深 2020-03-12

    类模板

    运算符重载

    截图
    0赞 · 0采集
  • 我入戲太深 2020-03-12

    出栈传入的是引用的好处:

    使用这个函数的时候,传入参数可以是一个变量,这个变量可以把传给他的值取出

    执行入栈操作,把元素存入栈顶,栈顶指针++以后指向了一个空位置(下一个元素要入栈的位置)所以入栈先复制再++操作

    入栈操作后做出栈操作,要先把栈顶指针--指向有元素的位置,再把栈顶元素赋值给变量 ,达到了栈高度度下降,并且返回了一个值


    0赞 · 0采集
  • 孙三三 2020-02-06

    修改后:

    #include <iostream>
    #include <stdlib.h>
    #include "MyStack.h"
    #include <algorithm>
    #include <string>
    using namespace std;
    
    //用栈进行括号匹配
    
    int main(void)
    {
        //定义两个栈
        MyStack *pStack = new MyStack(30);//用于存放输入字符串的字符
        MyStack *pNeedStack = new MyStack(30);//用于存放栈顶急需匹配的字符
    
        char str[] = "[()]";
        char currentNeed = 0;
        for(int i = 0; i < strlen(str);i++)
        {
            if(str[i] != currentNeed)
            {
                pStack->push(str[i]);
                switch(str[i])
                {
                    case'[':
                        if(currentNeed != 0)//currentNeed有一个正确的值
                        {
                            pNeedStack->push(currentNeed);
                        }
                        currentNeed = ']';
                        break;
                    case '(':
                        if(currentNeed != 0)
                        {
                            pNeedStack->push(currentNeed);
                        }
                        currentNeed = ')';
                        break;
                    default:
                        cout<<"字符串括号匹配"<<endl;
    
                        return 0;
                }
            }
            else
            {
                char elem;
                pStack->pop(elem);
                if(pNeedStack->pop(currentNeed))
                {
                    currentNeed = 0;
                }
    
            }
        }
    
        if(pStack->stackEmpty())
        {
            cout<<"字符串括号匹配"<<endl;
        }
        else
        {
            cout<<"字符串括号不匹配"<<endl;
        }
    
    
        delete pStack;
        pStack = NULL;
    
        delete pNeedStack;
        pNeedStack = NULL;
    
    
        return 0;
    }

    还是有点不太理解,自己做

    0赞 · 0采集
  • 孙三三 2020-02-06
    #include <iostream>
    #include <stdlib.h>
    #include "MyStack.h"
    #include <algorithm>
    #include <string>
    using namespace std;
    
    //用栈进行括号匹配
    
    int main(void)
    {
        //定义两个栈
        MyStack *pStack = new MyStack(30);//用于存放输入字符串的字符
        MyStack *pNeedStack = new MyStack(30);//用于存放栈顶急需匹配的字符
    
        char str[] = "[()]";
        char currentNeed = 0;
        for(int i = 0; i < strlen(str);i++)
        {
            if(str[i] != currentNeed)
            {
                pStack->push(str[i]);
                switch(str[i])
                {
                    case'[':
                        if(currentNeed != 0)//currentNeed有一个正确的值
                        {
                            pNeedStack->push(currentNeed);
                        }
                        currentNeed = ']';
                        break;
                    case '(':
                        if(currentNeed != 0)
                        {
                            pNeedStack->push(currentNeed);
                        }
                        currentNeed = ')';
                        break;
                }
            }
            else
            {
                char elem;
                pStack->pop(elem);
                pNeedStack->pop(currentNeed);
            }
        }
    
        if(pStack->stackEmpty())
        {
            cout<<"字符串括号匹配"<<endl;
        }
        else
        {
            cout<<"字符串括号不匹配"<<endl;
        }
    
    
        delete pStack;
        pStack = NULL;
    
        delete pNeedStack;
        pNeedStack = NULL;
    
    
        return 0;
    }


    0赞 · 0采集
  • 孙三三 2020-02-06

    老师是把余数10,11,12,13直接压进栈的,感觉直接压A、B、C、D方便很多。


    老师的方法暂未看。

    0赞 · 0采集
  • 孙三三 2020-02-06

    上一个程序不完善,因为有16进制。

    https://www.cnblogs.com/curo0119/p/8304924.html

    自己修改:应该正确:

    #include <iostream>
    #include <stdlib.h>
    #include "MyStack.h"
    #include <algorithm>
    #include <string>
    using namespace std;
    
    //用栈进行进制转换
    
    #define BIN 2
    #define OCT 8
    #define HEX 16
    
    int main(void)
    {
        string str = "0123456789ABCDEF";
        MyStack *pStack = new MyStack(30);
    
        int N = 12;
    
        while(N)
        {
            int tmp = N % HEX;
    
            pStack->push(str[tmp]);
    
            N /= HEX;
        }
    
        pStack->stackTraverse(false);
        delete pStack;
        pStack = NULL;
        return 0;
    }



    0赞 · 0采集
  • 孙三三 2020-02-06

    http://img2.mukewang.com/5e3b8444000136d413060838.jpg

    首先把之前的MyStack改成int型:

    #include <iostream>
    #include <stdlib.h>
    #include "MyStack.h"
    #include <algorithm>
    using namespace std;
    
    //用栈进行进制转换
    
    #define BIN 2
    #define OCT 8
    #define HEX 16
    
    int main(void)
    {
        MyStack *pStack = new MyStack(30);
    
        int N = 1348;
    
        while(N)
        {
            int tmp = N % OCT;
            pStack->push(tmp);
            N /= OCT;
        }
    
        pStack->stackTraverse(false);
        delete pStack;
        pStack = NULL;
        return 0;
    }


    0赞 · 0采集
  • 孙三三 2020-02-05

    没做笔记。。

    0赞 · 0采集
  • 孙三三 2020-02-05
    main.cpp
    
    #include <iostream>
    #include <stdlib.h>
    #include "MyStack.h"
    using namespace std;
    
    //实现栈
    
    int main(void)
    {
        MyStack *pStack = new MyStack(5);
    
        pStack->push('h');
        pStack->push('e');
        pStack->push('l');
        pStack->push('l');
        pStack->push('o');
    
        pStack->stackTraverse(true);
    
        pStack->clearStack();
    
        cout<<pStack->stackLength()<<endl;
    
        if(pStack->stackEmpty())
        {
            cout << "栈为空" << endl;
        }
    
        delete pStack;
        pStack = NULL;
        return 0;
    }
    MyStack.cpp
    
    //
    
    #include "MyStack.h"
    #include <iostream>
    using namespace std;
    
    MyStack::MyStack(int size)//分配内存初始化栈空间,设定栈容量,栈顶
    {
        m_iSize = size;
        m_pBuffer = new char[size];
        m_iTop = 0;//表示此时的栈是个空栈
    
    }
    
    MyStack::~MyStack()
    {
        delete []m_pBuffer;
    }
    
    bool MyStack::stackEmpty()//判定栈是否为空,为空返回true,非空返回false
    {
        if(0 == m_iTop)
        {
            return true;
        }
        return false;
    }
    bool MyStack::stackFull()
    {
        if(m_iTop == m_iSize)
        {
            return true;
        }
        return false;
    }
    
    void MyStack::clearStack()//清空栈
    {
           m_iTop = 0;
    }
    
    int MyStack::stackLength()//已有元素的个数
    {
        return m_iTop;
    }
    
    bool MyStack::push(char elem)//元素入栈,栈顶上升
    {
        //先判断是否栈满
        if(stackFull())
        {
            return false;
        }
        m_pBuffer[m_iTop] = elem;
        m_iTop++;
        return true;
    }
    //法二
    //char MyStack::pop()
    //{
    //    if(stackEmpty())
    //    {
    //        throw 1;
    //    }
    //    else
    //    {
    //        m_iTop--;
    //        return m_pBuffer[m_iTop];
    //    }
    //}
    bool MyStack::pop(char &elem)//元素出栈,栈顶下降
    {
        //先判定是否为空
        if(stackEmpty())
        {
            return false;
        }
        m_iTop--;//入栈之后栈顶指向的是一个空位置
        elem = m_pBuffer[m_iTop];
        return true;
    }
    
    void MyStack::stackTraverse(bool isFromButoom)//遍历栈中所有元素
    {
        if(isFromButoom)
        {
            for(int i = 0; i < m_iTop;i++)//栈的长度就是m_iTop
            {
                cout<< m_pBuffer[i] << ",";
            }
        }
        else
        {
            for(int i = m_iTop-1; i>=0;i--)
            {
                cout << m_pBuffer[i] << ",";
            }
        }
    
    }
    MyStack.h
    
    
    
    #ifndef INC_0131_MYSTACK_H
    #define INC_0131_MYSTACK_H
    class MyStack
    {
    public:
        MyStack(int size);//分配内存初始化栈空间,设定栈容量,栈顶
        ~MyStack();//回收栈空间内存
        bool stackEmpty();//判定栈是否为空,为空返回true,非空返回false
        bool stackFull();
        void clearStack();//清空栈
        int stackLength();//已有元素的个数
        bool push(char elem);//元素入栈,栈顶上升
        bool pop(char &elem);//元素出栈,栈顶下降
        void stackTraverse(bool isFromButoom);//遍历栈中所有元素
    
    private:
        char *m_pBuffer;//栈空间指针
        int m_iSize;//栈容量
        int m_iTop;//栈顶,栈中元素个数栈顶为1说明有一个元素
    };
    
    #endif //INC_0131_MYSTACK_H


    1赞 · 1采集
  • 孙三三 2020-02-05

    为什么用.h和.cpp:https://blog.csdn.net/happywlg123/article/details/80375593

    0赞 · 0采集
  • Humble678 2019-09-26
    数据结构—堆栈
    截图
    0赞 · 0采集
  • 噔噔蹬咿呀 2019-09-21

    要想用 new,这个类要有一个默认的构造函数

    截图
    0赞 · 0采集
  • 噔噔蹬咿呀 2019-09-20

    函数指针 。

    截图
    0赞 · 0采集
  • 噔噔蹬咿呀 2019-09-20

    08:00

    截图
    0赞 · 0采集
  • 噔噔蹬咿呀 2019-09-20

    抛出异常 throw

    外部 try catch

    ?????

    (exception)异常,是用来报告你能恢复的那一类错误的,不是bugfix。

    截图
    0赞 · 0采集
  • 慕村2362248 2019-09-17
    public class Coordinate {
        private int x;
        private int y;
        Coordinate(int x,int y){
            this.x=x;
            this.y=y;
        }
        void PrintCoordinate(){
            System.out.println("("+x+","+y+")");
        }
    }


    0赞 · 0采集
  • 慕村2362248 2019-09-17
    public class Mystackmain {
        public static void main(String[] args) {
            Mystack p=new Mystack(5);
    
            p.push('h');
            p.push('e');
            p.push('l');
            p.push('l');
            p.push('0');
    
            p.StackTraverse(false);
            System.out.println(p.StackLength());
    
    
            p.pop();
            p.pop();
    
            p.StackTraverse(false);
            System.out.println(p.StackLength());
    
            if(p.isEmpty()){
                System.out.println("栈为空");
            }
            if(p.isFull()){
                System.out.println("栈为满");
            }
    
            p.DeleteMystack();
    
        }


    0赞 · 0采集
  • 慕村2362248 2019-09-17
    public class Mystack {
        private int head;
        private char[] stack;
        private int StackLength;
        private int StackCapacity;
        Mystack(int StackCapacity){
            this.StackCapacity=StackCapacity;
            head=-1;
            StackLength=0;
            stack=new char[StackCapacity];
        }
        void DeleteMystack(){
            stack=null;
        }
    
        boolean isFull(){
            if(head+1==StackCapacity){
                return true;
            }
            return false;
        }
    
        boolean isEmpty(){
            if(head==-1){
                return true;
            }
            return false;
        }
    
        void ClearStack(){
            head=-1;
            StackLength=0;
        }
    
        int StackLength(){
            return StackLength;
        }
    
        boolean push(char k){
            if(isFull()){
                return false;
            }
            head++;
            stack[head]=k;
            StackLength++;
            return true;
        }
    
        boolean pop(){
            if(isEmpty()){
                return false;
            }
            System.out.println("出栈元素为"+stack[head]);
            head--;
            StackLength--;
            return true;
        }
    
        void StackTraverse(boolean isFromTop){
            if(!isFromTop){
                for(int i=0;i<=head;i++){
                    System.out.print(stack[i]);
                }
                System.out.println();
            }
            else {
                for (int i = head; i >= 0; i--) {
                    System.out.print(stack[i]);
                }
                System.out.println();
            }
        }

    java实现

    0赞 · 0采集
  • 慕前端8042923 2019-08-23

    栈类:后进先出

    公有函数:

    MyStack(int size):构造函数,分配内存空间

    ~MyStack()           :析构函数与构造函数相反,主要在构造函数执行完毕后被自动调用执行善后工作,如释放构造函数开辟的内存

    int stackLength(): 返回栈里面的元素个数(不是内存空间大小)

    void push(char elem):入栈(入栈前要判断栈是否已满)

    void pop(char &elem):出栈(出栈前要判断栈是否为空)

    入栈导致栈顶上升    出栈导致栈顶下降

                        


    截图
    0赞 · 0采集
  • 慕妹6568455 2019-08-16
    看过
    0赞 · 0采集
  • 慕田峪4102898 2019-07-14

    当成员变量比较复杂时要用到拷贝构造函数

    1赞 · 0采集
  • 慕田峪4102898 2019-07-13

    LIFO: last in first out

    后进先出

    0赞 · 0采集
  • 慕沐5186000 2019-07-07
    ,。
    截图
    0赞 · 1采集
  • 慕UI9399720 2019-05-06

    使用类模板时要在每个成员函数前加上template<typename T>,每个成员函数类名后加上<T>。 使用重载运算符重载<<:(库文件加上#include<ostream>)


    定义类模板的模板函数T  template<typename T>  用T来取代通用数据类型 使用类模板时要在每个成员函数前加上template<typename T>,每个成员函数类名后加上<T>。

    5970794a00019fe812800720-156-88.jpg

    特殊类型

    #include<ostream>

    using namespace std;

    friend sotream &operator<<(ostream &out,类型名 &coor)//声明一个友元函数

    5b23119e0001c75012800720-156-88.jpg


    0赞 · 0采集
  • 慕UI9399720 2019-05-05

    实例的介绍

    https://img1.mukewang.com/5ccea0f5000114ab07670430.jpghttps://img3.mukewang.com/5ccea0270001d81f07720433.jpg

    0赞 · 0采集
  • 慕UI9399720 2019-05-05

    栈是一种先进后出的机制

    5a7a8ead0001aea112800720.jpg

    0赞 · 0采集
  • Mor1arty 2019-04-05

    栈类的声明

    截图
    0赞 · 0采集
  • white_3_week 2019-04-04

    栈不能通过下标访问,需要重载

    可以通过pop方法打印弹出的值

    当打印的数是十六进制,会出现显示问题,所以我们自己建立索引列表

    截图
    0赞 · 0采集
数据加载中...
开始学习 免费