为了账号安全,请及时绑定邮箱和手机立即绑定
  • 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+")");
        }
    }


  • 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();
    
        }


  • 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实现

  • 栈类:后进先出

    公有函数:

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

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

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

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

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

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

                        


    04:57
    看视频
  • 当成员变量比较复杂时要用到拷贝构造函数

  • LIFO: last in first out

    后进先出

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


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

    <!--此处有图片-->

    特殊类型

    #include<ostream>

    using namespace std;

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

    <!--此处有图片-->


  • 实例的介绍

    <!--此处有图片--><!--此处有图片-->

  • 栈是一种先进后出的机制

    <!--此处有图片-->

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

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

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

    05:45
    看视频
  • 插入栈元素要注意的问题:

    当定义的类的成员变量是复杂数据类型如指针等,在构造函数中分配了内存,需要用拷贝构造函数和赋值运算符

    当数据类型比较简单就可以直接使用默认的构造函数和默认的赋值运算符

    06:23
    看视频
  • 出栈传入的是引用的好处:

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

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

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

    如果出栈操作返回的是char类型,可以不用传递参数,因为可以把指针指向的位置的值直接返回出来,异常也可以返回

    04:53
    看视频
首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
"本课程是数据结构初级课程 1、熟练掌握C++语言基础语法"
老师告诉你能学到什么?
1、栈的工作原理 2、栈的实现方法及编码技巧 3、栈模板的编码技巧和使用技巧 4、数制转换编程思路及栈的作用 5、括号匹配编程思路及栈的作用
意见反馈 邀请有奖 帮助中心 APP下载
官方微信